ReactOS 0.4.17-dev-966-gf06eace
shader_sm1.c File Reference
#include "wined3d_private.h"
Include dependency graph for shader_sm1.c:

Go to the source code of this file.

Classes

struct  wined3d_sm1_opcode_info
 
struct  wined3d_sm1_data
 

Macros

#define WINED3D_SM1_DCL_USAGE_SHIFT   0
 
#define WINED3D_SM1_DCL_USAGE_MASK   (0xfu << WINED3D_SM1_DCL_USAGE_SHIFT)
 
#define WINED3D_SM1_DCL_USAGE_INDEX_SHIFT   16
 
#define WINED3D_SM1_DCL_USAGE_INDEX_MASK   (0xfu << WINED3D_SM1_DCL_USAGE_INDEX_SHIFT)
 
#define WINED3D_SM1_RESOURCE_TYPE_SHIFT   27
 
#define WINED3D_SM1_RESOURCE_TYPE_MASK   (0xfu << WINED3D_SM1_RESOURCE_TYPE_SHIFT)
 
#define WINED3D_SM1_OPCODE_MASK   0x0000ffff
 
#define WINED3D_SM1_INSTRUCTION_FLAGS_SHIFT   16
 
#define WINED3D_SM1_INSTRUCTION_FLAGS_MASK   (0xffu << WINED3D_SM1_INSTRUCTION_FLAGS_SHIFT)
 
#define WINED3D_SM1_INSTRUCTION_LENGTH_SHIFT   24
 
#define WINED3D_SM1_INSTRUCTION_LENGTH_MASK   (0xfu << WINED3D_SM1_INSTRUCTION_LENGTH_SHIFT)
 
#define WINED3D_SM1_COISSUE   (0x1u << 30)
 
#define WINED3D_SM1_COMMENT_SIZE_SHIFT   16
 
#define WINED3D_SM1_COMMENT_SIZE_MASK   (0x7fffu << WINED3D_SM1_COMMENT_SIZE_SHIFT)
 
#define WINED3D_SM1_INSTRUCTION_PREDICATED   (0x1u << 28)
 
#define WINED3D_SM1_REGISTER_NUMBER_MASK   0x000007ff
 
#define WINED3D_SM1_REGISTER_TYPE_SHIFT   28
 
#define WINED3D_SM1_REGISTER_TYPE_MASK   (0x7u << WINED3D_SM1_REGISTER_TYPE_SHIFT)
 
#define WINED3D_SM1_REGISTER_TYPE_SHIFT2   8
 
#define WINED3D_SM1_REGISTER_TYPE_MASK2   (0x18u << WINED3D_SM1_REGISTER_TYPE_SHIFT2)
 
#define WINED3D_SM1_ADDRESS_MODE_SHIFT   13
 
#define WINED3D_SM1_ADDRESS_MODE_MASK   (0x1u << WINED3D_SM1_ADDRESS_MODE_SHIFT)
 
#define WINED3D_SM1_DST_MODIFIER_SHIFT   20
 
#define WINED3D_SM1_DST_MODIFIER_MASK   (0xfu << WINED3D_SM1_DST_MODIFIER_SHIFT)
 
#define WINED3D_SM1_DSTSHIFT_SHIFT   24
 
#define WINED3D_SM1_DSTSHIFT_MASK   (0xfu << WINED3D_SM1_DSTSHIFT_SHIFT)
 
#define WINED3D_SM1_WRITEMASK_SHIFT   16
 
#define WINED3D_SM1_WRITEMASK_MASK   (0xfu << WINED3D_SM1_WRITEMASK_SHIFT)
 
#define WINED3D_SM1_SWIZZLE_SHIFT   16
 
#define WINED3D_SM1_SWIZZLE_MASK   (0xffu << WINED3D_SM1_SWIZZLE_SHIFT)
 
#define WINED3D_SM1_SRC_MODIFIER_SHIFT   24
 
#define WINED3D_SM1_SRC_MODIFIER_MASK   (0xfu << WINED3D_SM1_SRC_MODIFIER_SHIFT)
 
#define WINED3D_SM1_END   0x0000ffff
 
#define WINED3D_SM1_VERSION_MAJOR(version)   (((version) >> 8) & 0xff)
 
#define WINED3D_SM1_VERSION_MINOR(version)   (((version) >> 0) & 0xff)
 

Enumerations

enum  wined3d_sm1_address_mode_type { WINED3D_SM1_ADDRESS_MODE_ABSOLUTE = 0u << WINED3D_SM1_ADDRESS_MODE_SHIFT , WINED3D_SM1_ADDRESS_MODE_RELATIVE = 1u << WINED3D_SM1_ADDRESS_MODE_SHIFT }
 
enum  wined3d_sm1_resource_type {
  WINED3D_SM1_RESOURCE_UNKNOWN = 0x0 , WINED3D_SM1_RESOURCE_TEXTURE_1D = 0x1 , WINED3D_SM1_RESOURCE_TEXTURE_2D = 0x2 , WINED3D_SM1_RESOURCE_TEXTURE_CUBE = 0x3 ,
  WINED3D_SM1_RESOURCE_TEXTURE_3D = 0x4
}
 
enum  wined3d_sm1_opcode {
  WINED3D_SM1_OP_NOP = 0x00 , WINED3D_SM1_OP_MOV = 0x01 , WINED3D_SM1_OP_ADD = 0x02 , WINED3D_SM1_OP_SUB = 0x03 ,
  WINED3D_SM1_OP_MAD = 0x04 , WINED3D_SM1_OP_MUL = 0x05 , WINED3D_SM1_OP_RCP = 0x06 , WINED3D_SM1_OP_RSQ = 0x07 ,
  WINED3D_SM1_OP_DP3 = 0x08 , WINED3D_SM1_OP_DP4 = 0x09 , WINED3D_SM1_OP_MIN = 0x0a , WINED3D_SM1_OP_MAX = 0x0b ,
  WINED3D_SM1_OP_SLT = 0x0c , WINED3D_SM1_OP_SGE = 0x0d , WINED3D_SM1_OP_EXP = 0x0e , WINED3D_SM1_OP_LOG = 0x0f ,
  WINED3D_SM1_OP_LIT = 0x10 , WINED3D_SM1_OP_DST = 0x11 , WINED3D_SM1_OP_LRP = 0x12 , WINED3D_SM1_OP_FRC = 0x13 ,
  WINED3D_SM1_OP_M4x4 = 0x14 , WINED3D_SM1_OP_M4x3 = 0x15 , WINED3D_SM1_OP_M3x4 = 0x16 , WINED3D_SM1_OP_M3x3 = 0x17 ,
  WINED3D_SM1_OP_M3x2 = 0x18 , WINED3D_SM1_OP_CALL = 0x19 , WINED3D_SM1_OP_CALLNZ = 0x1a , WINED3D_SM1_OP_LOOP = 0x1b ,
  WINED3D_SM1_OP_RET = 0x1c , WINED3D_SM1_OP_ENDLOOP = 0x1d , WINED3D_SM1_OP_LABEL = 0x1e , WINED3D_SM1_OP_DCL = 0x1f ,
  WINED3D_SM1_OP_POW = 0x20 , WINED3D_SM1_OP_CRS = 0x21 , WINED3D_SM1_OP_SGN = 0x22 , WINED3D_SM1_OP_ABS = 0x23 ,
  WINED3D_SM1_OP_NRM = 0x24 , WINED3D_SM1_OP_SINCOS = 0x25 , WINED3D_SM1_OP_REP = 0x26 , WINED3D_SM1_OP_ENDREP = 0x27 ,
  WINED3D_SM1_OP_IF = 0x28 , WINED3D_SM1_OP_IFC = 0x29 , WINED3D_SM1_OP_ELSE = 0x2a , WINED3D_SM1_OP_ENDIF = 0x2b ,
  WINED3D_SM1_OP_BREAK = 0x2c , WINED3D_SM1_OP_BREAKC = 0x2d , WINED3D_SM1_OP_MOVA = 0x2e , WINED3D_SM1_OP_DEFB = 0x2f ,
  WINED3D_SM1_OP_DEFI = 0x30 , WINED3D_SM1_OP_TEXCOORD = 0x40 , WINED3D_SM1_OP_TEXKILL = 0x41 , WINED3D_SM1_OP_TEX = 0x42 ,
  WINED3D_SM1_OP_TEXBEM = 0x43 , WINED3D_SM1_OP_TEXBEML = 0x44 , WINED3D_SM1_OP_TEXREG2AR = 0x45 , WINED3D_SM1_OP_TEXREG2GB = 0x46 ,
  WINED3D_SM1_OP_TEXM3x2PAD = 0x47 , WINED3D_SM1_OP_TEXM3x2TEX = 0x48 , WINED3D_SM1_OP_TEXM3x3PAD = 0x49 , WINED3D_SM1_OP_TEXM3x3TEX = 0x4a ,
  WINED3D_SM1_OP_TEXM3x3DIFF = 0x4b , WINED3D_SM1_OP_TEXM3x3SPEC = 0x4c , WINED3D_SM1_OP_TEXM3x3VSPEC = 0x4d , WINED3D_SM1_OP_EXPP = 0x4e ,
  WINED3D_SM1_OP_LOGP = 0x4f , WINED3D_SM1_OP_CND = 0x50 , WINED3D_SM1_OP_DEF = 0x51 , WINED3D_SM1_OP_TEXREG2RGB = 0x52 ,
  WINED3D_SM1_OP_TEXDP3TEX = 0x53 , WINED3D_SM1_OP_TEXM3x2DEPTH = 0x54 , WINED3D_SM1_OP_TEXDP3 = 0x55 , WINED3D_SM1_OP_TEXM3x3 = 0x56 ,
  WINED3D_SM1_OP_TEXDEPTH = 0x57 , WINED3D_SM1_OP_CMP = 0x58 , WINED3D_SM1_OP_BEM = 0x59 , WINED3D_SM1_OP_DP2ADD = 0x5a ,
  WINED3D_SM1_OP_DSX = 0x5b , WINED3D_SM1_OP_DSY = 0x5c , WINED3D_SM1_OP_TEXLDD = 0x5d , WINED3D_SM1_OP_SETP = 0x5e ,
  WINED3D_SM1_OP_TEXLDL = 0x5f , WINED3D_SM1_OP_BREAKP = 0x60 , WINED3D_SM1_OP_PHASE = 0xfffd , WINED3D_SM1_OP_COMMENT = 0xfffe ,
  WINED3D_SM1_OP_END = 0Xffff
}
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (d3d_shader)
 
static unsigned int shader_get_param (const struct wined3d_sm1_data *priv, const DWORD *ptr, unsigned int *token, unsigned int *addr_token)
 
static const struct wined3d_sm1_opcode_info * shader_get_opcode (const struct wined3d_sm1_data *priv, unsigned int token)
 
static unsigned int shader_skip_opcode (const struct wined3d_sm1_data *priv, const struct wined3d_sm1_opcode_info *opcode_info, DWORD opcode_token)
 
static void shader_parse_src_param (DWORD param, const struct wined3d_shader_src_param *rel_addr, struct wined3d_shader_src_param *src)
 
static void shader_parse_dst_param (DWORD param, const struct wined3d_shader_src_param *rel_addr, struct wined3d_shader_dst_param *dst)
 
static unsigned int shader_skip_unrecognized (const struct wined3d_sm1_data *priv, const DWORD *ptr)
 
static void * shader_sm1_init (const DWORD *byte_code, size_t byte_code_size, const struct wined3d_shader_signature *output_signature)
 
static void shader_sm1_free (void *data)
 
static void shader_sm1_read_header (void *data, const DWORD **ptr, struct wined3d_shader_version *shader_version)
 
static void shader_sm1_read_src_param (struct wined3d_sm1_data *priv, const DWORD **ptr, struct wined3d_shader_src_param *src_param, struct wined3d_shader_src_param *src_rel_addr)
 
static void shader_sm1_read_dst_param (struct wined3d_sm1_data *priv, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param, struct wined3d_shader_src_param *dst_rel_addr)
 
static void shader_sm1_read_semantic (const DWORD **ptr, struct wined3d_shader_semantic *semantic)
 
static void shader_sm1_read_immconst (const DWORD **ptr, struct wined3d_shader_src_param *src_param, enum wined3d_immconst_type type, enum wined3d_data_type data_type)
 
static void shader_sm1_read_comment (const DWORD **ptr)
 
static void shader_sm1_validate_instruction (struct wined3d_shader_instruction *ins)
 
static void shader_sm1_read_instruction (void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins)
 
static BOOL shader_sm1_is_end (void *data, const DWORD **ptr)
 

Variables

static const struct wined3d_sm1_opcode_info vs_opcode_table []
 
static const struct wined3d_sm1_opcode_info ps_opcode_table []
 
static enum wined3d_shader_resource_type resource_type_table []
 
const struct wined3d_shader_frontend sm1_shader_frontend
 

Macro Definition Documentation

◆ WINED3D_SM1_ADDRESS_MODE_MASK

#define WINED3D_SM1_ADDRESS_MODE_MASK   (0x1u << WINED3D_SM1_ADDRESS_MODE_SHIFT)

Definition at line 66 of file shader_sm1.c.

◆ WINED3D_SM1_ADDRESS_MODE_SHIFT

#define WINED3D_SM1_ADDRESS_MODE_SHIFT   13

Definition at line 65 of file shader_sm1.c.

◆ WINED3D_SM1_COISSUE

#define WINED3D_SM1_COISSUE   (0x1u << 30)

Definition at line 48 of file shader_sm1.c.

◆ WINED3D_SM1_COMMENT_SIZE_MASK

#define WINED3D_SM1_COMMENT_SIZE_MASK   (0x7fffu << WINED3D_SM1_COMMENT_SIZE_SHIFT)

Definition at line 51 of file shader_sm1.c.

◆ WINED3D_SM1_COMMENT_SIZE_SHIFT

#define WINED3D_SM1_COMMENT_SIZE_SHIFT   16

Definition at line 50 of file shader_sm1.c.

◆ WINED3D_SM1_DCL_USAGE_INDEX_MASK

#define WINED3D_SM1_DCL_USAGE_INDEX_MASK   (0xfu << WINED3D_SM1_DCL_USAGE_INDEX_SHIFT)

Definition at line 33 of file shader_sm1.c.

◆ WINED3D_SM1_DCL_USAGE_INDEX_SHIFT

#define WINED3D_SM1_DCL_USAGE_INDEX_SHIFT   16

Definition at line 32 of file shader_sm1.c.

◆ WINED3D_SM1_DCL_USAGE_MASK

#define WINED3D_SM1_DCL_USAGE_MASK   (0xfu << WINED3D_SM1_DCL_USAGE_SHIFT)

Definition at line 31 of file shader_sm1.c.

◆ WINED3D_SM1_DCL_USAGE_SHIFT

#define WINED3D_SM1_DCL_USAGE_SHIFT   0

Definition at line 30 of file shader_sm1.c.

◆ WINED3D_SM1_DST_MODIFIER_MASK

#define WINED3D_SM1_DST_MODIFIER_MASK   (0xfu << WINED3D_SM1_DST_MODIFIER_SHIFT)

Definition at line 70 of file shader_sm1.c.

◆ WINED3D_SM1_DST_MODIFIER_SHIFT

#define WINED3D_SM1_DST_MODIFIER_SHIFT   20

Definition at line 69 of file shader_sm1.c.

◆ WINED3D_SM1_DSTSHIFT_MASK

#define WINED3D_SM1_DSTSHIFT_MASK   (0xfu << WINED3D_SM1_DSTSHIFT_SHIFT)

Definition at line 74 of file shader_sm1.c.

◆ WINED3D_SM1_DSTSHIFT_SHIFT

#define WINED3D_SM1_DSTSHIFT_SHIFT   24

Definition at line 73 of file shader_sm1.c.

◆ WINED3D_SM1_END

#define WINED3D_SM1_END   0x0000ffff

Definition at line 88 of file shader_sm1.c.

◆ WINED3D_SM1_INSTRUCTION_FLAGS_MASK

#define WINED3D_SM1_INSTRUCTION_FLAGS_MASK   (0xffu << WINED3D_SM1_INSTRUCTION_FLAGS_SHIFT)

Definition at line 43 of file shader_sm1.c.

◆ WINED3D_SM1_INSTRUCTION_FLAGS_SHIFT

#define WINED3D_SM1_INSTRUCTION_FLAGS_SHIFT   16

Definition at line 42 of file shader_sm1.c.

◆ WINED3D_SM1_INSTRUCTION_LENGTH_MASK

#define WINED3D_SM1_INSTRUCTION_LENGTH_MASK   (0xfu << WINED3D_SM1_INSTRUCTION_LENGTH_SHIFT)

Definition at line 46 of file shader_sm1.c.

◆ WINED3D_SM1_INSTRUCTION_LENGTH_SHIFT

#define WINED3D_SM1_INSTRUCTION_LENGTH_SHIFT   24

Definition at line 45 of file shader_sm1.c.

◆ WINED3D_SM1_INSTRUCTION_PREDICATED

#define WINED3D_SM1_INSTRUCTION_PREDICATED   (0x1u << 28)

Definition at line 53 of file shader_sm1.c.

◆ WINED3D_SM1_OPCODE_MASK

#define WINED3D_SM1_OPCODE_MASK   0x0000ffff

Definition at line 40 of file shader_sm1.c.

◆ WINED3D_SM1_REGISTER_NUMBER_MASK

#define WINED3D_SM1_REGISTER_NUMBER_MASK   0x000007ff

Definition at line 56 of file shader_sm1.c.

◆ WINED3D_SM1_REGISTER_TYPE_MASK

#define WINED3D_SM1_REGISTER_TYPE_MASK   (0x7u << WINED3D_SM1_REGISTER_TYPE_SHIFT)

Definition at line 60 of file shader_sm1.c.

◆ WINED3D_SM1_REGISTER_TYPE_MASK2

#define WINED3D_SM1_REGISTER_TYPE_MASK2   (0x18u << WINED3D_SM1_REGISTER_TYPE_SHIFT2)

Definition at line 62 of file shader_sm1.c.

◆ WINED3D_SM1_REGISTER_TYPE_SHIFT

#define WINED3D_SM1_REGISTER_TYPE_SHIFT   28

Definition at line 59 of file shader_sm1.c.

◆ WINED3D_SM1_REGISTER_TYPE_SHIFT2

#define WINED3D_SM1_REGISTER_TYPE_SHIFT2   8

Definition at line 61 of file shader_sm1.c.

◆ WINED3D_SM1_RESOURCE_TYPE_MASK

#define WINED3D_SM1_RESOURCE_TYPE_MASK   (0xfu << WINED3D_SM1_RESOURCE_TYPE_SHIFT)

Definition at line 37 of file shader_sm1.c.

◆ WINED3D_SM1_RESOURCE_TYPE_SHIFT

#define WINED3D_SM1_RESOURCE_TYPE_SHIFT   27

Definition at line 36 of file shader_sm1.c.

◆ WINED3D_SM1_SRC_MODIFIER_MASK

#define WINED3D_SM1_SRC_MODIFIER_MASK   (0xfu << WINED3D_SM1_SRC_MODIFIER_SHIFT)

Definition at line 86 of file shader_sm1.c.

◆ WINED3D_SM1_SRC_MODIFIER_SHIFT

#define WINED3D_SM1_SRC_MODIFIER_SHIFT   24

Definition at line 85 of file shader_sm1.c.

◆ WINED3D_SM1_SWIZZLE_MASK

#define WINED3D_SM1_SWIZZLE_MASK   (0xffu << WINED3D_SM1_SWIZZLE_SHIFT)

Definition at line 82 of file shader_sm1.c.

◆ WINED3D_SM1_SWIZZLE_SHIFT

#define WINED3D_SM1_SWIZZLE_SHIFT   16

Definition at line 81 of file shader_sm1.c.

◆ WINED3D_SM1_VERSION_MAJOR

#define WINED3D_SM1_VERSION_MAJOR (   version)    (((version) >> 8) & 0xff)

Definition at line 90 of file shader_sm1.c.

◆ WINED3D_SM1_VERSION_MINOR

#define WINED3D_SM1_VERSION_MINOR (   version)    (((version) >> 0) & 0xff)

Definition at line 91 of file shader_sm1.c.

◆ WINED3D_SM1_WRITEMASK_MASK

#define WINED3D_SM1_WRITEMASK_MASK   (0xfu << WINED3D_SM1_WRITEMASK_SHIFT)

Definition at line 78 of file shader_sm1.c.

◆ WINED3D_SM1_WRITEMASK_SHIFT

#define WINED3D_SM1_WRITEMASK_SHIFT   16

Definition at line 77 of file shader_sm1.c.

Enumeration Type Documentation

◆ wined3d_sm1_address_mode_type

Enumerator
WINED3D_SM1_ADDRESS_MODE_ABSOLUTE 
WINED3D_SM1_ADDRESS_MODE_RELATIVE 

Definition at line 93 of file shader_sm1.c.

94{
97};
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
#define WINED3D_SM1_ADDRESS_MODE_SHIFT
Definition: shader_sm1.c:65
@ WINED3D_SM1_ADDRESS_MODE_RELATIVE
Definition: shader_sm1.c:96
@ WINED3D_SM1_ADDRESS_MODE_ABSOLUTE
Definition: shader_sm1.c:95

◆ wined3d_sm1_opcode

Enumerator
WINED3D_SM1_OP_NOP 
WINED3D_SM1_OP_MOV 
WINED3D_SM1_OP_ADD 
WINED3D_SM1_OP_SUB 
WINED3D_SM1_OP_MAD 
WINED3D_SM1_OP_MUL 
WINED3D_SM1_OP_RCP 
WINED3D_SM1_OP_RSQ 
WINED3D_SM1_OP_DP3 
WINED3D_SM1_OP_DP4 
WINED3D_SM1_OP_MIN 
WINED3D_SM1_OP_MAX 
WINED3D_SM1_OP_SLT 
WINED3D_SM1_OP_SGE 
WINED3D_SM1_OP_EXP 
WINED3D_SM1_OP_LOG 
WINED3D_SM1_OP_LIT 
WINED3D_SM1_OP_DST 
WINED3D_SM1_OP_LRP 
WINED3D_SM1_OP_FRC 
WINED3D_SM1_OP_M4x4 
WINED3D_SM1_OP_M4x3 
WINED3D_SM1_OP_M3x4 
WINED3D_SM1_OP_M3x3 
WINED3D_SM1_OP_M3x2 
WINED3D_SM1_OP_CALL 
WINED3D_SM1_OP_CALLNZ 
WINED3D_SM1_OP_LOOP 
WINED3D_SM1_OP_RET 
WINED3D_SM1_OP_ENDLOOP 
WINED3D_SM1_OP_LABEL 
WINED3D_SM1_OP_DCL 
WINED3D_SM1_OP_POW 
WINED3D_SM1_OP_CRS 
WINED3D_SM1_OP_SGN 
WINED3D_SM1_OP_ABS 
WINED3D_SM1_OP_NRM 
WINED3D_SM1_OP_SINCOS 
WINED3D_SM1_OP_REP 
WINED3D_SM1_OP_ENDREP 
WINED3D_SM1_OP_IF 
WINED3D_SM1_OP_IFC 
WINED3D_SM1_OP_ELSE 
WINED3D_SM1_OP_ENDIF 
WINED3D_SM1_OP_BREAK 
WINED3D_SM1_OP_BREAKC 
WINED3D_SM1_OP_MOVA 
WINED3D_SM1_OP_DEFB 
WINED3D_SM1_OP_DEFI 
WINED3D_SM1_OP_TEXCOORD 
WINED3D_SM1_OP_TEXKILL 
WINED3D_SM1_OP_TEX 
WINED3D_SM1_OP_TEXBEM 
WINED3D_SM1_OP_TEXBEML 
WINED3D_SM1_OP_TEXREG2AR 
WINED3D_SM1_OP_TEXREG2GB 
WINED3D_SM1_OP_TEXM3x2PAD 
WINED3D_SM1_OP_TEXM3x2TEX 
WINED3D_SM1_OP_TEXM3x3PAD 
WINED3D_SM1_OP_TEXM3x3TEX 
WINED3D_SM1_OP_TEXM3x3DIFF 
WINED3D_SM1_OP_TEXM3x3SPEC 
WINED3D_SM1_OP_TEXM3x3VSPEC 
WINED3D_SM1_OP_EXPP 
WINED3D_SM1_OP_LOGP 
WINED3D_SM1_OP_CND 
WINED3D_SM1_OP_DEF 
WINED3D_SM1_OP_TEXREG2RGB 
WINED3D_SM1_OP_TEXDP3TEX 
WINED3D_SM1_OP_TEXM3x2DEPTH 
WINED3D_SM1_OP_TEXDP3 
WINED3D_SM1_OP_TEXM3x3 
WINED3D_SM1_OP_TEXDEPTH 
WINED3D_SM1_OP_CMP 
WINED3D_SM1_OP_BEM 
WINED3D_SM1_OP_DP2ADD 
WINED3D_SM1_OP_DSX 
WINED3D_SM1_OP_DSY 
WINED3D_SM1_OP_TEXLDD 
WINED3D_SM1_OP_SETP 
WINED3D_SM1_OP_TEXLDL 
WINED3D_SM1_OP_BREAKP 
WINED3D_SM1_OP_PHASE 
WINED3D_SM1_OP_COMMENT 
WINED3D_SM1_OP_END 

Definition at line 108 of file shader_sm1.c.

109{
110 WINED3D_SM1_OP_NOP = 0x00,
111 WINED3D_SM1_OP_MOV = 0x01,
112 WINED3D_SM1_OP_ADD = 0x02,
113 WINED3D_SM1_OP_SUB = 0x03,
114 WINED3D_SM1_OP_MAD = 0x04,
115 WINED3D_SM1_OP_MUL = 0x05,
116 WINED3D_SM1_OP_RCP = 0x06,
117 WINED3D_SM1_OP_RSQ = 0x07,
118 WINED3D_SM1_OP_DP3 = 0x08,
119 WINED3D_SM1_OP_DP4 = 0x09,
120 WINED3D_SM1_OP_MIN = 0x0a,
121 WINED3D_SM1_OP_MAX = 0x0b,
122 WINED3D_SM1_OP_SLT = 0x0c,
123 WINED3D_SM1_OP_SGE = 0x0d,
124 WINED3D_SM1_OP_EXP = 0x0e,
125 WINED3D_SM1_OP_LOG = 0x0f,
126 WINED3D_SM1_OP_LIT = 0x10,
127 WINED3D_SM1_OP_DST = 0x11,
128 WINED3D_SM1_OP_LRP = 0x12,
129 WINED3D_SM1_OP_FRC = 0x13,
130 WINED3D_SM1_OP_M4x4 = 0x14,
131 WINED3D_SM1_OP_M4x3 = 0x15,
132 WINED3D_SM1_OP_M3x4 = 0x16,
133 WINED3D_SM1_OP_M3x3 = 0x17,
134 WINED3D_SM1_OP_M3x2 = 0x18,
135 WINED3D_SM1_OP_CALL = 0x19,
137 WINED3D_SM1_OP_LOOP = 0x1b,
138 WINED3D_SM1_OP_RET = 0x1c,
141 WINED3D_SM1_OP_DCL = 0x1f,
142 WINED3D_SM1_OP_POW = 0x20,
143 WINED3D_SM1_OP_CRS = 0x21,
144 WINED3D_SM1_OP_SGN = 0x22,
145 WINED3D_SM1_OP_ABS = 0x23,
146 WINED3D_SM1_OP_NRM = 0x24,
148 WINED3D_SM1_OP_REP = 0x26,
150 WINED3D_SM1_OP_IF = 0x28,
151 WINED3D_SM1_OP_IFC = 0x29,
152 WINED3D_SM1_OP_ELSE = 0x2a,
156 WINED3D_SM1_OP_MOVA = 0x2e,
157 WINED3D_SM1_OP_DEFB = 0x2f,
158 WINED3D_SM1_OP_DEFI = 0x30,
159
162 WINED3D_SM1_OP_TEX = 0x42,
174 WINED3D_SM1_OP_EXPP = 0x4e,
175 WINED3D_SM1_OP_LOGP = 0x4f,
176 WINED3D_SM1_OP_CND = 0x50,
177 WINED3D_SM1_OP_DEF = 0x51,
184 WINED3D_SM1_OP_CMP = 0x58,
185 WINED3D_SM1_OP_BEM = 0x59,
187 WINED3D_SM1_OP_DSX = 0x5b,
188 WINED3D_SM1_OP_DSY = 0x5c,
190 WINED3D_SM1_OP_SETP = 0x5e,
193
194 WINED3D_SM1_OP_PHASE = 0xfffd,
195 WINED3D_SM1_OP_COMMENT = 0xfffe,
196 WINED3D_SM1_OP_END = 0Xffff,
197};
@ WINED3D_SM1_OP_MOV
Definition: shader_sm1.c:111
@ WINED3D_SM1_OP_SGN
Definition: shader_sm1.c:144
@ WINED3D_SM1_OP_MAD
Definition: shader_sm1.c:114
@ WINED3D_SM1_OP_SINCOS
Definition: shader_sm1.c:147
@ WINED3D_SM1_OP_MAX
Definition: shader_sm1.c:121
@ WINED3D_SM1_OP_BREAKC
Definition: shader_sm1.c:155
@ WINED3D_SM1_OP_TEXDP3TEX
Definition: shader_sm1.c:179
@ WINED3D_SM1_OP_TEXDP3
Definition: shader_sm1.c:181
@ WINED3D_SM1_OP_NOP
Definition: shader_sm1.c:110
@ WINED3D_SM1_OP_ENDLOOP
Definition: shader_sm1.c:139
@ WINED3D_SM1_OP_FRC
Definition: shader_sm1.c:129
@ WINED3D_SM1_OP_LIT
Definition: shader_sm1.c:126
@ WINED3D_SM1_OP_M3x2
Definition: shader_sm1.c:134
@ WINED3D_SM1_OP_SETP
Definition: shader_sm1.c:190
@ WINED3D_SM1_OP_TEXM3x2PAD
Definition: shader_sm1.c:167
@ WINED3D_SM1_OP_TEXDEPTH
Definition: shader_sm1.c:183
@ WINED3D_SM1_OP_TEXM3x3TEX
Definition: shader_sm1.c:170
@ WINED3D_SM1_OP_TEX
Definition: shader_sm1.c:162
@ WINED3D_SM1_OP_DSX
Definition: shader_sm1.c:187
@ WINED3D_SM1_OP_IFC
Definition: shader_sm1.c:151
@ WINED3D_SM1_OP_M4x4
Definition: shader_sm1.c:130
@ WINED3D_SM1_OP_TEXM3x3
Definition: shader_sm1.c:182
@ WINED3D_SM1_OP_MUL
Definition: shader_sm1.c:115
@ WINED3D_SM1_OP_TEXM3x3VSPEC
Definition: shader_sm1.c:173
@ WINED3D_SM1_OP_SLT
Definition: shader_sm1.c:122
@ WINED3D_SM1_OP_MOVA
Definition: shader_sm1.c:156
@ WINED3D_SM1_OP_TEXM3x3SPEC
Definition: shader_sm1.c:172
@ WINED3D_SM1_OP_SGE
Definition: shader_sm1.c:123
@ WINED3D_SM1_OP_PHASE
Definition: shader_sm1.c:194
@ WINED3D_SM1_OP_BREAK
Definition: shader_sm1.c:154
@ WINED3D_SM1_OP_RCP
Definition: shader_sm1.c:116
@ WINED3D_SM1_OP_DEFB
Definition: shader_sm1.c:157
@ WINED3D_SM1_OP_LOGP
Definition: shader_sm1.c:175
@ WINED3D_SM1_OP_TEXCOORD
Definition: shader_sm1.c:160
@ WINED3D_SM1_OP_BEM
Definition: shader_sm1.c:185
@ WINED3D_SM1_OP_LABEL
Definition: shader_sm1.c:140
@ WINED3D_SM1_OP_TEXBEML
Definition: shader_sm1.c:164
@ WINED3D_SM1_OP_END
Definition: shader_sm1.c:196
@ WINED3D_SM1_OP_M3x3
Definition: shader_sm1.c:133
@ WINED3D_SM1_OP_ENDIF
Definition: shader_sm1.c:153
@ WINED3D_SM1_OP_LRP
Definition: shader_sm1.c:128
@ WINED3D_SM1_OP_REP
Definition: shader_sm1.c:148
@ WINED3D_SM1_OP_LOOP
Definition: shader_sm1.c:137
@ WINED3D_SM1_OP_DCL
Definition: shader_sm1.c:141
@ WINED3D_SM1_OP_CND
Definition: shader_sm1.c:176
@ WINED3D_SM1_OP_RET
Definition: shader_sm1.c:138
@ WINED3D_SM1_OP_CMP
Definition: shader_sm1.c:184
@ WINED3D_SM1_OP_LOG
Definition: shader_sm1.c:125
@ WINED3D_SM1_OP_POW
Definition: shader_sm1.c:142
@ WINED3D_SM1_OP_TEXM3x3DIFF
Definition: shader_sm1.c:171
@ WINED3D_SM1_OP_M4x3
Definition: shader_sm1.c:131
@ WINED3D_SM1_OP_CALL
Definition: shader_sm1.c:135
@ WINED3D_SM1_OP_DP4
Definition: shader_sm1.c:119
@ WINED3D_SM1_OP_TEXREG2RGB
Definition: shader_sm1.c:178
@ WINED3D_SM1_OP_EXPP
Definition: shader_sm1.c:174
@ WINED3D_SM1_OP_DSY
Definition: shader_sm1.c:188
@ WINED3D_SM1_OP_NRM
Definition: shader_sm1.c:146
@ WINED3D_SM1_OP_SUB
Definition: shader_sm1.c:113
@ WINED3D_SM1_OP_TEXM3x2TEX
Definition: shader_sm1.c:168
@ WINED3D_SM1_OP_DEFI
Definition: shader_sm1.c:158
@ WINED3D_SM1_OP_IF
Definition: shader_sm1.c:150
@ WINED3D_SM1_OP_DP3
Definition: shader_sm1.c:118
@ WINED3D_SM1_OP_RSQ
Definition: shader_sm1.c:117
@ WINED3D_SM1_OP_DP2ADD
Definition: shader_sm1.c:186
@ WINED3D_SM1_OP_EXP
Definition: shader_sm1.c:124
@ WINED3D_SM1_OP_ABS
Definition: shader_sm1.c:145
@ WINED3D_SM1_OP_ADD
Definition: shader_sm1.c:112
@ WINED3D_SM1_OP_TEXLDD
Definition: shader_sm1.c:189
@ WINED3D_SM1_OP_CRS
Definition: shader_sm1.c:143
@ WINED3D_SM1_OP_ENDREP
Definition: shader_sm1.c:149
@ WINED3D_SM1_OP_DST
Definition: shader_sm1.c:127
@ WINED3D_SM1_OP_MIN
Definition: shader_sm1.c:120
@ WINED3D_SM1_OP_ELSE
Definition: shader_sm1.c:152
@ WINED3D_SM1_OP_COMMENT
Definition: shader_sm1.c:195
@ WINED3D_SM1_OP_TEXBEM
Definition: shader_sm1.c:163
@ WINED3D_SM1_OP_TEXM3x2DEPTH
Definition: shader_sm1.c:180
@ WINED3D_SM1_OP_BREAKP
Definition: shader_sm1.c:192
@ WINED3D_SM1_OP_TEXLDL
Definition: shader_sm1.c:191
@ WINED3D_SM1_OP_CALLNZ
Definition: shader_sm1.c:136
@ WINED3D_SM1_OP_DEF
Definition: shader_sm1.c:177
@ WINED3D_SM1_OP_TEXREG2GB
Definition: shader_sm1.c:166
@ WINED3D_SM1_OP_TEXKILL
Definition: shader_sm1.c:161
@ WINED3D_SM1_OP_TEXM3x3PAD
Definition: shader_sm1.c:169
@ WINED3D_SM1_OP_TEXREG2AR
Definition: shader_sm1.c:165
@ WINED3D_SM1_OP_M3x4
Definition: shader_sm1.c:132

◆ wined3d_sm1_resource_type

Enumerator
WINED3D_SM1_RESOURCE_UNKNOWN 
WINED3D_SM1_RESOURCE_TEXTURE_1D 
WINED3D_SM1_RESOURCE_TEXTURE_2D 
WINED3D_SM1_RESOURCE_TEXTURE_CUBE 
WINED3D_SM1_RESOURCE_TEXTURE_3D 

Definition at line 99 of file shader_sm1.c.

100{
106};
@ WINED3D_SM1_RESOURCE_TEXTURE_1D
Definition: shader_sm1.c:102
@ WINED3D_SM1_RESOURCE_UNKNOWN
Definition: shader_sm1.c:101
@ WINED3D_SM1_RESOURCE_TEXTURE_CUBE
Definition: shader_sm1.c:104
@ WINED3D_SM1_RESOURCE_TEXTURE_3D
Definition: shader_sm1.c:105
@ WINED3D_SM1_RESOURCE_TEXTURE_2D
Definition: shader_sm1.c:103

Function Documentation

◆ shader_get_opcode()

static const struct wined3d_sm1_opcode_info * shader_get_opcode ( const struct wined3d_sm1_data *  priv,
unsigned int  token 
)
static

Definition at line 429 of file shader_sm1.c.

430{
431 unsigned int shader_version = WINED3D_SHADER_VERSION(priv->shader_version.major, priv->shader_version.minor);
433 unsigned int i = 0;
434
436 {
438 && shader_version >= opcode_table[i].min_version
439 && (!opcode_table[i].max_version || shader_version <= opcode_table[i].max_version))
440 {
441 return &opcode_table[i];
442 }
443 ++i;
444 }
445
446 FIXME("Unsupported opcode %#x, token 0x%08x, shader version %#x.\n",
447 token & WINED3D_SM1_OPCODE_MASK, token, shader_version);
448
449 return NULL;
450}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define NULL
Definition: types.h:112
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
Definition: glfuncs.h:210
unsigned min_version
Definition: lex.c:39
#define WINED3D_SM1_OPCODE_MASK
Definition: shader_sm1.c:40
static const struct wined3d_sm4_opcode_info opcode_table[]
Definition: shader_sm4.c:912
struct wined3d_shader_version shader_version
Definition: shader_sm1.c:211
const struct wined3d_sm1_opcode_info * opcode_table
Definition: shader_sm1.c:212
enum wined3d_sm1_opcode opcode
Definition: shader_sm1.c:201
enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx
Definition: shader_sm1.c:204
@ WINED3DSIH_TABLE_SIZE
#define WINED3D_SHADER_VERSION(major, minor)

Referenced by shader_sm1_read_instruction().

◆ shader_get_param()

static unsigned int shader_get_param ( const struct wined3d_sm1_data *  priv,
const DWORD *  ptr,
unsigned int *  token,
unsigned int *  addr_token 
)
static

Definition at line 399 of file shader_sm1.c.

401{
402 unsigned int count = 1;
403
404 *token = *ptr;
405
406 /* PS >= 3.0 have relative addressing (with token)
407 * VS >= 2.0 have relative addressing (with token)
408 * VS >= 1.0 < 2.0 have relative addressing (without token)
409 * The version check below should work in general */
411 {
412 if (priv->shader_version.major < 2)
413 {
414 *addr_token = (1u << 31)
418 }
419 else
420 {
421 *addr_token = *(ptr + 1);
422 ++count;
423 }
424 }
425
426 return count;
427}
GLuint GLuint GLsizei count
Definition: gl.h:1545
static PVOID ptr
Definition: dispmode.c:27
#define WINED3D_SM1_REGISTER_TYPE_SHIFT2
Definition: shader_sm1.c:61
#define WINED3D_SM1_REGISTER_TYPE_SHIFT
Definition: shader_sm1.c:59
#define WINED3D_SM1_REGISTER_TYPE_MASK2
Definition: shader_sm1.c:62
#define WINED3D_SM1_REGISTER_TYPE_MASK
Definition: shader_sm1.c:60
#define WINED3D_SM1_SWIZZLE_SHIFT
Definition: shader_sm1.c:81
@ WINED3DSPR_ADDR
#define WINED3DSP_NOSWIZZLE

Referenced by shader_skip_unrecognized(), shader_sm1_read_dst_param(), and shader_sm1_read_src_param().

◆ shader_parse_dst_param()

static void shader_parse_dst_param ( DWORD  param,
const struct wined3d_shader_src_param *  rel_addr,
struct wined3d_shader_dst_param *  dst 
)
static

Definition at line 477 of file shader_sm1.c.

479{
482 dst->reg.data_type = WINED3D_DATA_FLOAT;
483 dst->reg.idx[0].offset = param & WINED3D_SM1_REGISTER_NUMBER_MASK;
484 dst->reg.idx[0].rel_addr = rel_addr;
485 dst->reg.idx[1].offset = ~0U;
486 dst->reg.idx[1].rel_addr = NULL;
490}
#define U(x)
Definition: wordpad.c:45
GLenum GLenum dst
Definition: glext.h:6340
GLfloat param
Definition: glext.h:5796
#define WINED3D_SM1_DST_MODIFIER_MASK
Definition: shader_sm1.c:70
#define WINED3D_SM1_WRITEMASK_MASK
Definition: shader_sm1.c:78
#define WINED3D_SM1_DST_MODIFIER_SHIFT
Definition: shader_sm1.c:69
#define WINED3D_SM1_WRITEMASK_SHIFT
Definition: shader_sm1.c:77
#define WINED3D_SM1_DSTSHIFT_MASK
Definition: shader_sm1.c:74
#define WINED3D_SM1_REGISTER_NUMBER_MASK
Definition: shader_sm1.c:56
#define WINED3D_SM1_DSTSHIFT_SHIFT
Definition: shader_sm1.c:73
struct wined3d_shader_register reg
@ WINED3D_DATA_FLOAT

Referenced by shader_skip_unrecognized(), shader_sm1_read_dst_param(), and shader_sm1_read_semantic().

◆ shader_parse_src_param()

static void shader_parse_src_param ( DWORD  param,
const struct wined3d_shader_src_param *  rel_addr,
struct wined3d_shader_src_param *  src 
)
static

Definition at line 463 of file shader_sm1.c.

465{
468 src->reg.data_type = WINED3D_DATA_FLOAT;
469 src->reg.idx[0].offset = param & WINED3D_SM1_REGISTER_NUMBER_MASK;
470 src->reg.idx[0].rel_addr = rel_addr;
471 src->reg.idx[1].offset = ~0U;
472 src->reg.idx[1].rel_addr = NULL;
475}
GLenum src
Definition: glext.h:6340
#define WINED3D_SM1_SRC_MODIFIER_SHIFT
Definition: shader_sm1.c:85
#define WINED3D_SM1_SRC_MODIFIER_MASK
Definition: shader_sm1.c:86
#define WINED3D_SM1_SWIZZLE_MASK
Definition: shader_sm1.c:82

Referenced by shader_skip_unrecognized(), shader_sm1_read_dst_param(), and shader_sm1_read_src_param().

◆ shader_skip_opcode()

static unsigned int shader_skip_opcode ( const struct wined3d_sm1_data *  priv,
const struct wined3d_sm1_opcode_info *  opcode_info,
DWORD  opcode_token 
)
static

Definition at line 453 of file shader_sm1.c.

455{
456 unsigned int length;
457 /* Shaders >= 2.0 may contain address tokens, but fortunately they
458 * have a useful length mask - use it here. Shaders 1.0 contain no such tokens */
460 return (priv->shader_version.major >= 2) ? length : opcode_info->param_count;
461}
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
#define WINED3D_SM1_INSTRUCTION_LENGTH_SHIFT
Definition: shader_sm1.c:45
#define WINED3D_SM1_INSTRUCTION_LENGTH_MASK
Definition: shader_sm1.c:46
unsigned int param_count
Definition: shader_sm1.c:203

Referenced by shader_sm1_read_instruction().

◆ shader_skip_unrecognized()

static unsigned int shader_skip_unrecognized ( const struct wined3d_sm1_data *  priv,
const DWORD *  ptr 
)
static

Definition at line 498 of file shader_sm1.c.

499{
500 unsigned int tokens_read = 0, i = 0;
501
502 /* TODO: Think of a good name for 0x80000000 and replace it with a constant */
503 while (*ptr & 0x80000000)
504 {
505 unsigned int token, addr_token = 0;
506 struct wined3d_shader_src_param rel_addr;
507
508 tokens_read += shader_get_param(priv, ptr, &token, &addr_token);
509 ptr += tokens_read;
510
511 FIXME("Unrecognized opcode param: token=0x%08x addr_token=0x%08x.\n", token, addr_token);
512
514 shader_parse_src_param(addr_token, NULL, &rel_addr);
515
516 if (!i)
517 {
519
521 }
522 else
523 {
525
527 }
528 ++i;
529 }
530 return tokens_read;
531}
static void shader_parse_src_param(DWORD param, const struct wined3d_shader_src_param *rel_addr, struct wined3d_shader_src_param *src)
Definition: shader_sm1.c:463
static unsigned int shader_get_param(const struct wined3d_sm1_data *priv, const DWORD *ptr, unsigned int *token, unsigned int *addr_token)
Definition: shader_sm1.c:399
static void shader_parse_dst_param(DWORD param, const struct wined3d_shader_src_param *rel_addr, struct wined3d_shader_dst_param *dst)
Definition: shader_sm1.c:477

Referenced by shader_sm1_read_instruction().

◆ shader_sm1_free()

static void shader_sm1_free ( void *  data)
static

Definition at line 580 of file shader_sm1.c.

581{
582 free(data);
583}
#define free
Definition: debug_ros.c:5
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950

◆ shader_sm1_init()

static void * shader_sm1_init ( const DWORD *  byte_code,
size_t  byte_code_size,
const struct wined3d_shader_signature *  output_signature 
)
static

Definition at line 533 of file shader_sm1.c.

535{
536 struct wined3d_sm1_data *priv;
538
539 TRACE("Version: 0x%08lx.\n", *byte_code);
540
541 major = WINED3D_SM1_VERSION_MAJOR(*byte_code);
542 minor = WINED3D_SM1_VERSION_MINOR(*byte_code);
544 {
545 WARN("Invalid shader version %u.%u (%#lx).\n", major, minor, *byte_code);
546 return NULL;
547 }
548
549 if (!(priv = malloc(sizeof(*priv))))
550 return NULL;
551
552 if (output_signature->element_count)
553 FIXME("SM 1-3 shader shouldn't have output signatures.\n");
554
555 switch (*byte_code >> 16)
556 {
557 case WINED3D_SM1_VS:
560 break;
561
562 case WINED3D_SM1_PS:
565 break;
566
567 default:
568 FIXME("Unrecognized shader type %#lx.\n", *byte_code >> 16);
569 free(priv);
570 return NULL;
571 }
572 priv->shader_version.major = WINED3D_SM1_VERSION_MAJOR(*byte_code);
573 priv->shader_version.minor = WINED3D_SM1_VERSION_MINOR(*byte_code);
574
575 priv->start = &byte_code[1];
576
577 return priv;
578}
#define WARN(fmt,...)
Definition: precomp.h:61
#define malloc
Definition: debug_ros.c:4
static const struct wined3d_sm1_opcode_info ps_opcode_table[]
Definition: shader_sm1.c:292
#define WINED3D_SM1_VERSION_MINOR(version)
Definition: shader_sm1.c:91
static const struct wined3d_sm1_opcode_info vs_opcode_table[]
Definition: shader_sm1.c:224
#define WINED3D_SM1_VERSION_MAJOR(version)
Definition: shader_sm1.c:90
#define minor(rdev)
Definition: propsheet.cpp:929
#define major(rdev)
Definition: propsheet.cpp:928
#define TRACE(s)
Definition: solgame.cpp:4
const DWORD * start
Definition: shader_sm1.c:213
@ WINED3D_SHADER_TYPE_PIXEL
Definition: wined3d.h:841
@ WINED3D_SHADER_TYPE_VERTEX
Definition: wined3d.h:842
#define WINED3D_SM1_VS
#define WINED3D_SM1_PS
unsigned char BYTE
Definition: xxhash.c:193

◆ shader_sm1_is_end()

static BOOL shader_sm1_is_end ( void *  data,
const DWORD **  ptr 
)
static

Definition at line 791 of file shader_sm1.c.

792{
794
795 if (**ptr == WINED3D_SM1_END)
796 {
797 ++(*ptr);
798 return TRUE;
799 }
800
801 return FALSE;
802}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static void shader_sm1_read_comment(const DWORD **ptr)
Definition: shader_sm1.c:667
#define WINED3D_SM1_END
Definition: shader_sm1.c:88

◆ shader_sm1_read_comment()

static void shader_sm1_read_comment ( const DWORD **  ptr)
static

Definition at line 667 of file shader_sm1.c.

668{
669 DWORD token = **ptr;
670 const char *comment;
671 UINT size;
672
674 {
676 comment = (const char *)++(*ptr);
677 *ptr += size;
678
679 if (size > 1 && *(const DWORD *)comment == WINEMAKEFOURCC('T', 'E', 'X', 'T'))
680 {
681 const char *end = comment + size * sizeof(token);
682 const char *p = comment + sizeof(token);
683 const char *line = p;
684
685 TRACE("// TEXT\n");
686 while (p != end)
687 {
688 if (*p == '\n')
689 {
690 UINT len = p - line;
691 if (len && *(p - 1) == '\r') --len;
692 TRACE("// %s\n", debugstr_an(line, len));
693 line = ++p;
694 }
695 else ++p;
696 }
697 if (line != p)
698 TRACE("// %s\n", debugstr_an(line, p - line));
699 }
700 else if (size)
701 TRACE("// %s\n", debugstr_an(comment, size * sizeof(token)));
702 else
703 break;
704
705 token = **ptr;
706 }
707}
static __inline const char * debugstr_an(const char *s, int n)
Definition: compat.h:55
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint end
Definition: gl.h:1545
GLsizeiptr size
Definition: glext.h:5919
GLfloat GLfloat p
Definition: glext.h:8902
GLenum GLsizei len
Definition: glext.h:6722
unsigned int UINT
Definition: sysinfo.c:13
#define comment(fmt, arg1)
Definition: rebar.c:847
#define WINED3D_SM1_COMMENT_SIZE_MASK
Definition: shader_sm1.c:51
#define WINED3D_SM1_COMMENT_SIZE_SHIFT
Definition: shader_sm1.c:50
Definition: parser.c:49
#define WINEMAKEFOURCC(ch0, ch1, ch2, ch3)
Definition: wined3d.h:121

Referenced by shader_sm1_is_end(), and shader_sm1_read_instruction().

◆ shader_sm1_read_dst_param()

static void shader_sm1_read_dst_param ( struct wined3d_sm1_data *  priv,
const DWORD **  ptr,
struct wined3d_shader_dst_param *  dst_param,
struct wined3d_shader_src_param *  dst_rel_addr 
)
static

Definition at line 610 of file shader_sm1.c.

612{
613 unsigned int token, addr_token;
614
615 *ptr += shader_get_param(priv, *ptr, &token, &addr_token);
617 {
618 shader_parse_src_param(addr_token, NULL, dst_rel_addr);
619 shader_parse_dst_param(token, dst_rel_addr, dst_param);
620 }
621 else
622 {
623 shader_parse_dst_param(token, NULL, dst_param);
624 }
625}

Referenced by shader_sm1_read_instruction().

◆ shader_sm1_read_header()

static void shader_sm1_read_header ( void *  data,
const DWORD **  ptr,
struct wined3d_shader_version *  shader_version 
)
static

Definition at line 585 of file shader_sm1.c.

586{
587 struct wined3d_sm1_data *priv = data;
588
589 *ptr = priv->start;
591}

◆ shader_sm1_read_immconst()

static void shader_sm1_read_immconst ( const DWORD **  ptr,
struct wined3d_shader_src_param *  src_param,
enum wined3d_immconst_type  type,
enum wined3d_data_type  data_type 
)
static

Definition at line 649 of file shader_sm1.c.

651{
652 unsigned int count = type == WINED3D_IMMCONST_VEC4 ? 4 : 1;
653 src_param->reg.type = WINED3DSPR_IMMCONST;
654 src_param->reg.data_type = data_type;
655 src_param->reg.idx[0].offset = ~0U;
656 src_param->reg.idx[0].rel_addr = NULL;
657 src_param->reg.idx[1].offset = ~0U;
658 src_param->reg.idx[1].rel_addr = NULL;
659 src_param->reg.immconst_type = type;
660 memcpy(src_param->reg.u.immconst_data, *ptr, count * sizeof(DWORD));
661 src_param->swizzle = WINED3DSP_NOSWIZZLE;
662 src_param->modifiers = 0;
663
664 *ptr += count;
665}
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
enum wined3d_data_type data_type
Definition: glsl_shader.c:71
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
enum wined3d_shader_src_modifier modifiers
@ WINED3DSPR_IMMCONST
@ WINED3D_IMMCONST_VEC4

Referenced by shader_sm1_read_instruction().

◆ shader_sm1_read_instruction()

static void shader_sm1_read_instruction ( void *  data,
const DWORD **  ptr,
struct wined3d_shader_instruction *  ins 
)
static

Definition at line 722 of file shader_sm1.c.

723{
724 const struct wined3d_sm1_opcode_info *opcode_info;
725 struct wined3d_sm1_data *priv = data;
726 unsigned int opcode_token;
727 unsigned int i;
728 const DWORD *p;
729
731
732 opcode_token = *(*ptr)++;
733 if (!(opcode_info = shader_get_opcode(priv, opcode_token)))
734 {
735 FIXME("Unrecognized opcode: token=0x%08x.\n", opcode_token);
737 *ptr += shader_skip_unrecognized(priv, *ptr);
738 return;
739 }
740
741 ins->handler_idx = opcode_info->handler_idx;
743 ins->coissue = opcode_token & WINED3D_SM1_COISSUE;
744 ins->predicate = opcode_token & WINED3D_SM1_INSTRUCTION_PREDICATED ? &priv->pred_param : NULL;
745 ins->dst_count = opcode_info->dst_count ? 1 : 0;
746 ins->dst = &priv->dst_param;
747 ins->src_count = opcode_info->param_count - opcode_info->dst_count;
748 ins->src = priv->src_param;
749 memset(&ins->texel_offset, 0, sizeof(ins->texel_offset));
750
751 p = *ptr;
752 *ptr += shader_skip_opcode(priv, opcode_info, opcode_token);
753
754 if (ins->handler_idx == WINED3DSIH_DCL)
755 {
757 }
758 else if (ins->handler_idx == WINED3DSIH_DEF)
759 {
760 shader_sm1_read_dst_param(priv, &p, &priv->dst_param, &priv->dst_rel_addr);
762 }
763 else if (ins->handler_idx == WINED3DSIH_DEFB)
764 {
765 shader_sm1_read_dst_param(priv, &p, &priv->dst_param, &priv->dst_rel_addr);
767 }
768 else if (ins->handler_idx == WINED3DSIH_DEFI)
769 {
770 shader_sm1_read_dst_param(priv, &p, &priv->dst_param, &priv->dst_rel_addr);
772 }
773 else
774 {
775 /* Destination token */
776 if (ins->dst_count)
777 shader_sm1_read_dst_param(priv, &p, &priv->dst_param, &priv->dst_rel_addr);
778
779 /* Predication token */
780 if (ins->predicate)
781 shader_sm1_read_src_param(priv, &p, &priv->pred_param, &priv->pred_rel_addr);
782
783 /* Other source tokens */
784 for (i = 0; i < ins->src_count; ++i)
785 shader_sm1_read_src_param(priv, &p, &priv->src_param[i], &priv->src_rel_addr[i]);
786 }
787
789}
#define memset(x, y, z)
Definition: compat.h:39
#define WINED3D_SM1_INSTRUCTION_FLAGS_MASK
Definition: shader_sm1.c:43
static void shader_sm1_read_immconst(const DWORD **ptr, struct wined3d_shader_src_param *src_param, enum wined3d_immconst_type type, enum wined3d_data_type data_type)
Definition: shader_sm1.c:649
#define WINED3D_SM1_INSTRUCTION_FLAGS_SHIFT
Definition: shader_sm1.c:42
static void shader_sm1_read_dst_param(struct wined3d_sm1_data *priv, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param, struct wined3d_shader_src_param *dst_rel_addr)
Definition: shader_sm1.c:610
static unsigned int shader_skip_unrecognized(const struct wined3d_sm1_data *priv, const DWORD *ptr)
Definition: shader_sm1.c:498
static void shader_sm1_validate_instruction(struct wined3d_shader_instruction *ins)
Definition: shader_sm1.c:709
static unsigned int shader_skip_opcode(const struct wined3d_sm1_data *priv, const struct wined3d_sm1_opcode_info *opcode_info, DWORD opcode_token)
Definition: shader_sm1.c:453
static const struct wined3d_sm1_opcode_info * shader_get_opcode(const struct wined3d_sm1_data *priv, unsigned int token)
Definition: shader_sm1.c:429
#define WINED3D_SM1_COISSUE
Definition: shader_sm1.c:48
static void shader_sm1_read_src_param(struct wined3d_sm1_data *priv, const DWORD **ptr, struct wined3d_shader_src_param *src_param, struct wined3d_shader_src_param *src_rel_addr)
Definition: shader_sm1.c:593
#define WINED3D_SM1_INSTRUCTION_PREDICATED
Definition: shader_sm1.c:53
static void shader_sm1_read_semantic(const DWORD **ptr, struct wined3d_shader_semantic *semantic)
Definition: shader_sm1.c:627
const struct wined3d_shader_src_param * src
union wined3d_shader_instruction::@348 declaration
struct wined3d_shader_semantic semantic
const struct wined3d_shader_dst_param * dst
const struct wined3d_shader_src_param * predicate
enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx
struct wined3d_shader_texel_offset texel_offset
struct wined3d_shader_src_param pred_rel_addr
Definition: shader_sm1.c:216
struct wined3d_shader_dst_param dst_param
Definition: shader_sm1.c:220
struct wined3d_shader_src_param src_rel_addr[4]
Definition: shader_sm1.c:215
struct wined3d_shader_src_param dst_rel_addr
Definition: shader_sm1.c:217
struct wined3d_shader_src_param src_param[4]
Definition: shader_sm1.c:218
struct wined3d_shader_src_param pred_param
Definition: shader_sm1.c:219
unsigned int dst_count
Definition: shader_sm1.c:202
@ WINED3D_DATA_UINT
@ WINED3D_DATA_INT
@ WINED3DSIH_DEFI
@ WINED3DSIH_DEFB
@ WINED3DSIH_DCL
@ WINED3DSIH_DEF
@ WINED3D_IMMCONST_SCALAR

◆ shader_sm1_read_semantic()

static void shader_sm1_read_semantic ( const DWORD **  ptr,
struct wined3d_shader_semantic *  semantic 
)
static

Definition at line 627 of file shader_sm1.c.

628{
629 enum wined3d_sm1_resource_type resource_type;
630 DWORD usage_token = *(*ptr)++;
631 DWORD dst_token = *(*ptr)++;
632
633 semantic->usage = (usage_token & WINED3D_SM1_DCL_USAGE_MASK) >> WINED3D_SM1_DCL_USAGE_SHIFT;
635 resource_type = (usage_token & WINED3D_SM1_RESOURCE_TYPE_MASK) >> WINED3D_SM1_RESOURCE_TYPE_SHIFT;
636 if (resource_type >= ARRAY_SIZE(resource_type_table))
637 {
638 FIXME("Unhandled resource type %#x.\n", resource_type);
640 }
641 else
642 {
643 semantic->resource_type = resource_type_table[resource_type];
644 }
646 shader_parse_dst_param(dst_token, NULL, &semantic->reg);
647}
#define ARRAY_SIZE(A)
Definition: main.h:20
#define WINED3D_SM1_RESOURCE_TYPE_MASK
Definition: shader_sm1.c:37
#define WINED3D_SM1_DCL_USAGE_SHIFT
Definition: shader_sm1.c:30
#define WINED3D_SM1_RESOURCE_TYPE_SHIFT
Definition: shader_sm1.c:36
wined3d_sm1_resource_type
Definition: shader_sm1.c:100
#define WINED3D_SM1_DCL_USAGE_MASK
Definition: shader_sm1.c:31
#define WINED3D_SM1_DCL_USAGE_INDEX_SHIFT
Definition: shader_sm1.c:32
#define WINED3D_SM1_DCL_USAGE_INDEX_MASK
Definition: shader_sm1.c:33
static enum wined3d_shader_resource_type resource_type_table[]
Definition: shader_sm1.c:387
struct wined3d_shader_dst_param reg
enum wined3d_decl_usage usage
enum wined3d_data_type resource_data_type
enum wined3d_shader_resource_type resource_type
@ WINED3D_SHADER_RESOURCE_NONE

Referenced by shader_sm1_read_instruction().

◆ shader_sm1_read_src_param()

static void shader_sm1_read_src_param ( struct wined3d_sm1_data *  priv,
const DWORD **  ptr,
struct wined3d_shader_src_param *  src_param,
struct wined3d_shader_src_param *  src_rel_addr 
)
static

Definition at line 593 of file shader_sm1.c.

595{
596 unsigned int token, addr_token;
597
598 *ptr += shader_get_param(priv, *ptr, &token, &addr_token);
600 {
601 shader_parse_src_param(addr_token, NULL, src_rel_addr);
602 shader_parse_src_param(token, src_rel_addr, src_param);
603 }
604 else
605 {
606 shader_parse_src_param(token, NULL, src_param);
607 }
608}

Referenced by shader_sm1_read_instruction().

◆ shader_sm1_validate_instruction()

static void shader_sm1_validate_instruction ( struct wined3d_shader_instruction *  ins)
static

Definition at line 709 of file shader_sm1.c.

710{
712 {
713 if (ins->flags)
714 {
715 FIXME("Ignoring unexpected instruction flags %#x for %s.\n",
717 ins->flags = 0;
718 }
719 }
720}
const char * debug_d3dshaderinstructionhandler(enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx)
Definition: shader.c:301
@ WINED3DSIH_IF
@ WINED3DSIH_BREAKP

Referenced by shader_sm1_read_instruction().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( d3d_shader  )

Variable Documentation

◆ ps_opcode_table

const struct wined3d_sm1_opcode_info ps_opcode_table[]
static

Definition at line 292 of file shader_sm1.c.

Referenced by shader_sm1_init().

◆ resource_type_table

◆ sm1_shader_frontend

const struct wined3d_shader_frontend sm1_shader_frontend
Initial value:
=
{
}
static void shader_sm1_free(void *data)
Definition: shader_sm1.c:580
static void * shader_sm1_init(const DWORD *byte_code, size_t byte_code_size, const struct wined3d_shader_signature *output_signature)
Definition: shader_sm1.c:533
static BOOL shader_sm1_is_end(void *data, const DWORD **ptr)
Definition: shader_sm1.c:791
static void shader_sm1_read_instruction(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins)
Definition: shader_sm1.c:722
static void shader_sm1_read_header(void *data, const DWORD **ptr, struct wined3d_shader_version *shader_version)
Definition: shader_sm1.c:585

Definition at line 804 of file shader_sm1.c.

Referenced by shader_select_frontend().

◆ vs_opcode_table

const struct wined3d_sm1_opcode_info vs_opcode_table[]
static

Definition at line 224 of file shader_sm1.c.

Referenced by shader_sm1_init().