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

Go to the source code of this file.

Classes

struct  wined3d_shader_src_param_entry
 
struct  wined3d_sm4_data
 
struct  wined3d_sm4_opcode_info
 
struct  aon9_header
 

Macros

#define LIBVKD3D_SHADER_SOURCE
 
#define WINED3D_SM4_INSTRUCTION_MODIFIER   (0x1u << 31)
 
#define WINED3D_SM4_MODIFIER_MASK   0x3fu
 
#define WINED3D_SM5_MODIFIER_DATA_TYPE_SHIFT   6
 
#define WINED3D_SM5_MODIFIER_DATA_TYPE_MASK   (0xffffu << WINED3D_SM5_MODIFIER_DATA_TYPE_SHIFT)
 
#define WINED3D_SM5_MODIFIER_RESOURCE_TYPE_SHIFT   6
 
#define WINED3D_SM5_MODIFIER_RESOURCE_TYPE_MASK   (0xfu << WINED3D_SM5_MODIFIER_RESOURCE_TYPE_SHIFT)
 
#define WINED3D_SM4_AOFFIMMI_U_SHIFT   9
 
#define WINED3D_SM4_AOFFIMMI_U_MASK   (0xfu << WINED3D_SM4_AOFFIMMI_U_SHIFT)
 
#define WINED3D_SM4_AOFFIMMI_V_SHIFT   13
 
#define WINED3D_SM4_AOFFIMMI_V_MASK   (0xfu << WINED3D_SM4_AOFFIMMI_V_SHIFT)
 
#define WINED3D_SM4_AOFFIMMI_W_SHIFT   17
 
#define WINED3D_SM4_AOFFIMMI_W_MASK   (0xfu << WINED3D_SM4_AOFFIMMI_W_SHIFT)
 
#define WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT   24
 
#define WINED3D_SM4_INSTRUCTION_LENGTH_MASK   (0x1fu << WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT)
 
#define WINED3D_SM4_INSTRUCTION_FLAGS_SHIFT   11
 
#define WINED3D_SM4_INSTRUCTION_FLAGS_MASK   (0x7u << WINED3D_SM4_INSTRUCTION_FLAGS_SHIFT)
 
#define WINED3D_SM4_RESOURCE_TYPE_SHIFT   11
 
#define WINED3D_SM4_RESOURCE_TYPE_MASK   (0xfu << WINED3D_SM4_RESOURCE_TYPE_SHIFT)
 
#define WINED3D_SM4_RESOURCE_SAMPLE_COUNT_SHIFT   16
 
#define WINED3D_SM4_RESOURCE_SAMPLE_COUNT_MASK   (0xfu << WINED3D_SM4_RESOURCE_SAMPLE_COUNT_SHIFT)
 
#define WINED3D_SM4_PRIMITIVE_TYPE_SHIFT   11
 
#define WINED3D_SM4_PRIMITIVE_TYPE_MASK   (0x3fu << WINED3D_SM4_PRIMITIVE_TYPE_SHIFT)
 
#define WINED3D_SM4_INDEX_TYPE_SHIFT   11
 
#define WINED3D_SM4_INDEX_TYPE_MASK   (0x1u << WINED3D_SM4_INDEX_TYPE_SHIFT)
 
#define WINED3D_SM4_SAMPLER_MODE_SHIFT   11
 
#define WINED3D_SM4_SAMPLER_MODE_MASK   (0xfu << WINED3D_SM4_SAMPLER_MODE_SHIFT)
 
#define WINED3D_SM4_SHADER_DATA_TYPE_SHIFT   11
 
#define WINED3D_SM4_SHADER_DATA_TYPE_MASK   (0xfu << WINED3D_SM4_SHADER_DATA_TYPE_SHIFT)
 
#define WINED3D_SM4_INTERPOLATION_MODE_SHIFT   11
 
#define WINED3D_SM4_INTERPOLATION_MODE_MASK   (0xfu << WINED3D_SM4_INTERPOLATION_MODE_SHIFT)
 
#define WINED3D_SM4_GLOBAL_FLAGS_SHIFT   11
 
#define WINED3D_SM4_GLOBAL_FLAGS_MASK   (0xffu << WINED3D_SM4_GLOBAL_FLAGS_SHIFT)
 
#define WINED3D_SM5_PRECISE_SHIFT   19
 
#define WINED3D_SM5_PRECISE_MASK   (0xfu << WINED3D_SM5_PRECISE_SHIFT)
 
#define WINED3D_SM5_CONTROL_POINT_COUNT_SHIFT   11
 
#define WINED3D_SM5_CONTROL_POINT_COUNT_MASK   (0xffu << WINED3D_SM5_CONTROL_POINT_COUNT_SHIFT)
 
#define WINED3D_SM5_FP_ARRAY_SIZE_SHIFT   16
 
#define WINED3D_SM5_FP_TABLE_COUNT_MASK   0xffffu
 
#define WINED3D_SM5_UAV_FLAGS_SHIFT   15
 
#define WINED3D_SM5_UAV_FLAGS_MASK   (0x1ffu << WINED3D_SM5_UAV_FLAGS_SHIFT)
 
#define WINED3D_SM5_SYNC_FLAGS_SHIFT   11
 
#define WINED3D_SM5_SYNC_FLAGS_MASK   (0xffu << WINED3D_SM5_SYNC_FLAGS_SHIFT)
 
#define WINED3D_SM5_TESSELLATOR_SHIFT   11
 
#define WINED3D_SM5_TESSELLATOR_MASK   (0xfu << WINED3D_SM5_TESSELLATOR_SHIFT)
 
#define WINED3D_SM4_OPCODE_MASK   0xff
 
#define WINED3D_SM4_REGISTER_MODIFIER   (0x1u << 31)
 
#define WINED3D_SM4_ADDRESSING_SHIFT1   25
 
#define WINED3D_SM4_ADDRESSING_MASK1   (0x3u << WINED3D_SM4_ADDRESSING_SHIFT1)
 
#define WINED3D_SM4_ADDRESSING_SHIFT0   22
 
#define WINED3D_SM4_ADDRESSING_MASK0   (0x3u << WINED3D_SM4_ADDRESSING_SHIFT0)
 
#define WINED3D_SM4_REGISTER_ORDER_SHIFT   20
 
#define WINED3D_SM4_REGISTER_ORDER_MASK   (0x3u << WINED3D_SM4_REGISTER_ORDER_SHIFT)
 
#define WINED3D_SM4_REGISTER_TYPE_SHIFT   12
 
#define WINED3D_SM4_REGISTER_TYPE_MASK   (0xffu << WINED3D_SM4_REGISTER_TYPE_SHIFT)
 
#define WINED3D_SM4_SWIZZLE_TYPE_SHIFT   2
 
#define WINED3D_SM4_SWIZZLE_TYPE_MASK   (0x3u << WINED3D_SM4_SWIZZLE_TYPE_SHIFT)
 
#define WINED3D_SM4_DIMENSION_SHIFT   0
 
#define WINED3D_SM4_DIMENSION_MASK   (0x3u << WINED3D_SM4_DIMENSION_SHIFT)
 
#define WINED3D_SM4_WRITEMASK_SHIFT   4
 
#define WINED3D_SM4_WRITEMASK_MASK   (0xfu << WINED3D_SM4_WRITEMASK_SHIFT)
 
#define WINED3D_SM4_SWIZZLE_SHIFT   4
 
#define WINED3D_SM4_SWIZZLE_MASK   (0xffu << WINED3D_SM4_SWIZZLE_SHIFT)
 
#define WINED3D_SM4_VERSION_MAJOR(version)   (((version) >> 4) & 0xf)
 
#define WINED3D_SM4_VERSION_MINOR(version)   (((version) >> 0) & 0xf)
 
#define WINED3D_SM4_ADDRESSING_RELATIVE   0x2
 
#define WINED3D_SM4_ADDRESSING_OFFSET   0x1
 
#define WINED3D_SM4_INSTRUCTION_FLAG_SATURATE   0x4
 
#define WINED3D_SM4_CONDITIONAL_NZ   (0x1u << 18)
 
#define TAG_AON9   WINEMAKEFOURCC('A', 'o', 'n', '9')
 
#define TAG_ISG1   WINEMAKEFOURCC('I', 'S', 'G', '1')
 
#define TAG_ISGN   WINEMAKEFOURCC('I', 'S', 'G', 'N')
 
#define TAG_OSG1   WINEMAKEFOURCC('O', 'S', 'G', '1')
 
#define TAG_OSG5   WINEMAKEFOURCC('O', 'S', 'G', '5')
 
#define TAG_OSGN   WINEMAKEFOURCC('O', 'S', 'G', 'N')
 
#define TAG_PCSG   WINEMAKEFOURCC('P', 'C', 'S', 'G')
 
#define TAG_PSG1   WINEMAKEFOURCC('P', 'S', 'G', '1')
 
#define TAG_SHDR   WINEMAKEFOURCC('S', 'H', 'D', 'R')
 
#define TAG_SHEX   WINEMAKEFOURCC('S', 'H', 'E', 'X')
 

Enumerations

enum  wined3d_sm4_opcode {
  WINED3D_SM4_OP_ADD = 0x00 , WINED3D_SM4_OP_AND = 0x01 , WINED3D_SM4_OP_BREAK = 0x02 , WINED3D_SM4_OP_BREAKC = 0x03 ,
  WINED3D_SM4_OP_CASE = 0x06 , WINED3D_SM4_OP_CONTINUE = 0x07 , WINED3D_SM4_OP_CONTINUEC = 0x08 , WINED3D_SM4_OP_CUT = 0x09 ,
  WINED3D_SM4_OP_DEFAULT = 0x0a , WINED3D_SM4_OP_DERIV_RTX = 0x0b , WINED3D_SM4_OP_DERIV_RTY = 0x0c , WINED3D_SM4_OP_DISCARD = 0x0d ,
  WINED3D_SM4_OP_DIV = 0x0e , WINED3D_SM4_OP_DP2 = 0x0f , WINED3D_SM4_OP_DP3 = 0x10 , WINED3D_SM4_OP_DP4 = 0x11 ,
  WINED3D_SM4_OP_ELSE = 0x12 , WINED3D_SM4_OP_EMIT = 0x13 , WINED3D_SM4_OP_ENDIF = 0x15 , WINED3D_SM4_OP_ENDLOOP = 0x16 ,
  WINED3D_SM4_OP_ENDSWITCH = 0x17 , WINED3D_SM4_OP_EQ = 0x18 , WINED3D_SM4_OP_EXP = 0x19 , WINED3D_SM4_OP_FRC = 0x1a ,
  WINED3D_SM4_OP_FTOI = 0x1b , WINED3D_SM4_OP_FTOU = 0x1c , WINED3D_SM4_OP_GE = 0x1d , WINED3D_SM4_OP_IADD = 0x1e ,
  WINED3D_SM4_OP_IF = 0x1f , WINED3D_SM4_OP_IEQ = 0x20 , WINED3D_SM4_OP_IGE = 0x21 , WINED3D_SM4_OP_ILT = 0x22 ,
  WINED3D_SM4_OP_IMAD = 0x23 , WINED3D_SM4_OP_IMAX = 0x24 , WINED3D_SM4_OP_IMIN = 0x25 , WINED3D_SM4_OP_IMUL = 0x26 ,
  WINED3D_SM4_OP_INE = 0x27 , WINED3D_SM4_OP_INEG = 0x28 , WINED3D_SM4_OP_ISHL = 0x29 , WINED3D_SM4_OP_ISHR = 0x2a ,
  WINED3D_SM4_OP_ITOF = 0x2b , WINED3D_SM4_OP_LABEL = 0x2c , WINED3D_SM4_OP_LD = 0x2d , WINED3D_SM4_OP_LD2DMS = 0x2e ,
  WINED3D_SM4_OP_LOG = 0x2f , WINED3D_SM4_OP_LOOP = 0x30 , WINED3D_SM4_OP_LT = 0x31 , WINED3D_SM4_OP_MAD = 0x32 ,
  WINED3D_SM4_OP_MIN = 0x33 , WINED3D_SM4_OP_MAX = 0x34 , WINED3D_SM4_OP_SHADER_DATA = 0x35 , WINED3D_SM4_OP_MOV = 0x36 ,
  WINED3D_SM4_OP_MOVC = 0x37 , WINED3D_SM4_OP_MUL = 0x38 , WINED3D_SM4_OP_NE = 0x39 , WINED3D_SM4_OP_NOP = 0x3a ,
  WINED3D_SM4_OP_NOT = 0x3b , WINED3D_SM4_OP_OR = 0x3c , WINED3D_SM4_OP_RESINFO = 0x3d , WINED3D_SM4_OP_RET = 0x3e ,
  WINED3D_SM4_OP_RETC = 0x3f , WINED3D_SM4_OP_ROUND_NE = 0x40 , WINED3D_SM4_OP_ROUND_NI = 0x41 , WINED3D_SM4_OP_ROUND_PI = 0x42 ,
  WINED3D_SM4_OP_ROUND_Z = 0x43 , WINED3D_SM4_OP_RSQ = 0x44 , WINED3D_SM4_OP_SAMPLE = 0x45 , WINED3D_SM4_OP_SAMPLE_C = 0x46 ,
  WINED3D_SM4_OP_SAMPLE_C_LZ = 0x47 , WINED3D_SM4_OP_SAMPLE_LOD = 0x48 , WINED3D_SM4_OP_SAMPLE_GRAD = 0x49 , WINED3D_SM4_OP_SAMPLE_B = 0x4a ,
  WINED3D_SM4_OP_SQRT = 0x4b , WINED3D_SM4_OP_SWITCH = 0x4c , WINED3D_SM4_OP_SINCOS = 0x4d , WINED3D_SM4_OP_UDIV = 0x4e ,
  WINED3D_SM4_OP_ULT = 0x4f , WINED3D_SM4_OP_UGE = 0x50 , WINED3D_SM4_OP_UMUL = 0x51 , WINED3D_SM4_OP_UMAX = 0x53 ,
  WINED3D_SM4_OP_UMIN = 0x54 , WINED3D_SM4_OP_USHR = 0x55 , WINED3D_SM4_OP_UTOF = 0x56 , WINED3D_SM4_OP_XOR = 0x57 ,
  WINED3D_SM4_OP_DCL_RESOURCE = 0x58 , WINED3D_SM4_OP_DCL_CONSTANT_BUFFER = 0x59 , WINED3D_SM4_OP_DCL_SAMPLER = 0x5a , WINED3D_SM4_OP_DCL_INDEX_RANGE = 0x5b ,
  WINED3D_SM4_OP_DCL_OUTPUT_TOPOLOGY = 0x5c , WINED3D_SM4_OP_DCL_INPUT_PRIMITIVE = 0x5d , WINED3D_SM4_OP_DCL_VERTICES_OUT = 0x5e , WINED3D_SM4_OP_DCL_INPUT = 0x5f ,
  WINED3D_SM4_OP_DCL_INPUT_SGV = 0x60 , WINED3D_SM4_OP_DCL_INPUT_SIV = 0x61 , WINED3D_SM4_OP_DCL_INPUT_PS = 0x62 , WINED3D_SM4_OP_DCL_INPUT_PS_SGV = 0x63 ,
  WINED3D_SM4_OP_DCL_INPUT_PS_SIV = 0x64 , WINED3D_SM4_OP_DCL_OUTPUT = 0x65 , WINED3D_SM4_OP_DCL_OUTPUT_SIV = 0x67 , WINED3D_SM4_OP_DCL_TEMPS = 0x68 ,
  WINED3D_SM4_OP_DCL_INDEXABLE_TEMP = 0x69 , WINED3D_SM4_OP_DCL_GLOBAL_FLAGS = 0x6a , WINED3D_SM4_OP_LOD = 0x6c , WINED3D_SM4_OP_GATHER4 = 0x6d ,
  WINED3D_SM4_OP_SAMPLE_POS = 0x6e , WINED3D_SM4_OP_SAMPLE_INFO = 0x6f , WINED3D_SM5_OP_HS_DECLS = 0x71 , WINED3D_SM5_OP_HS_CONTROL_POINT_PHASE = 0x72 ,
  WINED3D_SM5_OP_HS_FORK_PHASE = 0x73 , WINED3D_SM5_OP_HS_JOIN_PHASE = 0x74 , WINED3D_SM5_OP_EMIT_STREAM = 0x75 , WINED3D_SM5_OP_CUT_STREAM = 0x76 ,
  WINED3D_SM5_OP_FCALL = 0x78 , WINED3D_SM5_OP_BUFINFO = 0x79 , WINED3D_SM5_OP_DERIV_RTX_COARSE = 0x7a , WINED3D_SM5_OP_DERIV_RTX_FINE = 0x7b ,
  WINED3D_SM5_OP_DERIV_RTY_COARSE = 0x7c , WINED3D_SM5_OP_DERIV_RTY_FINE = 0x7d , WINED3D_SM5_OP_GATHER4_C = 0x7e , WINED3D_SM5_OP_GATHER4_PO = 0x7f ,
  WINED3D_SM5_OP_GATHER4_PO_C = 0x80 , WINED3D_SM5_OP_RCP = 0x81 , WINED3D_SM5_OP_F32TOF16 = 0x82 , WINED3D_SM5_OP_F16TOF32 = 0x83 ,
  WINED3D_SM5_OP_COUNTBITS = 0x86 , WINED3D_SM5_OP_FIRSTBIT_HI = 0x87 , WINED3D_SM5_OP_FIRSTBIT_LO = 0x88 , WINED3D_SM5_OP_FIRSTBIT_SHI = 0x89 ,
  WINED3D_SM5_OP_UBFE = 0x8a , WINED3D_SM5_OP_IBFE = 0x8b , WINED3D_SM5_OP_BFI = 0x8c , WINED3D_SM5_OP_BFREV = 0x8d ,
  WINED3D_SM5_OP_SWAPC = 0x8e , WINED3D_SM5_OP_DCL_STREAM = 0x8f , WINED3D_SM5_OP_DCL_FUNCTION_BODY = 0x90 , WINED3D_SM5_OP_DCL_FUNCTION_TABLE = 0x91 ,
  WINED3D_SM5_OP_DCL_INTERFACE = 0x92 , WINED3D_SM5_OP_DCL_INPUT_CONTROL_POINT_COUNT = 0x93 , WINED3D_SM5_OP_DCL_OUTPUT_CONTROL_POINT_COUNT = 0x94 , WINED3D_SM5_OP_DCL_TESSELLATOR_DOMAIN = 0x95 ,
  WINED3D_SM5_OP_DCL_TESSELLATOR_PARTITIONING = 0x96 , WINED3D_SM5_OP_DCL_TESSELLATOR_OUTPUT_PRIMITIVE = 0x97 , WINED3D_SM5_OP_DCL_HS_MAX_TESSFACTOR = 0x98 , WINED3D_SM5_OP_DCL_HS_FORK_PHASE_INSTANCE_COUNT = 0x99 ,
  WINED3D_SM5_OP_DCL_HS_JOIN_PHASE_INSTANCE_COUNT = 0x9a , WINED3D_SM5_OP_DCL_THREAD_GROUP = 0x9b , WINED3D_SM5_OP_DCL_UAV_TYPED = 0x9c , WINED3D_SM5_OP_DCL_UAV_RAW = 0x9d ,
  WINED3D_SM5_OP_DCL_UAV_STRUCTURED = 0x9e , WINED3D_SM5_OP_DCL_TGSM_RAW = 0x9f , WINED3D_SM5_OP_DCL_TGSM_STRUCTURED = 0xa0 , WINED3D_SM5_OP_DCL_RESOURCE_RAW = 0xa1 ,
  WINED3D_SM5_OP_DCL_RESOURCE_STRUCTURED = 0xa2 , WINED3D_SM5_OP_LD_UAV_TYPED = 0xa3 , WINED3D_SM5_OP_STORE_UAV_TYPED = 0xa4 , WINED3D_SM5_OP_LD_RAW = 0xa5 ,
  WINED3D_SM5_OP_STORE_RAW = 0xa6 , WINED3D_SM5_OP_LD_STRUCTURED = 0xa7 , WINED3D_SM5_OP_STORE_STRUCTURED = 0xa8 , WINED3D_SM5_OP_ATOMIC_AND = 0xa9 ,
  WINED3D_SM5_OP_ATOMIC_OR = 0xaa , WINED3D_SM5_OP_ATOMIC_XOR = 0xab , WINED3D_SM5_OP_ATOMIC_CMP_STORE = 0xac , WINED3D_SM5_OP_ATOMIC_IADD = 0xad ,
  WINED3D_SM5_OP_ATOMIC_IMAX = 0xae , WINED3D_SM5_OP_ATOMIC_IMIN = 0xaf , WINED3D_SM5_OP_ATOMIC_UMAX = 0xb0 , WINED3D_SM5_OP_ATOMIC_UMIN = 0xb1 ,
  WINED3D_SM5_OP_IMM_ATOMIC_ALLOC = 0xb2 , WINED3D_SM5_OP_IMM_ATOMIC_CONSUME = 0xb3 , WINED3D_SM5_OP_IMM_ATOMIC_IADD = 0xb4 , WINED3D_SM5_OP_IMM_ATOMIC_AND = 0xb5 ,
  WINED3D_SM5_OP_IMM_ATOMIC_OR = 0xb6 , WINED3D_SM5_OP_IMM_ATOMIC_XOR = 0xb7 , WINED3D_SM5_OP_IMM_ATOMIC_EXCH = 0xb8 , WINED3D_SM5_OP_IMM_ATOMIC_CMP_EXCH = 0xb9 ,
  WINED3D_SM5_OP_IMM_ATOMIC_IMAX = 0xba , WINED3D_SM5_OP_IMM_ATOMIC_IMIN = 0xbb , WINED3D_SM5_OP_IMM_ATOMIC_UMAX = 0xbc , WINED3D_SM5_OP_IMM_ATOMIC_UMIN = 0xbd ,
  WINED3D_SM5_OP_SYNC = 0xbe , WINED3D_SM5_OP_EVAL_SAMPLE_INDEX = 0xcc , WINED3D_SM5_OP_EVAL_CENTROID = 0xcd , WINED3D_SM5_OP_DCL_GS_INSTANCES = 0xce
}
 
enum  wined3d_sm4_instruction_modifier { WINED3D_SM4_MODIFIER_AOFFIMMI = 0x1 , WINED3D_SM5_MODIFIER_RESOURCE_TYPE = 0x2 , WINED3D_SM5_MODIFIER_DATA_TYPE = 0x3 }
 
enum  wined3d_sm4_register_type {
  WINED3D_SM4_RT_TEMP = 0x00 , WINED3D_SM4_RT_INPUT = 0x01 , WINED3D_SM4_RT_OUTPUT = 0x02 , WINED3D_SM4_RT_INDEXABLE_TEMP = 0x03 ,
  WINED3D_SM4_RT_IMMCONST = 0x04 , WINED3D_SM4_RT_SAMPLER = 0x06 , WINED3D_SM4_RT_RESOURCE = 0x07 , WINED3D_SM4_RT_CONSTBUFFER = 0x08 ,
  WINED3D_SM4_RT_IMMCONSTBUFFER = 0x09 , WINED3D_SM4_RT_PRIMID = 0x0b , WINED3D_SM4_RT_DEPTHOUT = 0x0c , WINED3D_SM4_RT_NULL = 0x0d ,
  WINED3D_SM4_RT_RASTERIZER = 0x0e , WINED3D_SM4_RT_OMASK = 0x0f , WINED3D_SM5_RT_STREAM = 0x10 , WINED3D_SM5_RT_FUNCTION_BODY = 0x11 ,
  WINED3D_SM5_RT_FUNCTION_POINTER = 0x13 , WINED3D_SM5_RT_OUTPUT_CONTROL_POINT_ID = 0x16 , WINED3D_SM5_RT_FORK_INSTANCE_ID = 0x17 , WINED3D_SM5_RT_JOIN_INSTANCE_ID = 0x18 ,
  WINED3D_SM5_RT_INPUT_CONTROL_POINT = 0x19 , WINED3D_SM5_RT_OUTPUT_CONTROL_POINT = 0x1a , WINED3D_SM5_RT_PATCH_CONSTANT_DATA = 0x1b , WINED3D_SM5_RT_DOMAIN_LOCATION = 0x1c ,
  WINED3D_SM5_RT_UAV = 0x1e , WINED3D_SM5_RT_SHARED_MEMORY = 0x1f , WINED3D_SM5_RT_THREAD_ID = 0x20 , WINED3D_SM5_RT_THREAD_GROUP_ID = 0x21 ,
  WINED3D_SM5_RT_LOCAL_THREAD_ID = 0x22 , WINED3D_SM5_RT_COVERAGE = 0x23 , WINED3D_SM5_RT_LOCAL_THREAD_INDEX = 0x24 , WINED3D_SM5_RT_GS_INSTANCE_ID = 0x25 ,
  WINED3D_SM5_RT_DEPTHOUT_GREATER_EQUAL = 0x26 , WINED3D_SM5_RT_DEPTHOUT_LESS_EQUAL = 0x27 , WINED3D_SM5_RT_OUTPUT_STENCIL_REF = 0x29
}
 
enum  wined3d_sm4_output_primitive_type { WINED3D_SM4_OUTPUT_PT_POINTLIST = 0x1 , WINED3D_SM4_OUTPUT_PT_LINESTRIP = 0x3 , WINED3D_SM4_OUTPUT_PT_TRIANGLESTRIP = 0x5 }
 
enum  wined3d_sm4_input_primitive_type {
  WINED3D_SM4_INPUT_PT_POINT = 0x01 , WINED3D_SM4_INPUT_PT_LINE = 0x02 , WINED3D_SM4_INPUT_PT_TRIANGLE = 0x03 , WINED3D_SM4_INPUT_PT_LINEADJ = 0x06 ,
  WINED3D_SM4_INPUT_PT_TRIANGLEADJ = 0x07 , WINED3D_SM5_INPUT_PT_PATCH1 = 0x08 , WINED3D_SM5_INPUT_PT_PATCH2 = 0x09 , WINED3D_SM5_INPUT_PT_PATCH3 = 0x0a ,
  WINED3D_SM5_INPUT_PT_PATCH4 = 0x0b , WINED3D_SM5_INPUT_PT_PATCH5 = 0x0c , WINED3D_SM5_INPUT_PT_PATCH6 = 0x0d , WINED3D_SM5_INPUT_PT_PATCH7 = 0x0e ,
  WINED3D_SM5_INPUT_PT_PATCH8 = 0x0f , WINED3D_SM5_INPUT_PT_PATCH9 = 0x10 , WINED3D_SM5_INPUT_PT_PATCH10 = 0x11 , WINED3D_SM5_INPUT_PT_PATCH11 = 0x12 ,
  WINED3D_SM5_INPUT_PT_PATCH12 = 0x13 , WINED3D_SM5_INPUT_PT_PATCH13 = 0x14 , WINED3D_SM5_INPUT_PT_PATCH14 = 0x15 , WINED3D_SM5_INPUT_PT_PATCH15 = 0x16 ,
  WINED3D_SM5_INPUT_PT_PATCH16 = 0x17 , WINED3D_SM5_INPUT_PT_PATCH17 = 0x18 , WINED3D_SM5_INPUT_PT_PATCH18 = 0x19 , WINED3D_SM5_INPUT_PT_PATCH19 = 0x1a ,
  WINED3D_SM5_INPUT_PT_PATCH20 = 0x1b , WINED3D_SM5_INPUT_PT_PATCH21 = 0x1c , WINED3D_SM5_INPUT_PT_PATCH22 = 0x1d , WINED3D_SM5_INPUT_PT_PATCH23 = 0x1e ,
  WINED3D_SM5_INPUT_PT_PATCH24 = 0x1f , WINED3D_SM5_INPUT_PT_PATCH25 = 0x20 , WINED3D_SM5_INPUT_PT_PATCH26 = 0x21 , WINED3D_SM5_INPUT_PT_PATCH27 = 0x22 ,
  WINED3D_SM5_INPUT_PT_PATCH28 = 0x23 , WINED3D_SM5_INPUT_PT_PATCH29 = 0x24 , WINED3D_SM5_INPUT_PT_PATCH30 = 0x25 , WINED3D_SM5_INPUT_PT_PATCH31 = 0x26 ,
  WINED3D_SM5_INPUT_PT_PATCH32 = 0x27
}
 
enum  wined3d_sm4_swizzle_type { WINED3D_SM4_SWIZZLE_NONE = 0x0 , WINED3D_SM4_SWIZZLE_VEC4 = 0x1 , WINED3D_SM4_SWIZZLE_SCALAR = 0x2 }
 
enum  wined3d_sm4_dimension { WINED3D_SM4_DIMENSION_SCALAR = 0x1 , WINED3D_SM4_DIMENSION_VEC4 = 0x2 }
 
enum  wined3d_sm4_resource_type {
  WINED3D_SM4_RESOURCE_BUFFER = 0x1 , WINED3D_SM4_RESOURCE_TEXTURE_1D = 0x2 , WINED3D_SM4_RESOURCE_TEXTURE_2D = 0x3 , WINED3D_SM4_RESOURCE_TEXTURE_2DMS = 0x4 ,
  WINED3D_SM4_RESOURCE_TEXTURE_3D = 0x5 , WINED3D_SM4_RESOURCE_TEXTURE_CUBE = 0x6 , WINED3D_SM4_RESOURCE_TEXTURE_1DARRAY = 0x7 , WINED3D_SM4_RESOURCE_TEXTURE_2DARRAY = 0x8 ,
  WINED3D_SM4_RESOURCE_TEXTURE_2DMSARRAY = 0x9 , WINED3D_SM4_RESOURCE_TEXTURE_CUBEARRAY = 0xa
}
 
enum  wined3d_sm4_data_type {
  WINED3D_SM4_DATA_UNORM = 0x1 , WINED3D_SM4_DATA_SNORM = 0x2 , WINED3D_SM4_DATA_INT = 0x3 , WINED3D_SM4_DATA_UINT = 0x4 ,
  WINED3D_SM4_DATA_FLOAT = 0x5
}
 
enum  wined3d_sm4_sampler_mode { WINED3D_SM4_SAMPLER_DEFAULT = 0x0 , WINED3D_SM4_SAMPLER_COMPARISON = 0x1 }
 
enum  wined3d_sm4_shader_data_type { WINED3D_SM4_SHADER_DATA_IMMEDIATE_CONSTANT_BUFFER = 0x3 , WINED3D_SM4_SHADER_DATA_MESSAGE = 0x4 }
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (d3d_shader)
 
 WINE_DECLARE_DEBUG_CHANNEL (d3d_bytecode)
 
static BOOL shader_sm4_read_src_param (struct wined3d_sm4_data *priv, const DWORD **ptr, const DWORD *end, enum wined3d_data_type data_type, struct wined3d_shader_src_param *src_param)
 
static BOOL shader_sm4_read_dst_param (struct wined3d_sm4_data *priv, const DWORD **ptr, const DWORD *end, enum wined3d_data_type data_type, struct wined3d_shader_dst_param *dst_param)
 
static void shader_sm4_read_conditional_op (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm4_read_shader_data (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm4_read_dcl_resource (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm4_read_dcl_constant_buffer (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm4_read_dcl_sampler (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm4_read_dcl_index_range (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm4_read_dcl_output_topology (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm4_read_dcl_input_primitive (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm4_read_declaration_count (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm4_read_declaration_dst (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm4_read_declaration_register_semantic (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm4_read_dcl_input_ps (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm4_read_dcl_input_ps_siv (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm4_read_dcl_indexable_temp (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm4_read_dcl_global_flags (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_fcall (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_dcl_function_body (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_dcl_function_table (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_dcl_interface (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_control_point_count (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_dcl_tessellator_domain (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_dcl_tessellator_partitioning (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_dcl_tessellator_output_primitive (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_dcl_hs_max_tessfactor (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_dcl_thread_group (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_dcl_uav_raw (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_dcl_uav_structured (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_dcl_tgsm_raw (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_dcl_tgsm_structured (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_dcl_resource_structured (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_dcl_resource_raw (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static void shader_sm5_read_sync (struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
 
static const struct wined3d_sm4_opcode_info * get_opcode_info (enum wined3d_sm4_opcode opcode)
 
static void map_register (const struct wined3d_sm4_data *priv, struct wined3d_shader_register *reg)
 
static enum wined3d_data_type map_data_type (char t)
 
static enum wined3d_shader_type wined3d_get_sm4_shader_type (const DWORD *byte_code, size_t byte_code_size)
 
static void * shader_sm4_init (const DWORD *byte_code, size_t byte_code_size, const struct wined3d_shader_signature *output_signature)
 
static void shader_sm4_free (void *data)
 
static struct wined3d_shader_src_param * get_src_param (struct wined3d_sm4_data *priv)
 
static void shader_sm4_read_header (void *data, const DWORD **ptr, struct wined3d_shader_version *shader_version)
 
static BOOL shader_sm4_read_reg_idx (struct wined3d_sm4_data *priv, const DWORD **ptr, const DWORD *end, DWORD addressing, struct wined3d_shader_register_index *reg_idx)
 
static BOOL shader_sm4_read_param (struct wined3d_sm4_data *priv, const DWORD **ptr, const DWORD *end, enum wined3d_data_type data_type, struct wined3d_shader_register *param, enum wined3d_shader_src_modifier *modifier)
 
static void shader_sm4_read_instruction_modifier (uint32_t modifier, struct wined3d_shader_instruction *ins)
 
static void shader_sm4_read_instruction (void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins)
 
static BOOL shader_sm4_is_end (void *data, const DWORD **ptr)
 
static unsigned int read_dword (const char **ptr)
 
static BOOL require_space (size_t offset, size_t count, size_t size, size_t data_size)
 
static void skip_dword_unknown (const char **ptr, unsigned int count)
 
static const char * shader_get_string (const char *data, size_t data_size, unsigned int offset)
 
static HRESULT shader_parse_signature (DWORD tag, const char *data, unsigned int data_size, struct wined3d_shader_signature *s)
 
static HRESULT shader_dxbc_process_section (struct wined3d_shader *shader, unsigned int max_version, enum vkd3d_shader_source_type *source_type, const struct vkd3d_shader_dxbc_section_desc *section)
 
HRESULT wined3d_shader_extract_from_dxbc (struct wined3d_shader *shader, unsigned int max_shader_version, enum vkd3d_shader_source_type *source_type)
 

Variables

static enum wined3d_primitive_type output_primitive_type_table []
 
static enum wined3d_primitive_type input_primitive_type_table []
 
static enum wined3d_shader_resource_type resource_type_table []
 
static enum wined3d_data_type data_type_table []
 
static const struct wined3d_sm4_opcode_info opcode_table []
 
static enum wined3d_shader_register_type register_type_table []
 
const struct wined3d_shader_frontend sm4_shader_frontend
 

Macro Definition Documentation

◆ LIBVKD3D_SHADER_SOURCE

#define LIBVKD3D_SHADER_SOURCE

Definition at line 20 of file shader_sm4.c.

◆ TAG_AON9

#define TAG_AON9   WINEMAKEFOURCC('A', 'o', 'n', '9')

Definition at line 1840 of file shader_sm4.c.

◆ TAG_ISG1

#define TAG_ISG1   WINEMAKEFOURCC('I', 'S', 'G', '1')

Definition at line 1841 of file shader_sm4.c.

◆ TAG_ISGN

#define TAG_ISGN   WINEMAKEFOURCC('I', 'S', 'G', 'N')

Definition at line 1842 of file shader_sm4.c.

◆ TAG_OSG1

#define TAG_OSG1   WINEMAKEFOURCC('O', 'S', 'G', '1')

Definition at line 1843 of file shader_sm4.c.

◆ TAG_OSG5

#define TAG_OSG5   WINEMAKEFOURCC('O', 'S', 'G', '5')

Definition at line 1844 of file shader_sm4.c.

◆ TAG_OSGN

#define TAG_OSGN   WINEMAKEFOURCC('O', 'S', 'G', 'N')

Definition at line 1845 of file shader_sm4.c.

◆ TAG_PCSG

#define TAG_PCSG   WINEMAKEFOURCC('P', 'C', 'S', 'G')

Definition at line 1846 of file shader_sm4.c.

◆ TAG_PSG1

#define TAG_PSG1   WINEMAKEFOURCC('P', 'S', 'G', '1')

Definition at line 1847 of file shader_sm4.c.

◆ TAG_SHDR

#define TAG_SHDR   WINEMAKEFOURCC('S', 'H', 'D', 'R')

Definition at line 1848 of file shader_sm4.c.

◆ TAG_SHEX

#define TAG_SHEX   WINEMAKEFOURCC('S', 'H', 'E', 'X')

Definition at line 1849 of file shader_sm4.c.

◆ WINED3D_SM4_ADDRESSING_MASK0

#define WINED3D_SM4_ADDRESSING_MASK0   (0x3u << WINED3D_SM4_ADDRESSING_SHIFT0)

Definition at line 99 of file shader_sm4.c.

◆ WINED3D_SM4_ADDRESSING_MASK1

#define WINED3D_SM4_ADDRESSING_MASK1   (0x3u << WINED3D_SM4_ADDRESSING_SHIFT1)

Definition at line 96 of file shader_sm4.c.

◆ WINED3D_SM4_ADDRESSING_OFFSET

#define WINED3D_SM4_ADDRESSING_OFFSET   0x1

Definition at line 123 of file shader_sm4.c.

◆ WINED3D_SM4_ADDRESSING_RELATIVE

#define WINED3D_SM4_ADDRESSING_RELATIVE   0x2

Definition at line 122 of file shader_sm4.c.

◆ WINED3D_SM4_ADDRESSING_SHIFT0

#define WINED3D_SM4_ADDRESSING_SHIFT0   22

Definition at line 98 of file shader_sm4.c.

◆ WINED3D_SM4_ADDRESSING_SHIFT1

#define WINED3D_SM4_ADDRESSING_SHIFT1   25

Definition at line 95 of file shader_sm4.c.

◆ WINED3D_SM4_AOFFIMMI_U_MASK

#define WINED3D_SM4_AOFFIMMI_U_MASK   (0xfu << WINED3D_SM4_AOFFIMMI_U_SHIFT)

Definition at line 37 of file shader_sm4.c.

◆ WINED3D_SM4_AOFFIMMI_U_SHIFT

#define WINED3D_SM4_AOFFIMMI_U_SHIFT   9

Definition at line 36 of file shader_sm4.c.

◆ WINED3D_SM4_AOFFIMMI_V_MASK

#define WINED3D_SM4_AOFFIMMI_V_MASK   (0xfu << WINED3D_SM4_AOFFIMMI_V_SHIFT)

Definition at line 39 of file shader_sm4.c.

◆ WINED3D_SM4_AOFFIMMI_V_SHIFT

#define WINED3D_SM4_AOFFIMMI_V_SHIFT   13

Definition at line 38 of file shader_sm4.c.

◆ WINED3D_SM4_AOFFIMMI_W_MASK

#define WINED3D_SM4_AOFFIMMI_W_MASK   (0xfu << WINED3D_SM4_AOFFIMMI_W_SHIFT)

Definition at line 41 of file shader_sm4.c.

◆ WINED3D_SM4_AOFFIMMI_W_SHIFT

#define WINED3D_SM4_AOFFIMMI_W_SHIFT   17

Definition at line 40 of file shader_sm4.c.

◆ WINED3D_SM4_CONDITIONAL_NZ

#define WINED3D_SM4_CONDITIONAL_NZ   (0x1u << 18)

Definition at line 127 of file shader_sm4.c.

◆ WINED3D_SM4_DIMENSION_MASK

#define WINED3D_SM4_DIMENSION_MASK   (0x3u << WINED3D_SM4_DIMENSION_SHIFT)

Definition at line 111 of file shader_sm4.c.

◆ WINED3D_SM4_DIMENSION_SHIFT

#define WINED3D_SM4_DIMENSION_SHIFT   0

Definition at line 110 of file shader_sm4.c.

◆ WINED3D_SM4_GLOBAL_FLAGS_MASK

#define WINED3D_SM4_GLOBAL_FLAGS_MASK   (0xffu << WINED3D_SM4_GLOBAL_FLAGS_SHIFT)

Definition at line 71 of file shader_sm4.c.

◆ WINED3D_SM4_GLOBAL_FLAGS_SHIFT

#define WINED3D_SM4_GLOBAL_FLAGS_SHIFT   11

Definition at line 70 of file shader_sm4.c.

◆ WINED3D_SM4_INDEX_TYPE_MASK

#define WINED3D_SM4_INDEX_TYPE_MASK   (0x1u << WINED3D_SM4_INDEX_TYPE_SHIFT)

Definition at line 59 of file shader_sm4.c.

◆ WINED3D_SM4_INDEX_TYPE_SHIFT

#define WINED3D_SM4_INDEX_TYPE_SHIFT   11

Definition at line 58 of file shader_sm4.c.

◆ WINED3D_SM4_INSTRUCTION_FLAG_SATURATE

#define WINED3D_SM4_INSTRUCTION_FLAG_SATURATE   0x4

Definition at line 125 of file shader_sm4.c.

◆ WINED3D_SM4_INSTRUCTION_FLAGS_MASK

#define WINED3D_SM4_INSTRUCTION_FLAGS_MASK   (0x7u << WINED3D_SM4_INSTRUCTION_FLAGS_SHIFT)

Definition at line 47 of file shader_sm4.c.

◆ WINED3D_SM4_INSTRUCTION_FLAGS_SHIFT

#define WINED3D_SM4_INSTRUCTION_FLAGS_SHIFT   11

Definition at line 46 of file shader_sm4.c.

◆ WINED3D_SM4_INSTRUCTION_LENGTH_MASK

#define WINED3D_SM4_INSTRUCTION_LENGTH_MASK   (0x1fu << WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT)

Definition at line 44 of file shader_sm4.c.

◆ WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT

#define WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT   24

Definition at line 43 of file shader_sm4.c.

◆ WINED3D_SM4_INSTRUCTION_MODIFIER

#define WINED3D_SM4_INSTRUCTION_MODIFIER   (0x1u << 31)

Definition at line 26 of file shader_sm4.c.

◆ WINED3D_SM4_INTERPOLATION_MODE_MASK

#define WINED3D_SM4_INTERPOLATION_MODE_MASK   (0xfu << WINED3D_SM4_INTERPOLATION_MODE_SHIFT)

Definition at line 68 of file shader_sm4.c.

◆ WINED3D_SM4_INTERPOLATION_MODE_SHIFT

#define WINED3D_SM4_INTERPOLATION_MODE_SHIFT   11

Definition at line 67 of file shader_sm4.c.

◆ WINED3D_SM4_MODIFIER_MASK

#define WINED3D_SM4_MODIFIER_MASK   0x3fu

Definition at line 28 of file shader_sm4.c.

◆ WINED3D_SM4_OPCODE_MASK

#define WINED3D_SM4_OPCODE_MASK   0xff

Definition at line 91 of file shader_sm4.c.

◆ WINED3D_SM4_PRIMITIVE_TYPE_MASK

#define WINED3D_SM4_PRIMITIVE_TYPE_MASK   (0x3fu << WINED3D_SM4_PRIMITIVE_TYPE_SHIFT)

Definition at line 56 of file shader_sm4.c.

◆ WINED3D_SM4_PRIMITIVE_TYPE_SHIFT

#define WINED3D_SM4_PRIMITIVE_TYPE_SHIFT   11

Definition at line 55 of file shader_sm4.c.

◆ WINED3D_SM4_REGISTER_MODIFIER

#define WINED3D_SM4_REGISTER_MODIFIER   (0x1u << 31)

Definition at line 93 of file shader_sm4.c.

◆ WINED3D_SM4_REGISTER_ORDER_MASK

#define WINED3D_SM4_REGISTER_ORDER_MASK   (0x3u << WINED3D_SM4_REGISTER_ORDER_SHIFT)

Definition at line 102 of file shader_sm4.c.

◆ WINED3D_SM4_REGISTER_ORDER_SHIFT

#define WINED3D_SM4_REGISTER_ORDER_SHIFT   20

Definition at line 101 of file shader_sm4.c.

◆ WINED3D_SM4_REGISTER_TYPE_MASK

#define WINED3D_SM4_REGISTER_TYPE_MASK   (0xffu << WINED3D_SM4_REGISTER_TYPE_SHIFT)

Definition at line 105 of file shader_sm4.c.

◆ WINED3D_SM4_REGISTER_TYPE_SHIFT

#define WINED3D_SM4_REGISTER_TYPE_SHIFT   12

Definition at line 104 of file shader_sm4.c.

◆ WINED3D_SM4_RESOURCE_SAMPLE_COUNT_MASK

#define WINED3D_SM4_RESOURCE_SAMPLE_COUNT_MASK   (0xfu << WINED3D_SM4_RESOURCE_SAMPLE_COUNT_SHIFT)

Definition at line 53 of file shader_sm4.c.

◆ WINED3D_SM4_RESOURCE_SAMPLE_COUNT_SHIFT

#define WINED3D_SM4_RESOURCE_SAMPLE_COUNT_SHIFT   16

Definition at line 52 of file shader_sm4.c.

◆ WINED3D_SM4_RESOURCE_TYPE_MASK

#define WINED3D_SM4_RESOURCE_TYPE_MASK   (0xfu << WINED3D_SM4_RESOURCE_TYPE_SHIFT)

Definition at line 50 of file shader_sm4.c.

◆ WINED3D_SM4_RESOURCE_TYPE_SHIFT

#define WINED3D_SM4_RESOURCE_TYPE_SHIFT   11

Definition at line 49 of file shader_sm4.c.

◆ WINED3D_SM4_SAMPLER_MODE_MASK

#define WINED3D_SM4_SAMPLER_MODE_MASK   (0xfu << WINED3D_SM4_SAMPLER_MODE_SHIFT)

Definition at line 62 of file shader_sm4.c.

◆ WINED3D_SM4_SAMPLER_MODE_SHIFT

#define WINED3D_SM4_SAMPLER_MODE_SHIFT   11

Definition at line 61 of file shader_sm4.c.

◆ WINED3D_SM4_SHADER_DATA_TYPE_MASK

#define WINED3D_SM4_SHADER_DATA_TYPE_MASK   (0xfu << WINED3D_SM4_SHADER_DATA_TYPE_SHIFT)

Definition at line 65 of file shader_sm4.c.

◆ WINED3D_SM4_SHADER_DATA_TYPE_SHIFT

#define WINED3D_SM4_SHADER_DATA_TYPE_SHIFT   11

Definition at line 64 of file shader_sm4.c.

◆ WINED3D_SM4_SWIZZLE_MASK

#define WINED3D_SM4_SWIZZLE_MASK   (0xffu << WINED3D_SM4_SWIZZLE_SHIFT)

Definition at line 117 of file shader_sm4.c.

◆ WINED3D_SM4_SWIZZLE_SHIFT

#define WINED3D_SM4_SWIZZLE_SHIFT   4

Definition at line 116 of file shader_sm4.c.

◆ WINED3D_SM4_SWIZZLE_TYPE_MASK

#define WINED3D_SM4_SWIZZLE_TYPE_MASK   (0x3u << WINED3D_SM4_SWIZZLE_TYPE_SHIFT)

Definition at line 108 of file shader_sm4.c.

◆ WINED3D_SM4_SWIZZLE_TYPE_SHIFT

#define WINED3D_SM4_SWIZZLE_TYPE_SHIFT   2

Definition at line 107 of file shader_sm4.c.

◆ WINED3D_SM4_VERSION_MAJOR

#define WINED3D_SM4_VERSION_MAJOR (   version)    (((version) >> 4) & 0xf)

Definition at line 119 of file shader_sm4.c.

◆ WINED3D_SM4_VERSION_MINOR

#define WINED3D_SM4_VERSION_MINOR (   version)    (((version) >> 0) & 0xf)

Definition at line 120 of file shader_sm4.c.

◆ WINED3D_SM4_WRITEMASK_MASK

#define WINED3D_SM4_WRITEMASK_MASK   (0xfu << WINED3D_SM4_WRITEMASK_SHIFT)

Definition at line 114 of file shader_sm4.c.

◆ WINED3D_SM4_WRITEMASK_SHIFT

#define WINED3D_SM4_WRITEMASK_SHIFT   4

Definition at line 113 of file shader_sm4.c.

◆ WINED3D_SM5_CONTROL_POINT_COUNT_MASK

#define WINED3D_SM5_CONTROL_POINT_COUNT_MASK   (0xffu << WINED3D_SM5_CONTROL_POINT_COUNT_SHIFT)

Definition at line 77 of file shader_sm4.c.

◆ WINED3D_SM5_CONTROL_POINT_COUNT_SHIFT

#define WINED3D_SM5_CONTROL_POINT_COUNT_SHIFT   11

Definition at line 76 of file shader_sm4.c.

◆ WINED3D_SM5_FP_ARRAY_SIZE_SHIFT

#define WINED3D_SM5_FP_ARRAY_SIZE_SHIFT   16

Definition at line 79 of file shader_sm4.c.

◆ WINED3D_SM5_FP_TABLE_COUNT_MASK

#define WINED3D_SM5_FP_TABLE_COUNT_MASK   0xffffu

Definition at line 80 of file shader_sm4.c.

◆ WINED3D_SM5_MODIFIER_DATA_TYPE_MASK

#define WINED3D_SM5_MODIFIER_DATA_TYPE_MASK   (0xffffu << WINED3D_SM5_MODIFIER_DATA_TYPE_SHIFT)

Definition at line 31 of file shader_sm4.c.

◆ WINED3D_SM5_MODIFIER_DATA_TYPE_SHIFT

#define WINED3D_SM5_MODIFIER_DATA_TYPE_SHIFT   6

Definition at line 30 of file shader_sm4.c.

◆ WINED3D_SM5_MODIFIER_RESOURCE_TYPE_MASK

#define WINED3D_SM5_MODIFIER_RESOURCE_TYPE_MASK   (0xfu << WINED3D_SM5_MODIFIER_RESOURCE_TYPE_SHIFT)

Definition at line 34 of file shader_sm4.c.

◆ WINED3D_SM5_MODIFIER_RESOURCE_TYPE_SHIFT

#define WINED3D_SM5_MODIFIER_RESOURCE_TYPE_SHIFT   6

Definition at line 33 of file shader_sm4.c.

◆ WINED3D_SM5_PRECISE_MASK

#define WINED3D_SM5_PRECISE_MASK   (0xfu << WINED3D_SM5_PRECISE_SHIFT)

Definition at line 74 of file shader_sm4.c.

◆ WINED3D_SM5_PRECISE_SHIFT

#define WINED3D_SM5_PRECISE_SHIFT   19

Definition at line 73 of file shader_sm4.c.

◆ WINED3D_SM5_SYNC_FLAGS_MASK

#define WINED3D_SM5_SYNC_FLAGS_MASK   (0xffu << WINED3D_SM5_SYNC_FLAGS_SHIFT)

Definition at line 86 of file shader_sm4.c.

◆ WINED3D_SM5_SYNC_FLAGS_SHIFT

#define WINED3D_SM5_SYNC_FLAGS_SHIFT   11

Definition at line 85 of file shader_sm4.c.

◆ WINED3D_SM5_TESSELLATOR_MASK

#define WINED3D_SM5_TESSELLATOR_MASK   (0xfu << WINED3D_SM5_TESSELLATOR_SHIFT)

Definition at line 89 of file shader_sm4.c.

◆ WINED3D_SM5_TESSELLATOR_SHIFT

#define WINED3D_SM5_TESSELLATOR_SHIFT   11

Definition at line 88 of file shader_sm4.c.

◆ WINED3D_SM5_UAV_FLAGS_MASK

#define WINED3D_SM5_UAV_FLAGS_MASK   (0x1ffu << WINED3D_SM5_UAV_FLAGS_SHIFT)

Definition at line 83 of file shader_sm4.c.

◆ WINED3D_SM5_UAV_FLAGS_SHIFT

#define WINED3D_SM5_UAV_FLAGS_SHIFT   15

Definition at line 82 of file shader_sm4.c.

Enumeration Type Documentation

◆ wined3d_sm4_data_type

Enumerator
WINED3D_SM4_DATA_UNORM 
WINED3D_SM4_DATA_SNORM 
WINED3D_SM4_DATA_INT 
WINED3D_SM4_DATA_UINT 
WINED3D_SM4_DATA_FLOAT 

Definition at line 438 of file shader_sm4.c.

439{
445};
@ WINED3D_SM4_DATA_INT
Definition: shader_sm4.c:442
@ WINED3D_SM4_DATA_SNORM
Definition: shader_sm4.c:441
@ WINED3D_SM4_DATA_FLOAT
Definition: shader_sm4.c:444
@ WINED3D_SM4_DATA_UNORM
Definition: shader_sm4.c:440
@ WINED3D_SM4_DATA_UINT
Definition: shader_sm4.c:443

◆ wined3d_sm4_dimension

Enumerator
WINED3D_SM4_DIMENSION_SCALAR 
WINED3D_SM4_DIMENSION_VEC4 

Definition at line 418 of file shader_sm4.c.

419{
422};
@ WINED3D_SM4_DIMENSION_SCALAR
Definition: shader_sm4.c:420
@ WINED3D_SM4_DIMENSION_VEC4
Definition: shader_sm4.c:421

◆ wined3d_sm4_input_primitive_type

Enumerator
WINED3D_SM4_INPUT_PT_POINT 
WINED3D_SM4_INPUT_PT_LINE 
WINED3D_SM4_INPUT_PT_TRIANGLE 
WINED3D_SM4_INPUT_PT_LINEADJ 
WINED3D_SM4_INPUT_PT_TRIANGLEADJ 
WINED3D_SM5_INPUT_PT_PATCH1 
WINED3D_SM5_INPUT_PT_PATCH2 
WINED3D_SM5_INPUT_PT_PATCH3 
WINED3D_SM5_INPUT_PT_PATCH4 
WINED3D_SM5_INPUT_PT_PATCH5 
WINED3D_SM5_INPUT_PT_PATCH6 
WINED3D_SM5_INPUT_PT_PATCH7 
WINED3D_SM5_INPUT_PT_PATCH8 
WINED3D_SM5_INPUT_PT_PATCH9 
WINED3D_SM5_INPUT_PT_PATCH10 
WINED3D_SM5_INPUT_PT_PATCH11 
WINED3D_SM5_INPUT_PT_PATCH12 
WINED3D_SM5_INPUT_PT_PATCH13 
WINED3D_SM5_INPUT_PT_PATCH14 
WINED3D_SM5_INPUT_PT_PATCH15 
WINED3D_SM5_INPUT_PT_PATCH16 
WINED3D_SM5_INPUT_PT_PATCH17 
WINED3D_SM5_INPUT_PT_PATCH18 
WINED3D_SM5_INPUT_PT_PATCH19 
WINED3D_SM5_INPUT_PT_PATCH20 
WINED3D_SM5_INPUT_PT_PATCH21 
WINED3D_SM5_INPUT_PT_PATCH22 
WINED3D_SM5_INPUT_PT_PATCH23 
WINED3D_SM5_INPUT_PT_PATCH24 
WINED3D_SM5_INPUT_PT_PATCH25 
WINED3D_SM5_INPUT_PT_PATCH26 
WINED3D_SM5_INPUT_PT_PATCH27 
WINED3D_SM5_INPUT_PT_PATCH28 
WINED3D_SM5_INPUT_PT_PATCH29 
WINED3D_SM5_INPUT_PT_PATCH30 
WINED3D_SM5_INPUT_PT_PATCH31 
WINED3D_SM5_INPUT_PT_PATCH32 

Definition at line 370 of file shader_sm4.c.

371{
409};
@ WINED3D_SM5_INPUT_PT_PATCH23
Definition: shader_sm4.c:399
@ WINED3D_SM5_INPUT_PT_PATCH25
Definition: shader_sm4.c:401
@ WINED3D_SM5_INPUT_PT_PATCH3
Definition: shader_sm4.c:379
@ WINED3D_SM4_INPUT_PT_POINT
Definition: shader_sm4.c:372
@ WINED3D_SM4_INPUT_PT_TRIANGLEADJ
Definition: shader_sm4.c:376
@ WINED3D_SM5_INPUT_PT_PATCH32
Definition: shader_sm4.c:408
@ WINED3D_SM4_INPUT_PT_TRIANGLE
Definition: shader_sm4.c:374
@ WINED3D_SM5_INPUT_PT_PATCH7
Definition: shader_sm4.c:383
@ WINED3D_SM5_INPUT_PT_PATCH21
Definition: shader_sm4.c:397
@ WINED3D_SM5_INPUT_PT_PATCH6
Definition: shader_sm4.c:382
@ WINED3D_SM5_INPUT_PT_PATCH29
Definition: shader_sm4.c:405
@ WINED3D_SM5_INPUT_PT_PATCH10
Definition: shader_sm4.c:386
@ WINED3D_SM5_INPUT_PT_PATCH22
Definition: shader_sm4.c:398
@ WINED3D_SM5_INPUT_PT_PATCH14
Definition: shader_sm4.c:390
@ WINED3D_SM5_INPUT_PT_PATCH18
Definition: shader_sm4.c:394
@ WINED3D_SM5_INPUT_PT_PATCH11
Definition: shader_sm4.c:387
@ WINED3D_SM5_INPUT_PT_PATCH8
Definition: shader_sm4.c:384
@ WINED3D_SM5_INPUT_PT_PATCH30
Definition: shader_sm4.c:406
@ WINED3D_SM5_INPUT_PT_PATCH20
Definition: shader_sm4.c:396
@ WINED3D_SM5_INPUT_PT_PATCH31
Definition: shader_sm4.c:407
@ WINED3D_SM4_INPUT_PT_LINE
Definition: shader_sm4.c:373
@ WINED3D_SM5_INPUT_PT_PATCH24
Definition: shader_sm4.c:400
@ WINED3D_SM5_INPUT_PT_PATCH4
Definition: shader_sm4.c:380
@ WINED3D_SM5_INPUT_PT_PATCH9
Definition: shader_sm4.c:385
@ WINED3D_SM5_INPUT_PT_PATCH5
Definition: shader_sm4.c:381
@ WINED3D_SM5_INPUT_PT_PATCH2
Definition: shader_sm4.c:378
@ WINED3D_SM4_INPUT_PT_LINEADJ
Definition: shader_sm4.c:375
@ WINED3D_SM5_INPUT_PT_PATCH19
Definition: shader_sm4.c:395
@ WINED3D_SM5_INPUT_PT_PATCH12
Definition: shader_sm4.c:388
@ WINED3D_SM5_INPUT_PT_PATCH27
Definition: shader_sm4.c:403
@ WINED3D_SM5_INPUT_PT_PATCH13
Definition: shader_sm4.c:389
@ WINED3D_SM5_INPUT_PT_PATCH17
Definition: shader_sm4.c:393
@ WINED3D_SM5_INPUT_PT_PATCH16
Definition: shader_sm4.c:392
@ WINED3D_SM5_INPUT_PT_PATCH15
Definition: shader_sm4.c:391
@ WINED3D_SM5_INPUT_PT_PATCH1
Definition: shader_sm4.c:377
@ WINED3D_SM5_INPUT_PT_PATCH26
Definition: shader_sm4.c:402
@ WINED3D_SM5_INPUT_PT_PATCH28
Definition: shader_sm4.c:404

◆ wined3d_sm4_instruction_modifier

Enumerator
WINED3D_SM4_MODIFIER_AOFFIMMI 
WINED3D_SM5_MODIFIER_RESOURCE_TYPE 
WINED3D_SM5_MODIFIER_DATA_TYPE 

Definition at line 317 of file shader_sm4.c.

318{
322};
@ WINED3D_SM4_MODIFIER_AOFFIMMI
Definition: shader_sm4.c:319
@ WINED3D_SM5_MODIFIER_DATA_TYPE
Definition: shader_sm4.c:321
@ WINED3D_SM5_MODIFIER_RESOURCE_TYPE
Definition: shader_sm4.c:320

◆ wined3d_sm4_opcode

Enumerator
WINED3D_SM4_OP_ADD 
WINED3D_SM4_OP_AND 
WINED3D_SM4_OP_BREAK 
WINED3D_SM4_OP_BREAKC 
WINED3D_SM4_OP_CASE 
WINED3D_SM4_OP_CONTINUE 
WINED3D_SM4_OP_CONTINUEC 
WINED3D_SM4_OP_CUT 
WINED3D_SM4_OP_DEFAULT 
WINED3D_SM4_OP_DERIV_RTX 
WINED3D_SM4_OP_DERIV_RTY 
WINED3D_SM4_OP_DISCARD 
WINED3D_SM4_OP_DIV 
WINED3D_SM4_OP_DP2 
WINED3D_SM4_OP_DP3 
WINED3D_SM4_OP_DP4 
WINED3D_SM4_OP_ELSE 
WINED3D_SM4_OP_EMIT 
WINED3D_SM4_OP_ENDIF 
WINED3D_SM4_OP_ENDLOOP 
WINED3D_SM4_OP_ENDSWITCH 
WINED3D_SM4_OP_EQ 
WINED3D_SM4_OP_EXP 
WINED3D_SM4_OP_FRC 
WINED3D_SM4_OP_FTOI 
WINED3D_SM4_OP_FTOU 
WINED3D_SM4_OP_GE 
WINED3D_SM4_OP_IADD 
WINED3D_SM4_OP_IF 
WINED3D_SM4_OP_IEQ 
WINED3D_SM4_OP_IGE 
WINED3D_SM4_OP_ILT 
WINED3D_SM4_OP_IMAD 
WINED3D_SM4_OP_IMAX 
WINED3D_SM4_OP_IMIN 
WINED3D_SM4_OP_IMUL 
WINED3D_SM4_OP_INE 
WINED3D_SM4_OP_INEG 
WINED3D_SM4_OP_ISHL 
WINED3D_SM4_OP_ISHR 
WINED3D_SM4_OP_ITOF 
WINED3D_SM4_OP_LABEL 
WINED3D_SM4_OP_LD 
WINED3D_SM4_OP_LD2DMS 
WINED3D_SM4_OP_LOG 
WINED3D_SM4_OP_LOOP 
WINED3D_SM4_OP_LT 
WINED3D_SM4_OP_MAD 
WINED3D_SM4_OP_MIN 
WINED3D_SM4_OP_MAX 
WINED3D_SM4_OP_SHADER_DATA 
WINED3D_SM4_OP_MOV 
WINED3D_SM4_OP_MOVC 
WINED3D_SM4_OP_MUL 
WINED3D_SM4_OP_NE 
WINED3D_SM4_OP_NOP 
WINED3D_SM4_OP_NOT 
WINED3D_SM4_OP_OR 
WINED3D_SM4_OP_RESINFO 
WINED3D_SM4_OP_RET 
WINED3D_SM4_OP_RETC 
WINED3D_SM4_OP_ROUND_NE 
WINED3D_SM4_OP_ROUND_NI 
WINED3D_SM4_OP_ROUND_PI 
WINED3D_SM4_OP_ROUND_Z 
WINED3D_SM4_OP_RSQ 
WINED3D_SM4_OP_SAMPLE 
WINED3D_SM4_OP_SAMPLE_C 
WINED3D_SM4_OP_SAMPLE_C_LZ 
WINED3D_SM4_OP_SAMPLE_LOD 
WINED3D_SM4_OP_SAMPLE_GRAD 
WINED3D_SM4_OP_SAMPLE_B 
WINED3D_SM4_OP_SQRT 
WINED3D_SM4_OP_SWITCH 
WINED3D_SM4_OP_SINCOS 
WINED3D_SM4_OP_UDIV 
WINED3D_SM4_OP_ULT 
WINED3D_SM4_OP_UGE 
WINED3D_SM4_OP_UMUL 
WINED3D_SM4_OP_UMAX 
WINED3D_SM4_OP_UMIN 
WINED3D_SM4_OP_USHR 
WINED3D_SM4_OP_UTOF 
WINED3D_SM4_OP_XOR 
WINED3D_SM4_OP_DCL_RESOURCE 
WINED3D_SM4_OP_DCL_CONSTANT_BUFFER 
WINED3D_SM4_OP_DCL_SAMPLER 
WINED3D_SM4_OP_DCL_INDEX_RANGE 
WINED3D_SM4_OP_DCL_OUTPUT_TOPOLOGY 
WINED3D_SM4_OP_DCL_INPUT_PRIMITIVE 
WINED3D_SM4_OP_DCL_VERTICES_OUT 
WINED3D_SM4_OP_DCL_INPUT 
WINED3D_SM4_OP_DCL_INPUT_SGV 
WINED3D_SM4_OP_DCL_INPUT_SIV 
WINED3D_SM4_OP_DCL_INPUT_PS 
WINED3D_SM4_OP_DCL_INPUT_PS_SGV 
WINED3D_SM4_OP_DCL_INPUT_PS_SIV 
WINED3D_SM4_OP_DCL_OUTPUT 
WINED3D_SM4_OP_DCL_OUTPUT_SIV 
WINED3D_SM4_OP_DCL_TEMPS 
WINED3D_SM4_OP_DCL_INDEXABLE_TEMP 
WINED3D_SM4_OP_DCL_GLOBAL_FLAGS 
WINED3D_SM4_OP_LOD 
WINED3D_SM4_OP_GATHER4 
WINED3D_SM4_OP_SAMPLE_POS 
WINED3D_SM4_OP_SAMPLE_INFO 
WINED3D_SM5_OP_HS_DECLS 
WINED3D_SM5_OP_HS_CONTROL_POINT_PHASE 
WINED3D_SM5_OP_HS_FORK_PHASE 
WINED3D_SM5_OP_HS_JOIN_PHASE 
WINED3D_SM5_OP_EMIT_STREAM 
WINED3D_SM5_OP_CUT_STREAM 
WINED3D_SM5_OP_FCALL 
WINED3D_SM5_OP_BUFINFO 
WINED3D_SM5_OP_DERIV_RTX_COARSE 
WINED3D_SM5_OP_DERIV_RTX_FINE 
WINED3D_SM5_OP_DERIV_RTY_COARSE 
WINED3D_SM5_OP_DERIV_RTY_FINE 
WINED3D_SM5_OP_GATHER4_C 
WINED3D_SM5_OP_GATHER4_PO 
WINED3D_SM5_OP_GATHER4_PO_C 
WINED3D_SM5_OP_RCP 
WINED3D_SM5_OP_F32TOF16 
WINED3D_SM5_OP_F16TOF32 
WINED3D_SM5_OP_COUNTBITS 
WINED3D_SM5_OP_FIRSTBIT_HI 
WINED3D_SM5_OP_FIRSTBIT_LO 
WINED3D_SM5_OP_FIRSTBIT_SHI 
WINED3D_SM5_OP_UBFE 
WINED3D_SM5_OP_IBFE 
WINED3D_SM5_OP_BFI 
WINED3D_SM5_OP_BFREV 
WINED3D_SM5_OP_SWAPC 
WINED3D_SM5_OP_DCL_STREAM 
WINED3D_SM5_OP_DCL_FUNCTION_BODY 
WINED3D_SM5_OP_DCL_FUNCTION_TABLE 
WINED3D_SM5_OP_DCL_INTERFACE 
WINED3D_SM5_OP_DCL_INPUT_CONTROL_POINT_COUNT 
WINED3D_SM5_OP_DCL_OUTPUT_CONTROL_POINT_COUNT 
WINED3D_SM5_OP_DCL_TESSELLATOR_DOMAIN 
WINED3D_SM5_OP_DCL_TESSELLATOR_PARTITIONING 
WINED3D_SM5_OP_DCL_TESSELLATOR_OUTPUT_PRIMITIVE 
WINED3D_SM5_OP_DCL_HS_MAX_TESSFACTOR 
WINED3D_SM5_OP_DCL_HS_FORK_PHASE_INSTANCE_COUNT 
WINED3D_SM5_OP_DCL_HS_JOIN_PHASE_INSTANCE_COUNT 
WINED3D_SM5_OP_DCL_THREAD_GROUP 
WINED3D_SM5_OP_DCL_UAV_TYPED 
WINED3D_SM5_OP_DCL_UAV_RAW 
WINED3D_SM5_OP_DCL_UAV_STRUCTURED 
WINED3D_SM5_OP_DCL_TGSM_RAW 
WINED3D_SM5_OP_DCL_TGSM_STRUCTURED 
WINED3D_SM5_OP_DCL_RESOURCE_RAW 
WINED3D_SM5_OP_DCL_RESOURCE_STRUCTURED 
WINED3D_SM5_OP_LD_UAV_TYPED 
WINED3D_SM5_OP_STORE_UAV_TYPED 
WINED3D_SM5_OP_LD_RAW 
WINED3D_SM5_OP_STORE_RAW 
WINED3D_SM5_OP_LD_STRUCTURED 
WINED3D_SM5_OP_STORE_STRUCTURED 
WINED3D_SM5_OP_ATOMIC_AND 
WINED3D_SM5_OP_ATOMIC_OR 
WINED3D_SM5_OP_ATOMIC_XOR 
WINED3D_SM5_OP_ATOMIC_CMP_STORE 
WINED3D_SM5_OP_ATOMIC_IADD 
WINED3D_SM5_OP_ATOMIC_IMAX 
WINED3D_SM5_OP_ATOMIC_IMIN 
WINED3D_SM5_OP_ATOMIC_UMAX 
WINED3D_SM5_OP_ATOMIC_UMIN 
WINED3D_SM5_OP_IMM_ATOMIC_ALLOC 
WINED3D_SM5_OP_IMM_ATOMIC_CONSUME 
WINED3D_SM5_OP_IMM_ATOMIC_IADD 
WINED3D_SM5_OP_IMM_ATOMIC_AND 
WINED3D_SM5_OP_IMM_ATOMIC_OR 
WINED3D_SM5_OP_IMM_ATOMIC_XOR 
WINED3D_SM5_OP_IMM_ATOMIC_EXCH 
WINED3D_SM5_OP_IMM_ATOMIC_CMP_EXCH 
WINED3D_SM5_OP_IMM_ATOMIC_IMAX 
WINED3D_SM5_OP_IMM_ATOMIC_IMIN 
WINED3D_SM5_OP_IMM_ATOMIC_UMAX 
WINED3D_SM5_OP_IMM_ATOMIC_UMIN 
WINED3D_SM5_OP_SYNC 
WINED3D_SM5_OP_EVAL_SAMPLE_INDEX 
WINED3D_SM5_OP_EVAL_CENTROID 
WINED3D_SM5_OP_DCL_GS_INSTANCES 

Definition at line 129 of file shader_sm4.c.

130{
131 WINED3D_SM4_OP_ADD = 0x00,
132 WINED3D_SM4_OP_AND = 0x01,
135 WINED3D_SM4_OP_CASE = 0x06,
138 WINED3D_SM4_OP_CUT = 0x09,
143 WINED3D_SM4_OP_DIV = 0x0e,
144 WINED3D_SM4_OP_DP2 = 0x0f,
145 WINED3D_SM4_OP_DP3 = 0x10,
146 WINED3D_SM4_OP_DP4 = 0x11,
147 WINED3D_SM4_OP_ELSE = 0x12,
148 WINED3D_SM4_OP_EMIT = 0x13,
152 WINED3D_SM4_OP_EQ = 0x18,
153 WINED3D_SM4_OP_EXP = 0x19,
154 WINED3D_SM4_OP_FRC = 0x1a,
155 WINED3D_SM4_OP_FTOI = 0x1b,
156 WINED3D_SM4_OP_FTOU = 0x1c,
157 WINED3D_SM4_OP_GE = 0x1d,
158 WINED3D_SM4_OP_IADD = 0x1e,
159 WINED3D_SM4_OP_IF = 0x1f,
160 WINED3D_SM4_OP_IEQ = 0x20,
161 WINED3D_SM4_OP_IGE = 0x21,
162 WINED3D_SM4_OP_ILT = 0x22,
163 WINED3D_SM4_OP_IMAD = 0x23,
164 WINED3D_SM4_OP_IMAX = 0x24,
165 WINED3D_SM4_OP_IMIN = 0x25,
166 WINED3D_SM4_OP_IMUL = 0x26,
167 WINED3D_SM4_OP_INE = 0x27,
168 WINED3D_SM4_OP_INEG = 0x28,
169 WINED3D_SM4_OP_ISHL = 0x29,
170 WINED3D_SM4_OP_ISHR = 0x2a,
171 WINED3D_SM4_OP_ITOF = 0x2b,
173 WINED3D_SM4_OP_LD = 0x2d,
175 WINED3D_SM4_OP_LOG = 0x2f,
176 WINED3D_SM4_OP_LOOP = 0x30,
177 WINED3D_SM4_OP_LT = 0x31,
178 WINED3D_SM4_OP_MAD = 0x32,
179 WINED3D_SM4_OP_MIN = 0x33,
180 WINED3D_SM4_OP_MAX = 0x34,
182 WINED3D_SM4_OP_MOV = 0x36,
183 WINED3D_SM4_OP_MOVC = 0x37,
184 WINED3D_SM4_OP_MUL = 0x38,
185 WINED3D_SM4_OP_NE = 0x39,
186 WINED3D_SM4_OP_NOP = 0x3a,
187 WINED3D_SM4_OP_NOT = 0x3b,
188 WINED3D_SM4_OP_OR = 0x3c,
190 WINED3D_SM4_OP_RET = 0x3e,
191 WINED3D_SM4_OP_RETC = 0x3f,
196 WINED3D_SM4_OP_RSQ = 0x44,
203 WINED3D_SM4_OP_SQRT = 0x4b,
206 WINED3D_SM4_OP_UDIV = 0x4e,
207 WINED3D_SM4_OP_ULT = 0x4f,
208 WINED3D_SM4_OP_UGE = 0x50,
209 WINED3D_SM4_OP_UMUL = 0x51,
210 WINED3D_SM4_OP_UMAX = 0x53,
211 WINED3D_SM4_OP_UMIN = 0x54,
212 WINED3D_SM4_OP_USHR = 0x55,
213 WINED3D_SM4_OP_UTOF = 0x56,
214 WINED3D_SM4_OP_XOR = 0x57,
233 WINED3D_SM4_OP_LOD = 0x6c,
252 WINED3D_SM5_OP_RCP = 0x81,
259 WINED3D_SM5_OP_UBFE = 0x8a,
260 WINED3D_SM5_OP_IBFE = 0x8b,
261 WINED3D_SM5_OP_BFI = 0x8c,
311 WINED3D_SM5_OP_SYNC = 0xbe,
315};
@ WINED3D_SM4_OP_DCL_INPUT_PRIMITIVE
Definition: shader_sm4.c:220
@ WINED3D_SM5_OP_RCP
Definition: shader_sm4.c:252
@ WINED3D_SM5_OP_DCL_UAV_STRUCTURED
Definition: shader_sm4.c:279
@ WINED3D_SM4_OP_ITOF
Definition: shader_sm4.c:171
@ WINED3D_SM4_OP_DCL_CONSTANT_BUFFER
Definition: shader_sm4.c:216
@ WINED3D_SM4_OP_BREAK
Definition: shader_sm4.c:133
@ WINED3D_SM5_OP_IMM_ATOMIC_EXCH
Definition: shader_sm4.c:305
@ WINED3D_SM4_OP_SAMPLE_C_LZ
Definition: shader_sm4.c:199
@ WINED3D_SM5_OP_HS_JOIN_PHASE
Definition: shader_sm4.c:240
@ WINED3D_SM4_OP_LT
Definition: shader_sm4.c:177
@ WINED3D_SM5_OP_DCL_OUTPUT_CONTROL_POINT_COUNT
Definition: shader_sm4.c:269
@ WINED3D_SM4_OP_MAX
Definition: shader_sm4.c:180
@ WINED3D_SM5_OP_DCL_HS_FORK_PHASE_INSTANCE_COUNT
Definition: shader_sm4.c:274
@ WINED3D_SM4_OP_UMUL
Definition: shader_sm4.c:209
@ WINED3D_SM5_OP_DCL_RESOURCE_RAW
Definition: shader_sm4.c:282
@ WINED3D_SM5_OP_SWAPC
Definition: shader_sm4.c:263
@ WINED3D_SM4_OP_EQ
Definition: shader_sm4.c:152
@ WINED3D_SM5_OP_DCL_TGSM_RAW
Definition: shader_sm4.c:280
@ WINED3D_SM4_OP_SAMPLE_B
Definition: shader_sm4.c:202
@ WINED3D_SM5_OP_EMIT_STREAM
Definition: shader_sm4.c:241
@ WINED3D_SM4_OP_LD
Definition: shader_sm4.c:173
@ WINED3D_SM4_OP_CONTINUE
Definition: shader_sm4.c:136
@ WINED3D_SM5_OP_BFI
Definition: shader_sm4.c:261
@ WINED3D_SM5_OP_IMM_ATOMIC_UMAX
Definition: shader_sm4.c:309
@ WINED3D_SM5_OP_ATOMIC_UMIN
Definition: shader_sm4.c:298
@ WINED3D_SM4_OP_SAMPLE_LOD
Definition: shader_sm4.c:200
@ WINED3D_SM4_OP_DERIV_RTY
Definition: shader_sm4.c:141
@ WINED3D_SM4_OP_ROUND_PI
Definition: shader_sm4.c:194
@ WINED3D_SM5_OP_DCL_INTERFACE
Definition: shader_sm4.c:267
@ WINED3D_SM5_OP_STORE_UAV_TYPED
Definition: shader_sm4.c:285
@ WINED3D_SM4_OP_SAMPLE_INFO
Definition: shader_sm4.c:236
@ WINED3D_SM5_OP_LD_RAW
Definition: shader_sm4.c:286
@ WINED3D_SM4_OP_IF
Definition: shader_sm4.c:159
@ WINED3D_SM4_OP_NOP
Definition: shader_sm4.c:186
@ WINED3D_SM4_OP_LD2DMS
Definition: shader_sm4.c:174
@ WINED3D_SM5_OP_F16TOF32
Definition: shader_sm4.c:254
@ WINED3D_SM4_OP_CUT
Definition: shader_sm4.c:138
@ WINED3D_SM4_OP_CASE
Definition: shader_sm4.c:135
@ WINED3D_SM5_OP_ATOMIC_UMAX
Definition: shader_sm4.c:297
@ WINED3D_SM4_OP_SINCOS
Definition: shader_sm4.c:205
@ WINED3D_SM5_OP_ATOMIC_XOR
Definition: shader_sm4.c:292
@ WINED3D_SM4_OP_RET
Definition: shader_sm4.c:190
@ WINED3D_SM5_OP_DCL_FUNCTION_TABLE
Definition: shader_sm4.c:266
@ WINED3D_SM5_OP_SYNC
Definition: shader_sm4.c:311
@ WINED3D_SM5_OP_EVAL_SAMPLE_INDEX
Definition: shader_sm4.c:312
@ WINED3D_SM4_OP_ISHR
Definition: shader_sm4.c:170
@ WINED3D_SM4_OP_DCL_INPUT_PS_SIV
Definition: shader_sm4.c:227
@ WINED3D_SM4_OP_IGE
Definition: shader_sm4.c:161
@ WINED3D_SM4_OP_DP3
Definition: shader_sm4.c:145
@ WINED3D_SM5_OP_UBFE
Definition: shader_sm4.c:259
@ WINED3D_SM4_OP_UMAX
Definition: shader_sm4.c:210
@ WINED3D_SM4_OP_SAMPLE_GRAD
Definition: shader_sm4.c:201
@ WINED3D_SM4_OP_INE
Definition: shader_sm4.c:167
@ WINED3D_SM5_OP_ATOMIC_OR
Definition: shader_sm4.c:291
@ WINED3D_SM4_OP_AND
Definition: shader_sm4.c:132
@ WINED3D_SM5_OP_GATHER4_PO
Definition: shader_sm4.c:250
@ WINED3D_SM4_OP_NE
Definition: shader_sm4.c:185
@ WINED3D_SM4_OP_INEG
Definition: shader_sm4.c:168
@ WINED3D_SM5_OP_GATHER4_PO_C
Definition: shader_sm4.c:251
@ WINED3D_SM5_OP_DERIV_RTX_FINE
Definition: shader_sm4.c:246
@ WINED3D_SM5_OP_DCL_RESOURCE_STRUCTURED
Definition: shader_sm4.c:283
@ WINED3D_SM5_OP_DERIV_RTX_COARSE
Definition: shader_sm4.c:245
@ WINED3D_SM4_OP_SAMPLE_C
Definition: shader_sm4.c:198
@ WINED3D_SM4_OP_ISHL
Definition: shader_sm4.c:169
@ WINED3D_SM4_OP_DERIV_RTX
Definition: shader_sm4.c:140
@ WINED3D_SM4_OP_FTOI
Definition: shader_sm4.c:155
@ WINED3D_SM5_OP_BUFINFO
Definition: shader_sm4.c:244
@ WINED3D_SM5_OP_IMM_ATOMIC_ALLOC
Definition: shader_sm4.c:299
@ WINED3D_SM4_OP_LOOP
Definition: shader_sm4.c:176
@ WINED3D_SM4_OP_RSQ
Definition: shader_sm4.c:196
@ WINED3D_SM4_OP_RESINFO
Definition: shader_sm4.c:189
@ WINED3D_SM5_OP_FIRSTBIT_SHI
Definition: shader_sm4.c:258
@ WINED3D_SM4_OP_SAMPLE
Definition: shader_sm4.c:197
@ WINED3D_SM5_OP_DCL_HS_JOIN_PHASE_INSTANCE_COUNT
Definition: shader_sm4.c:275
@ WINED3D_SM5_OP_IMM_ATOMIC_CONSUME
Definition: shader_sm4.c:300
@ WINED3D_SM4_OP_IADD
Definition: shader_sm4.c:158
@ WINED3D_SM5_OP_DCL_STREAM
Definition: shader_sm4.c:264
@ WINED3D_SM5_OP_STORE_STRUCTURED
Definition: shader_sm4.c:289
@ WINED3D_SM5_OP_STORE_RAW
Definition: shader_sm4.c:287
@ WINED3D_SM4_OP_FRC
Definition: shader_sm4.c:154
@ WINED3D_SM5_OP_F32TOF16
Definition: shader_sm4.c:253
@ WINED3D_SM4_OP_IMUL
Definition: shader_sm4.c:166
@ WINED3D_SM5_OP_IMM_ATOMIC_UMIN
Definition: shader_sm4.c:310
@ WINED3D_SM4_OP_ULT
Definition: shader_sm4.c:207
@ WINED3D_SM5_OP_GATHER4_C
Definition: shader_sm4.c:249
@ WINED3D_SM5_OP_EVAL_CENTROID
Definition: shader_sm4.c:313
@ WINED3D_SM4_OP_DCL_INPUT
Definition: shader_sm4.c:222
@ WINED3D_SM4_OP_LOD
Definition: shader_sm4.c:233
@ WINED3D_SM4_OP_DCL_OUTPUT
Definition: shader_sm4.c:228
@ WINED3D_SM5_OP_ATOMIC_CMP_STORE
Definition: shader_sm4.c:293
@ WINED3D_SM4_OP_MOVC
Definition: shader_sm4.c:183
@ WINED3D_SM4_OP_ROUND_NE
Definition: shader_sm4.c:192
@ WINED3D_SM4_OP_MOV
Definition: shader_sm4.c:182
@ WINED3D_SM4_OP_DIV
Definition: shader_sm4.c:143
@ WINED3D_SM4_OP_MUL
Definition: shader_sm4.c:184
@ WINED3D_SM4_OP_RETC
Definition: shader_sm4.c:191
@ WINED3D_SM5_OP_FIRSTBIT_HI
Definition: shader_sm4.c:256
@ WINED3D_SM4_OP_DCL_INPUT_SIV
Definition: shader_sm4.c:224
@ WINED3D_SM5_OP_HS_CONTROL_POINT_PHASE
Definition: shader_sm4.c:238
@ WINED3D_SM5_OP_ATOMIC_IMIN
Definition: shader_sm4.c:296
@ WINED3D_SM5_OP_IMM_ATOMIC_AND
Definition: shader_sm4.c:302
@ WINED3D_SM4_OP_DCL_INDEX_RANGE
Definition: shader_sm4.c:218
@ WINED3D_SM4_OP_GATHER4
Definition: shader_sm4.c:234
@ WINED3D_SM4_OP_GE
Definition: shader_sm4.c:157
@ WINED3D_SM4_OP_DCL_VERTICES_OUT
Definition: shader_sm4.c:221
@ WINED3D_SM5_OP_BFREV
Definition: shader_sm4.c:262
@ WINED3D_SM4_OP_SAMPLE_POS
Definition: shader_sm4.c:235
@ WINED3D_SM5_OP_DCL_TGSM_STRUCTURED
Definition: shader_sm4.c:281
@ WINED3D_SM4_OP_ENDLOOP
Definition: shader_sm4.c:150
@ WINED3D_SM4_OP_DCL_OUTPUT_TOPOLOGY
Definition: shader_sm4.c:219
@ WINED3D_SM5_OP_LD_STRUCTURED
Definition: shader_sm4.c:288
@ WINED3D_SM4_OP_UGE
Definition: shader_sm4.c:208
@ WINED3D_SM5_OP_DCL_UAV_RAW
Definition: shader_sm4.c:278
@ WINED3D_SM4_OP_EMIT
Definition: shader_sm4.c:148
@ WINED3D_SM5_OP_HS_FORK_PHASE
Definition: shader_sm4.c:239
@ WINED3D_SM4_OP_DCL_OUTPUT_SIV
Definition: shader_sm4.c:229
@ WINED3D_SM5_OP_DERIV_RTY_FINE
Definition: shader_sm4.c:248
@ WINED3D_SM4_OP_LABEL
Definition: shader_sm4.c:172
@ WINED3D_SM5_OP_DCL_TESSELLATOR_PARTITIONING
Definition: shader_sm4.c:271
@ WINED3D_SM4_OP_IMAX
Definition: shader_sm4.c:164
@ WINED3D_SM4_OP_ENDSWITCH
Definition: shader_sm4.c:151
@ WINED3D_SM4_OP_ELSE
Definition: shader_sm4.c:147
@ WINED3D_SM5_OP_IMM_ATOMIC_IADD
Definition: shader_sm4.c:301
@ WINED3D_SM5_OP_HS_DECLS
Definition: shader_sm4.c:237
@ WINED3D_SM4_OP_MAD
Definition: shader_sm4.c:178
@ WINED3D_SM4_OP_LOG
Definition: shader_sm4.c:175
@ WINED3D_SM5_OP_DCL_TESSELLATOR_DOMAIN
Definition: shader_sm4.c:270
@ WINED3D_SM5_OP_DCL_FUNCTION_BODY
Definition: shader_sm4.c:265
@ WINED3D_SM5_OP_CUT_STREAM
Definition: shader_sm4.c:242
@ WINED3D_SM4_OP_DCL_SAMPLER
Definition: shader_sm4.c:217
@ WINED3D_SM4_OP_UDIV
Definition: shader_sm4.c:206
@ WINED3D_SM4_OP_UMIN
Definition: shader_sm4.c:211
@ WINED3D_SM5_OP_IMM_ATOMIC_IMAX
Definition: shader_sm4.c:307
@ WINED3D_SM4_OP_DISCARD
Definition: shader_sm4.c:142
@ WINED3D_SM4_OP_DCL_INPUT_PS_SGV
Definition: shader_sm4.c:226
@ WINED3D_SM5_OP_IMM_ATOMIC_OR
Definition: shader_sm4.c:303
@ WINED3D_SM5_OP_DCL_HS_MAX_TESSFACTOR
Definition: shader_sm4.c:273
@ WINED3D_SM5_OP_LD_UAV_TYPED
Definition: shader_sm4.c:284
@ WINED3D_SM5_OP_DERIV_RTY_COARSE
Definition: shader_sm4.c:247
@ WINED3D_SM5_OP_DCL_GS_INSTANCES
Definition: shader_sm4.c:314
@ WINED3D_SM5_OP_IMM_ATOMIC_CMP_EXCH
Definition: shader_sm4.c:306
@ WINED3D_SM4_OP_DEFAULT
Definition: shader_sm4.c:139
@ WINED3D_SM4_OP_DCL_GLOBAL_FLAGS
Definition: shader_sm4.c:232
@ WINED3D_SM5_OP_COUNTBITS
Definition: shader_sm4.c:255
@ WINED3D_SM5_OP_FIRSTBIT_LO
Definition: shader_sm4.c:257
@ WINED3D_SM4_OP_ROUND_NI
Definition: shader_sm4.c:193
@ WINED3D_SM4_OP_DCL_TEMPS
Definition: shader_sm4.c:230
@ WINED3D_SM4_OP_XOR
Definition: shader_sm4.c:214
@ WINED3D_SM5_OP_ATOMIC_IMAX
Definition: shader_sm4.c:295
@ WINED3D_SM4_OP_CONTINUEC
Definition: shader_sm4.c:137
@ WINED3D_SM4_OP_EXP
Definition: shader_sm4.c:153
@ WINED3D_SM5_OP_FCALL
Definition: shader_sm4.c:243
@ WINED3D_SM5_OP_DCL_THREAD_GROUP
Definition: shader_sm4.c:276
@ WINED3D_SM5_OP_DCL_TESSELLATOR_OUTPUT_PRIMITIVE
Definition: shader_sm4.c:272
@ WINED3D_SM4_OP_DP2
Definition: shader_sm4.c:144
@ WINED3D_SM4_OP_SWITCH
Definition: shader_sm4.c:204
@ WINED3D_SM4_OP_USHR
Definition: shader_sm4.c:212
@ WINED3D_SM4_OP_DCL_INPUT_PS
Definition: shader_sm4.c:225
@ WINED3D_SM4_OP_DP4
Definition: shader_sm4.c:146
@ WINED3D_SM4_OP_IMIN
Definition: shader_sm4.c:165
@ WINED3D_SM4_OP_DCL_RESOURCE
Definition: shader_sm4.c:215
@ WINED3D_SM4_OP_MIN
Definition: shader_sm4.c:179
@ WINED3D_SM4_OP_DCL_INPUT_SGV
Definition: shader_sm4.c:223
@ WINED3D_SM5_OP_IMM_ATOMIC_IMIN
Definition: shader_sm4.c:308
@ WINED3D_SM4_OP_DCL_INDEXABLE_TEMP
Definition: shader_sm4.c:231
@ WINED3D_SM5_OP_DCL_INPUT_CONTROL_POINT_COUNT
Definition: shader_sm4.c:268
@ WINED3D_SM4_OP_ILT
Definition: shader_sm4.c:162
@ WINED3D_SM4_OP_NOT
Definition: shader_sm4.c:187
@ WINED3D_SM5_OP_ATOMIC_AND
Definition: shader_sm4.c:290
@ WINED3D_SM4_OP_SHADER_DATA
Definition: shader_sm4.c:181
@ WINED3D_SM4_OP_IEQ
Definition: shader_sm4.c:160
@ WINED3D_SM4_OP_FTOU
Definition: shader_sm4.c:156
@ WINED3D_SM4_OP_IMAD
Definition: shader_sm4.c:163
@ WINED3D_SM4_OP_UTOF
Definition: shader_sm4.c:213
@ WINED3D_SM4_OP_ROUND_Z
Definition: shader_sm4.c:195
@ WINED3D_SM4_OP_ENDIF
Definition: shader_sm4.c:149
@ WINED3D_SM4_OP_SQRT
Definition: shader_sm4.c:203
@ WINED3D_SM4_OP_ADD
Definition: shader_sm4.c:131
@ WINED3D_SM4_OP_OR
Definition: shader_sm4.c:188
@ WINED3D_SM5_OP_DCL_UAV_TYPED
Definition: shader_sm4.c:277
@ WINED3D_SM5_OP_ATOMIC_IADD
Definition: shader_sm4.c:294
@ WINED3D_SM5_OP_IBFE
Definition: shader_sm4.c:260
@ WINED3D_SM4_OP_BREAKC
Definition: shader_sm4.c:134
@ WINED3D_SM5_OP_IMM_ATOMIC_XOR
Definition: shader_sm4.c:304

◆ wined3d_sm4_output_primitive_type

Enumerator
WINED3D_SM4_OUTPUT_PT_POINTLIST 
WINED3D_SM4_OUTPUT_PT_LINESTRIP 
WINED3D_SM4_OUTPUT_PT_TRIANGLESTRIP 

Definition at line 363 of file shader_sm4.c.

364{
368};
@ WINED3D_SM4_OUTPUT_PT_LINESTRIP
Definition: shader_sm4.c:366
@ WINED3D_SM4_OUTPUT_PT_TRIANGLESTRIP
Definition: shader_sm4.c:367
@ WINED3D_SM4_OUTPUT_PT_POINTLIST
Definition: shader_sm4.c:365

◆ wined3d_sm4_register_type

Enumerator
WINED3D_SM4_RT_TEMP 
WINED3D_SM4_RT_INPUT 
WINED3D_SM4_RT_OUTPUT 
WINED3D_SM4_RT_INDEXABLE_TEMP 
WINED3D_SM4_RT_IMMCONST 
WINED3D_SM4_RT_SAMPLER 
WINED3D_SM4_RT_RESOURCE 
WINED3D_SM4_RT_CONSTBUFFER 
WINED3D_SM4_RT_IMMCONSTBUFFER 
WINED3D_SM4_RT_PRIMID 
WINED3D_SM4_RT_DEPTHOUT 
WINED3D_SM4_RT_NULL 
WINED3D_SM4_RT_RASTERIZER 
WINED3D_SM4_RT_OMASK 
WINED3D_SM5_RT_STREAM 
WINED3D_SM5_RT_FUNCTION_BODY 
WINED3D_SM5_RT_FUNCTION_POINTER 
WINED3D_SM5_RT_OUTPUT_CONTROL_POINT_ID 
WINED3D_SM5_RT_FORK_INSTANCE_ID 
WINED3D_SM5_RT_JOIN_INSTANCE_ID 
WINED3D_SM5_RT_INPUT_CONTROL_POINT 
WINED3D_SM5_RT_OUTPUT_CONTROL_POINT 
WINED3D_SM5_RT_PATCH_CONSTANT_DATA 
WINED3D_SM5_RT_DOMAIN_LOCATION 
WINED3D_SM5_RT_UAV 
WINED3D_SM5_RT_SHARED_MEMORY 
WINED3D_SM5_RT_THREAD_ID 
WINED3D_SM5_RT_THREAD_GROUP_ID 
WINED3D_SM5_RT_LOCAL_THREAD_ID 
WINED3D_SM5_RT_COVERAGE 
WINED3D_SM5_RT_LOCAL_THREAD_INDEX 
WINED3D_SM5_RT_GS_INSTANCE_ID 
WINED3D_SM5_RT_DEPTHOUT_GREATER_EQUAL 
WINED3D_SM5_RT_DEPTHOUT_LESS_EQUAL 
WINED3D_SM5_RT_OUTPUT_STENCIL_REF 

Definition at line 324 of file shader_sm4.c.

325{
326 WINED3D_SM4_RT_TEMP = 0x00,
337 WINED3D_SM4_RT_NULL = 0x0d,
350 WINED3D_SM5_RT_UAV = 0x1e,
361};
@ WINED3D_SM4_RT_TEMP
Definition: shader_sm4.c:326
@ WINED3D_SM5_RT_DEPTHOUT_LESS_EQUAL
Definition: shader_sm4.c:359
@ WINED3D_SM4_RT_INPUT
Definition: shader_sm4.c:327
@ WINED3D_SM5_RT_THREAD_ID
Definition: shader_sm4.c:352
@ WINED3D_SM5_RT_OUTPUT_STENCIL_REF
Definition: shader_sm4.c:360
@ WINED3D_SM5_RT_THREAD_GROUP_ID
Definition: shader_sm4.c:353
@ WINED3D_SM5_RT_FUNCTION_BODY
Definition: shader_sm4.c:341
@ WINED3D_SM4_RT_OMASK
Definition: shader_sm4.c:339
@ WINED3D_SM5_RT_PATCH_CONSTANT_DATA
Definition: shader_sm4.c:348
@ WINED3D_SM4_RT_SAMPLER
Definition: shader_sm4.c:331
@ WINED3D_SM5_RT_DEPTHOUT_GREATER_EQUAL
Definition: shader_sm4.c:358
@ WINED3D_SM5_RT_GS_INSTANCE_ID
Definition: shader_sm4.c:357
@ WINED3D_SM4_RT_NULL
Definition: shader_sm4.c:337
@ WINED3D_SM5_RT_FORK_INSTANCE_ID
Definition: shader_sm4.c:344
@ WINED3D_SM4_RT_CONSTBUFFER
Definition: shader_sm4.c:333
@ WINED3D_SM5_RT_JOIN_INSTANCE_ID
Definition: shader_sm4.c:345
@ WINED3D_SM4_RT_IMMCONST
Definition: shader_sm4.c:330
@ WINED3D_SM4_RT_PRIMID
Definition: shader_sm4.c:335
@ WINED3D_SM5_RT_INPUT_CONTROL_POINT
Definition: shader_sm4.c:346
@ WINED3D_SM5_RT_LOCAL_THREAD_INDEX
Definition: shader_sm4.c:356
@ WINED3D_SM4_RT_INDEXABLE_TEMP
Definition: shader_sm4.c:329
@ WINED3D_SM4_RT_OUTPUT
Definition: shader_sm4.c:328
@ WINED3D_SM5_RT_SHARED_MEMORY
Definition: shader_sm4.c:351
@ WINED3D_SM5_RT_LOCAL_THREAD_ID
Definition: shader_sm4.c:354
@ WINED3D_SM5_RT_OUTPUT_CONTROL_POINT
Definition: shader_sm4.c:347
@ WINED3D_SM5_RT_DOMAIN_LOCATION
Definition: shader_sm4.c:349
@ WINED3D_SM4_RT_RASTERIZER
Definition: shader_sm4.c:338
@ WINED3D_SM5_RT_STREAM
Definition: shader_sm4.c:340
@ WINED3D_SM5_RT_FUNCTION_POINTER
Definition: shader_sm4.c:342
@ WINED3D_SM5_RT_OUTPUT_CONTROL_POINT_ID
Definition: shader_sm4.c:343
@ WINED3D_SM5_RT_COVERAGE
Definition: shader_sm4.c:355
@ WINED3D_SM5_RT_UAV
Definition: shader_sm4.c:350
@ WINED3D_SM4_RT_IMMCONSTBUFFER
Definition: shader_sm4.c:334
@ WINED3D_SM4_RT_DEPTHOUT
Definition: shader_sm4.c:336
@ WINED3D_SM4_RT_RESOURCE
Definition: shader_sm4.c:332

◆ wined3d_sm4_resource_type

Enumerator
WINED3D_SM4_RESOURCE_BUFFER 
WINED3D_SM4_RESOURCE_TEXTURE_1D 
WINED3D_SM4_RESOURCE_TEXTURE_2D 
WINED3D_SM4_RESOURCE_TEXTURE_2DMS 
WINED3D_SM4_RESOURCE_TEXTURE_3D 
WINED3D_SM4_RESOURCE_TEXTURE_CUBE 
WINED3D_SM4_RESOURCE_TEXTURE_1DARRAY 
WINED3D_SM4_RESOURCE_TEXTURE_2DARRAY 
WINED3D_SM4_RESOURCE_TEXTURE_2DMSARRAY 
WINED3D_SM4_RESOURCE_TEXTURE_CUBEARRAY 

Definition at line 424 of file shader_sm4.c.

425{
436};
@ WINED3D_SM4_RESOURCE_TEXTURE_1DARRAY
Definition: shader_sm4.c:432
@ WINED3D_SM4_RESOURCE_TEXTURE_2DMS
Definition: shader_sm4.c:429
@ WINED3D_SM4_RESOURCE_TEXTURE_2DMSARRAY
Definition: shader_sm4.c:434
@ WINED3D_SM4_RESOURCE_TEXTURE_1D
Definition: shader_sm4.c:427
@ WINED3D_SM4_RESOURCE_TEXTURE_CUBE
Definition: shader_sm4.c:431
@ WINED3D_SM4_RESOURCE_TEXTURE_CUBEARRAY
Definition: shader_sm4.c:435
@ WINED3D_SM4_RESOURCE_TEXTURE_2DARRAY
Definition: shader_sm4.c:433
@ WINED3D_SM4_RESOURCE_BUFFER
Definition: shader_sm4.c:426
@ WINED3D_SM4_RESOURCE_TEXTURE_2D
Definition: shader_sm4.c:428
@ WINED3D_SM4_RESOURCE_TEXTURE_3D
Definition: shader_sm4.c:430

◆ wined3d_sm4_sampler_mode

Enumerator
WINED3D_SM4_SAMPLER_DEFAULT 
WINED3D_SM4_SAMPLER_COMPARISON 

Definition at line 447 of file shader_sm4.c.

448{
451};
@ WINED3D_SM4_SAMPLER_COMPARISON
Definition: shader_sm4.c:450
@ WINED3D_SM4_SAMPLER_DEFAULT
Definition: shader_sm4.c:449

◆ wined3d_sm4_shader_data_type

Enumerator
WINED3D_SM4_SHADER_DATA_IMMEDIATE_CONSTANT_BUFFER 
WINED3D_SM4_SHADER_DATA_MESSAGE 

Definition at line 453 of file shader_sm4.c.

454{
457};
@ WINED3D_SM4_SHADER_DATA_MESSAGE
Definition: shader_sm4.c:456
@ WINED3D_SM4_SHADER_DATA_IMMEDIATE_CONSTANT_BUFFER
Definition: shader_sm4.c:455

◆ wined3d_sm4_swizzle_type

Enumerator
WINED3D_SM4_SWIZZLE_NONE 
WINED3D_SM4_SWIZZLE_VEC4 
WINED3D_SM4_SWIZZLE_SCALAR 

Definition at line 411 of file shader_sm4.c.

412{
416};
@ WINED3D_SM4_SWIZZLE_NONE
Definition: shader_sm4.c:413
@ WINED3D_SM4_SWIZZLE_SCALAR
Definition: shader_sm4.c:415
@ WINED3D_SM4_SWIZZLE_VEC4
Definition: shader_sm4.c:414

Function Documentation

◆ get_opcode_info()

static const struct wined3d_sm4_opcode_info * get_opcode_info ( enum wined3d_sm4_opcode  opcode)
static

Definition at line 1192 of file shader_sm4.c.

1193{
1194 unsigned int i;
1195
1196 for (i = 0; i < ARRAY_SIZE(opcode_table); ++i)
1197 {
1198 if (opcode == opcode_table[i].opcode) return &opcode_table[i];
1199 }
1200
1201 return NULL;
1202}
#define ARRAY_SIZE(A)
Definition: main.h:20
#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
static const struct wined3d_sm4_opcode_info opcode_table[]
Definition: shader_sm4.c:912

Referenced by shader_sm4_read_instruction().

◆ get_src_param()

static struct wined3d_shader_src_param * get_src_param ( struct wined3d_sm4_data *  priv)
static

Definition at line 1369 of file shader_sm4.c.

1370{
1372 struct list *elem;
1373
1374 if (!list_empty(&priv->src_free))
1375 {
1376 elem = list_head(&priv->src_free);
1378 }
1379 else
1380 {
1381 if (!(e = malloc(sizeof(*e))))
1382 return NULL;
1383 elem = &e->entry;
1384 }
1385
1386 list_add_tail(&priv->src, elem);
1388 return &e->param;
1389}
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static int list_empty(struct list_entry *head)
Definition: list.h:58
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
Definition: list.h:39
#define malloc
Definition: debug_ros.c:4
uint32_t entry
Definition: isohybrid.c:63
#define e
Definition: ke_i.h:82
static size_t elem
Definition: string.c:71
struct list entry
Definition: wpp.c:51
Definition: list.h:15
Definition: shader_sm4.c:460
struct list src_free
Definition: shader_sm4.c:474
struct list src
Definition: shader_sm4.c:475
#define LIST_ENTRY(type)
Definition: queue.h:175

Referenced by shader_sm4_read_reg_idx().

◆ map_data_type()

static enum wined3d_data_type map_data_type ( char  t)
static

Definition at line 1229 of file shader_sm4.c.

1230{
1231 switch (t)
1232 {
1233 case 'f':
1234 return WINED3D_DATA_FLOAT;
1235 case 'i':
1236 return WINED3D_DATA_INT;
1237 case 'u':
1238 return WINED3D_DATA_UINT;
1239 case 'O':
1240 return WINED3D_DATA_OPAQUE;
1241 case 'R':
1242 return WINED3D_DATA_RESOURCE;
1243 case 'S':
1244 return WINED3D_DATA_SAMPLER;
1245 case 'U':
1246 return WINED3D_DATA_UAV;
1247 default:
1248 ERR("Invalid data type '%c'.\n", t);
1249 return WINED3D_DATA_FLOAT;
1250 }
1251}
#define ERR(fmt,...)
Definition: precomp.h:57
GLdouble GLdouble t
Definition: gl.h:2047
@ WINED3D_DATA_UINT
@ WINED3D_DATA_INT
@ WINED3D_DATA_UAV
@ WINED3D_DATA_SAMPLER
@ WINED3D_DATA_RESOURCE
@ WINED3D_DATA_FLOAT
@ WINED3D_DATA_OPAQUE

Referenced by shader_sm4_read_instruction().

◆ map_register()

static void map_register ( const struct wined3d_sm4_data *  priv,
struct wined3d_shader_register *  reg 
)
static

Definition at line 1204 of file shader_sm4.c.

1205{
1206 switch (priv->shader_version.type)
1207 {
1209 if (reg->type == WINED3DSPR_OUTPUT)
1210 {
1211 unsigned int reg_idx = reg->idx[0].offset;
1212
1213 if (reg_idx >= ARRAY_SIZE(priv->output_map))
1214 {
1215 ERR("Invalid output index %u.\n", reg_idx);
1216 break;
1217 }
1218
1219 reg->type = WINED3DSPR_COLOROUT;
1220 reg->idx[0].offset = priv->output_map[reg_idx];
1221 }
1222 break;
1223
1224 default:
1225 break;
1226 }
1227}
static int reg
Definition: i386-dis.c:1290
unsigned int output_map[MAX_REG_OUTPUT]
Definition: shader_sm4.c:470
struct wined3d_shader_version shader_version
Definition: shader_sm4.c:467
@ WINED3D_SHADER_TYPE_PIXEL
Definition: wined3d.h:841
@ WINED3DSPR_COLOROUT
@ WINED3DSPR_OUTPUT

Referenced by shader_sm4_read_param().

◆ read_dword()

static unsigned int read_dword ( const char **  ptr)
static

Definition at line 1859 of file shader_sm4.c.

1860{
1861 unsigned int ret;
1862 memcpy(&ret, *ptr, sizeof(ret));
1863 *ptr += sizeof(ret);
1864 return ret;
1865}
return ret
Definition: mutex.c:147
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static PVOID ptr
Definition: dispmode.c:27

Referenced by shader_parse_signature(), and skip_dword_unknown().

◆ require_space()

static BOOL require_space ( size_t  offset,
size_t  count,
size_t  size,
size_t  data_size 
)
static

Definition at line 1867 of file shader_sm4.c.

1868{
1869 return !count || (data_size - offset) / count >= size;
1870}
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLsizeiptr size
Definition: glext.h:5919
GLintptr offset
Definition: glext.h:5920

Referenced by shader_parse_signature().

◆ shader_dxbc_process_section()

static HRESULT shader_dxbc_process_section ( struct wined3d_shader *  shader,
unsigned int  max_version,
enum vkd3d_shader_source_type *  source_type,
const struct vkd3d_shader_dxbc_section_desc *  section 
)
static

Definition at line 1972 of file shader_sm4.c.

1974{
1975 unsigned int data_size = section->data.size;
1976 const void *data = section->data.code;
1977 uint32_t tag = section->tag;
1978 HRESULT hr;
1979
1980 switch (tag)
1981 {
1982 case TAG_ISGN:
1983 case TAG_ISG1:
1984 if (max_version < 4)
1985 {
1986 TRACE("Skipping shader input signature.\n");
1987 break;
1988 }
1989 if (shader->input_signature.elements)
1990 {
1991 FIXME("Multiple input signatures.\n");
1992 break;
1993 }
1994 if (FAILED(hr = shader_parse_signature(tag, data, data_size, &shader->input_signature)))
1995 return hr;
1996 break;
1997
1998 case TAG_OSGN:
1999 case TAG_OSG1:
2000 case TAG_OSG5:
2001 if (max_version < 4)
2002 {
2003 TRACE("Skipping shader output signature.\n");
2004 break;
2005 }
2006 if (shader->output_signature.elements)
2007 {
2008 FIXME("Multiple output signatures.\n");
2009 break;
2010 }
2011 if (FAILED(hr = shader_parse_signature(tag, data, data_size, &shader->output_signature)))
2012 return hr;
2013 break;
2014
2015 case TAG_PCSG:
2016 case TAG_PSG1:
2017 if (shader->patch_constant_signature.elements)
2018 {
2019 FIXME("Multiple patch constant signatures.\n");
2020 break;
2021 }
2022 if (FAILED(hr = shader_parse_signature(tag, data, data_size, &shader->patch_constant_signature)))
2023 return hr;
2024 break;
2025
2026 case TAG_SHDR:
2027 case TAG_SHEX:
2028 if (max_version < 4)
2029 {
2030 TRACE("Skipping SM4+ shader.\n");
2031 break;
2032 }
2033 if (shader->function)
2034 FIXME("Multiple shader code chunks.\n");
2035 shader->function = data;
2036 shader->functionLength = data_size;
2037 *source_type = VKD3D_SHADER_SOURCE_DXBC_TPF;
2038 break;
2039
2040 case TAG_AON9:
2041 if (max_version < 4)
2042 {
2043 const struct aon9_header *header = data;
2044 unsigned int unknown_dword_count;
2045 const char *byte_code;
2046
2047 if (data_size < sizeof(*header))
2048 {
2049 WARN("Invalid Aon9 data size %#x.\n", data_size);
2050 return E_FAIL;
2051 }
2052 byte_code = data;
2053 byte_code += header->byte_code_offset;
2054 unknown_dword_count = (header->byte_code_offset - sizeof(*header)) / sizeof(DWORD);
2055
2056 if (data_size - 2 * sizeof(DWORD) < header->byte_code_offset)
2057 {
2058 WARN("Invalid byte code offset %#x (size %#x).\n", header->byte_code_offset, data_size);
2059 return E_FAIL;
2060 }
2061 FIXME("Skipping %u unknown DWORDs.\n", unknown_dword_count);
2062
2063 if (shader->function)
2064 FIXME("Multiple shader code chunks.\n");
2065 shader->function = (const DWORD *)byte_code;
2066 shader->functionLength = data_size - header->byte_code_offset;
2067 *source_type = VKD3D_SHADER_SOURCE_D3D_BYTECODE;
2068 TRACE("Feature level 9 shader version 0%08x, 0%08lx.\n",
2069 header->shader_version, *shader->function);
2070 }
2071 else
2072 {
2073 TRACE("Skipping feature level 9 shader code.\n");
2074 }
2075 break;
2076
2077 default:
2078 TRACE("Skipping chunk %s.\n", debugstr_fourcc(tag));
2079 break;
2080 }
2081
2082 return S_OK;
2083}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define E_FAIL
Definition: ddrawi.h:102
HRESULT hr
Definition: delayimp.cpp:582
UINT32 uint32_t
Definition: types.h:75
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLuint shader
Definition: glext.h:6030
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
static __inline const char * debugstr_fourcc(unsigned int cc)
Definition: debug.h:397
#define TAG_ISG1
Definition: shader_sm4.c:1841
#define TAG_SHEX
Definition: shader_sm4.c:1849
static HRESULT shader_parse_signature(DWORD tag, const char *data, unsigned int data_size, struct wined3d_shader_signature *s)
Definition: shader_sm4.c:1899
#define TAG_SHDR
Definition: shader_sm4.c:1848
#define TAG_AON9
Definition: shader_sm4.c:1840
#define TAG_ISGN
Definition: shader_sm4.c:1842
#define TAG_OSGN
Definition: shader_sm4.c:1845
#define TAG_OSG1
Definition: shader_sm4.c:1843
#define TAG_PSG1
Definition: shader_sm4.c:1847
#define TAG_OSG5
Definition: shader_sm4.c:1844
#define TAG_PCSG
Definition: shader_sm4.c:1846
#define TRACE(s)
Definition: solgame.cpp:4
Definition: parser.c:56
Definition: ecma_167.h:138
@ VKD3D_SHADER_SOURCE_D3D_BYTECODE
@ VKD3D_SHADER_SOURCE_DXBC_TPF

Referenced by wined3d_shader_extract_from_dxbc().

◆ shader_get_string()

static const char * shader_get_string ( const char *  data,
size_t  data_size,
unsigned int  offset 
)
static

Definition at line 1885 of file shader_sm4.c.

1886{
1887 if (offset >= data_size)
1888 {
1889 WARN("Invalid offset %#x (data size %#lx).\n", offset, (long)data_size);
1890 return NULL;
1891 }
1892
1893 if (!memchr( data + offset, 0, data_size - offset ))
1894 return NULL;
1895
1896 return data + offset;
1897}
#define memchr(s, c, n)
Definition: mkisofs.h:875

Referenced by shader_parse_signature().

◆ shader_parse_signature()

static HRESULT shader_parse_signature ( DWORD  tag,
const char *  data,
unsigned int  data_size,
struct wined3d_shader_signature *  s 
)
static

Definition at line 1899 of file shader_sm4.c.

1901{
1903 bool has_stream_index, has_min_precision;
1904 const char *ptr = data;
1905 unsigned int i;
1906 unsigned int count;
1907
1908 if (!require_space(0, 2, sizeof(DWORD), data_size))
1909 {
1910 WARN("Invalid data size %#x.\n", data_size);
1911 return E_INVALIDARG;
1912 }
1913
1914 count = read_dword(&ptr);
1915 TRACE("%u elements.\n", count);
1916
1917 skip_dword_unknown(&ptr, 1); /* It seems to always be 0x00000008. */
1918
1919 if (!require_space(ptr - data, count, 6 * sizeof(DWORD), data_size))
1920 {
1921 WARN("Invalid count %#x (data size %#x).\n", count, data_size);
1922 return E_INVALIDARG;
1923 }
1924
1925 if (!(e = calloc(count, sizeof(*e))))
1926 {
1927 ERR("Failed to allocate input signature memory.\n");
1928 return E_OUTOFMEMORY;
1929 }
1930
1931 has_min_precision = tag == TAG_OSG1 || tag == TAG_PSG1 || tag == TAG_ISG1;
1932 has_stream_index = tag == TAG_OSG5 || has_min_precision;
1933
1934 for (i = 0; i < count; ++i)
1935 {
1936 unsigned int name_offset;
1937
1938 if (has_stream_index)
1939 e[i].stream_idx = read_dword(&ptr);
1940 else
1941 e[i].stream_idx = 0;
1942 name_offset = read_dword(&ptr);
1943 if (!(e[i].semantic_name = shader_get_string(data, data_size, name_offset)))
1944 {
1945 WARN("Invalid name offset %#x (data size %#x).\n", name_offset, data_size);
1946 free(e);
1947 return E_INVALIDARG;
1948 }
1949 e[i].semantic_idx = read_dword(&ptr);
1950 e[i].sysval_semantic = read_dword(&ptr);
1951 e[i].component_type = read_dword(&ptr);
1952 e[i].register_idx = read_dword(&ptr);
1953 e[i].mask = read_dword(&ptr);
1954
1955 if (has_min_precision)
1956 e[i].min_precision = read_dword(&ptr);
1957 else
1958 e[i].min_precision = 0;
1959
1960 TRACE("Stream: %u, semantic: %s, semantic idx: %u, sysval_semantic %#x, "
1961 "type %u, register idx: %u, use_mask %#x, input_mask %#x, min_precision %u.\n",
1963 e[i].component_type, e[i].register_idx, (e[i].mask >> 8) & 0xff, e[i].mask & 0xff, e[i].min_precision);
1964 }
1965
1966 s->elements = e;
1967 s->element_count = count;
1968
1969 return S_OK;
1970}
component_type
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define free
Definition: debug_ros.c:5
GLdouble s
Definition: gl.h:2039
GLenum GLint GLuint mask
Definition: glext.h:6028
#define debugstr_a
Definition: kernel32.h:31
#define calloc
Definition: rosglue.h:14
static unsigned int read_dword(const char **ptr)
Definition: shader_sm4.c:1859
static BOOL require_space(size_t offset, size_t count, size_t size, size_t data_size)
Definition: shader_sm4.c:1867
static void skip_dword_unknown(const char **ptr, unsigned int count)
Definition: shader_sm4.c:1872
static const char * shader_get_string(const char *data, size_t data_size, unsigned int offset)
Definition: shader_sm4.c:1885
enum wined3d_sysval_semantic sysval_semantic

Referenced by shader_dxbc_process_section().

◆ shader_sm4_free()

static void shader_sm4_free ( void *  data)
static

Definition at line 1356 of file shader_sm4.c.

1357{
1358 struct wined3d_shader_src_param_entry *e1, *e2;
1359 struct wined3d_sm4_data *priv = data;
1360
1361 list_move_head(&priv->src_free, &priv->src);
1363 {
1364 free(e1);
1365 }
1366 free(priv);
1367}
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:242
__WINE_SERVER_LIST_INLINE void list_move_head(struct list *dst, struct list *src)
Definition: list.h:196

◆ shader_sm4_init()

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

Definition at line 1290 of file shader_sm4.c.

1292{
1293 unsigned int version_token, token_count;
1294 struct wined3d_sm4_data *priv;
1295 unsigned int i;
1296
1297 if (byte_code_size / sizeof(*byte_code) < 2)
1298 {
1299 WARN("Invalid byte code size %lu.\n", (long)byte_code_size);
1300 return NULL;
1301 }
1302
1303 version_token = byte_code[0];
1304 TRACE("Version: 0x%08x.\n", version_token);
1305 token_count = byte_code[1];
1306 TRACE("Token count: %u.\n", token_count);
1307
1308 if (token_count < 2 || byte_code_size / sizeof(*byte_code) < token_count)
1309 {
1310 WARN("Invalid token count %u.\n", token_count);
1311 return NULL;
1312 }
1313
1314 if (!(priv = malloc(sizeof(*priv))))
1315 {
1316 ERR("Failed to allocate private data\n");
1317 return NULL;
1318 }
1319
1320 priv->start = &byte_code[2];
1321 priv->end = &byte_code[token_count];
1322
1323 priv->shader_version.type = wined3d_get_sm4_shader_type(byte_code, byte_code_size);
1325 {
1326 free(priv);
1327 return NULL;
1328 }
1329
1330 priv->shader_version.major = WINED3D_SM4_VERSION_MAJOR(version_token);
1331 priv->shader_version.minor = WINED3D_SM4_VERSION_MINOR(version_token);
1332
1333 memset(priv->output_map, 0xff, sizeof(priv->output_map));
1334 for (i = 0; i < output_signature->element_count; ++i)
1335 {
1336 struct wined3d_shader_signature_element *e = &output_signature->elements[i];
1337
1339 && stricmp(e->semantic_name, "SV_TARGET"))
1340 continue;
1341 if (e->register_idx >= ARRAY_SIZE(priv->output_map))
1342 {
1343 WARN("Invalid output index %u.\n", e->register_idx);
1344 continue;
1345 }
1346
1347 priv->output_map[e->register_idx] = e->semantic_idx;
1348 }
1349
1350 list_init(&priv->src_free);
1351 list_init(&priv->src);
1352
1353 return priv;
1354}
static void list_init(struct list_entry *head)
Definition: list.h:51
#define stricmp(_String1, _String2)
Definition: compat.h:24
#define memset(x, y, z)
Definition: compat.h:39
static enum wined3d_shader_type wined3d_get_sm4_shader_type(const DWORD *byte_code, size_t byte_code_size)
Definition: shader_sm4.c:1253
#define WINED3D_SM4_VERSION_MINOR(version)
Definition: shader_sm4.c:120
#define WINED3D_SM4_VERSION_MAJOR(version)
Definition: shader_sm4.c:119
struct wined3d_shader_signature_element * elements
const DWORD * start
Definition: shader_sm4.c:468
const DWORD * end
Definition: shader_sm4.c:468
@ WINED3D_SHADER_TYPE_INVALID
Definition: wined3d.h:850

◆ shader_sm4_is_end()

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

Definition at line 1825 of file shader_sm4.c.

1826{
1827 struct wined3d_sm4_data *priv = data;
1828 return *ptr == priv->end;
1829}

◆ shader_sm4_read_conditional_op()

static void shader_sm4_read_conditional_op ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 542 of file shader_sm4.c.

545{
546 shader_sm4_read_src_param(priv, &tokens, &tokens[token_count], WINED3D_DATA_UINT, &priv->src_param[0]);
547 ins->flags = (opcode_token & WINED3D_SM4_CONDITIONAL_NZ) ?
549}
static BOOL shader_sm4_read_src_param(struct wined3d_sm4_data *priv, const DWORD **ptr, const DWORD *end, enum wined3d_data_type data_type, struct wined3d_shader_src_param *src_param)
Definition: shader_sm4.c:1559
#define WINED3D_SM4_CONDITIONAL_NZ
Definition: shader_sm4.c:127
struct wined3d_shader_src_param src_param[5]
Definition: shader_sm4.c:472
@ WINED3D_SHADER_CONDITIONAL_OP_NZ
@ WINED3D_SHADER_CONDITIONAL_OP_Z

◆ shader_sm4_read_dcl_constant_buffer()

static void shader_sm4_read_dcl_constant_buffer ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 628 of file shader_sm4.c.

631{
632 shader_sm4_read_src_param(priv, &tokens, &tokens[token_count], WINED3D_DATA_FLOAT, &ins->declaration.src);
633 if (opcode_token & WINED3D_SM4_INDEX_TYPE_MASK)
635}
#define WINED3D_SM4_INDEX_TYPE_MASK
Definition: shader_sm4.c:59
const struct wined3d_shader_src_param * src
union wined3d_shader_instruction::@348 declaration
#define WINED3DSI_INDEXED_DYNAMIC

◆ shader_sm4_read_dcl_global_flags()

static void shader_sm4_read_dcl_global_flags ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 747 of file shader_sm4.c.

750{
752}
#define WINED3D_SM4_GLOBAL_FLAGS_MASK
Definition: shader_sm4.c:71
#define WINED3D_SM4_GLOBAL_FLAGS_SHIFT
Definition: shader_sm4.c:70

◆ shader_sm4_read_dcl_index_range()

static void shader_sm4_read_dcl_index_range ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 647 of file shader_sm4.c.

650{
651 shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], WINED3D_DATA_OPAQUE,
652 &ins->declaration.index_range.first_register);
653 ins->declaration.index_range.last_register = *tokens;
654}
static BOOL shader_sm4_read_dst_param(struct wined3d_sm4_data *priv, const DWORD **ptr, const DWORD *end, enum wined3d_data_type data_type, struct wined3d_shader_dst_param *dst_param)
Definition: shader_sm4.c:1610
struct wined3d_shader_index_range index_range

◆ shader_sm4_read_dcl_indexable_temp()

static void shader_sm4_read_dcl_indexable_temp ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 738 of file shader_sm4.c.

741{
742 ins->declaration.indexable_temp.register_idx = *tokens++;
743 ins->declaration.indexable_temp.register_size = *tokens++;
744 ins->declaration.indexable_temp.component_count = *tokens;
745}
struct wined3d_shader_indexable_temp indexable_temp

◆ shader_sm4_read_dcl_input_primitive()

static void shader_sm4_read_dcl_input_primitive ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 672 of file shader_sm4.c.

675{
676 enum wined3d_sm4_input_primitive_type primitive_type;
677
678 primitive_type = (opcode_token & WINED3D_SM4_PRIMITIVE_TYPE_MASK) >> WINED3D_SM4_PRIMITIVE_TYPE_SHIFT;
679 if (WINED3D_SM5_INPUT_PT_PATCH1 <= primitive_type && primitive_type <= WINED3D_SM5_INPUT_PT_PATCH32)
680 {
682 ins->declaration.primitive_type.patch_vertex_count = primitive_type - WINED3D_SM5_INPUT_PT_PATCH1 + 1;
683 }
684 else if (primitive_type >= ARRAY_SIZE(input_primitive_type_table))
685 {
687 }
688 else
689 {
690 ins->declaration.primitive_type.type = input_primitive_type_table[primitive_type];
691 }
692
694 FIXME("Unhandled input primitive type %#x.\n", primitive_type);
695}
wined3d_sm4_input_primitive_type
Definition: shader_sm4.c:371
#define WINED3D_SM4_PRIMITIVE_TYPE_MASK
Definition: shader_sm4.c:56
#define WINED3D_SM4_PRIMITIVE_TYPE_SHIFT
Definition: shader_sm4.c:55
static enum wined3d_primitive_type input_primitive_type_table[]
Definition: shader_sm4.c:500
struct wined3d_shader_primitive_type primitive_type
@ WINED3D_PT_UNDEFINED
Definition: wined3d.h:75
@ WINED3D_PT_PATCH
Definition: wined3d.h:86

◆ shader_sm4_read_dcl_input_ps()

static void shader_sm4_read_dcl_input_ps ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 720 of file shader_sm4.c.

723{
725 shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], WINED3D_DATA_FLOAT, &ins->declaration.dst);
726}
#define WINED3D_SM4_INTERPOLATION_MODE_SHIFT
Definition: shader_sm4.c:67
#define WINED3D_SM4_INTERPOLATION_MODE_MASK
Definition: shader_sm4.c:68
const struct wined3d_shader_dst_param * dst

◆ shader_sm4_read_dcl_input_ps_siv()

static void shader_sm4_read_dcl_input_ps_siv ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 728 of file shader_sm4.c.

731{
733 shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], WINED3D_DATA_FLOAT,
735 ins->declaration.register_semantic.sysval_semantic = *tokens;
736}
struct wined3d_shader_register_semantic register_semantic

◆ shader_sm4_read_dcl_output_topology()

static void shader_sm4_read_dcl_output_topology ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 656 of file shader_sm4.c.

659{
660 enum wined3d_sm4_output_primitive_type primitive_type;
661
662 primitive_type = (opcode_token & WINED3D_SM4_PRIMITIVE_TYPE_MASK) >> WINED3D_SM4_PRIMITIVE_TYPE_SHIFT;
663 if (primitive_type >= ARRAY_SIZE(output_primitive_type_table))
665 else
666 ins->declaration.primitive_type.type = output_primitive_type_table[primitive_type];
667
669 FIXME("Unhandled output primitive type %#x.\n", primitive_type);
670}
if(dx< 0)
Definition: linetemp.h:194
wined3d_sm4_output_primitive_type
Definition: shader_sm4.c:364
static enum wined3d_primitive_type output_primitive_type_table[]
Definition: shader_sm4.c:490

◆ shader_sm4_read_dcl_resource()

static void shader_sm4_read_dcl_resource ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 580 of file shader_sm4.c.

583{
584 enum wined3d_sm4_resource_type resource_type;
586 enum wined3d_data_type reg_data_type;
588
589 resource_type = (opcode_token & WINED3D_SM4_RESOURCE_TYPE_MASK) >> WINED3D_SM4_RESOURCE_TYPE_SHIFT;
590 if (!resource_type || (resource_type >= ARRAY_SIZE(resource_type_table)))
591 {
592 FIXME("Unhandled resource type %#x.\n", resource_type);
594 }
595 else
596 {
597 ins->declaration.semantic.resource_type = resource_type_table[resource_type];
598 }
599
602 {
604 }
605
607 shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], reg_data_type, &ins->declaration.semantic.reg);
608
609 components = *tokens++;
610 if ((components & 0xfff0) != (components & 0xf) * 0x1110)
611 FIXME("Components (%#x) have different data types.\n", components);
612 data_type = components & 0xf;
613
615 {
616 FIXME("Unhandled data type %#x.\n", data_type);
617 ins->declaration.semantic.resource_data_type = WINED3D_DATA_FLOAT;
618 }
619 else
620 {
621 ins->declaration.semantic.resource_data_type = data_type_table[data_type];
622 }
623
624 if (reg_data_type == WINED3D_DATA_UAV)
626}
GLenum GLenum GLuint components
Definition: glext.h:9620
enum wined3d_data_type data_type
Definition: glsl_shader.c:71
#define WINED3D_SM5_UAV_FLAGS_MASK
Definition: shader_sm4.c:83
wined3d_sm4_resource_type
Definition: shader_sm4.c:425
#define WINED3D_SM4_RESOURCE_SAMPLE_COUNT_SHIFT
Definition: shader_sm4.c:52
#define WINED3D_SM4_RESOURCE_TYPE_SHIFT
Definition: shader_sm4.c:49
wined3d_sm4_data_type
Definition: shader_sm4.c:439
static enum wined3d_shader_resource_type resource_type_table[]
Definition: shader_sm4.c:512
#define WINED3D_SM5_UAV_FLAGS_SHIFT
Definition: shader_sm4.c:82
#define WINED3D_SM4_RESOURCE_TYPE_MASK
Definition: shader_sm4.c:50
static enum wined3d_data_type data_type_table[]
Definition: shader_sm4.c:527
#define WINED3D_SM4_RESOURCE_SAMPLE_COUNT_MASK
Definition: shader_sm4.c:53
struct wined3d_shader_semantic semantic
wined3d_data_type
@ WINED3D_SHADER_RESOURCE_NONE
@ WINED3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY
@ WINED3D_SHADER_RESOURCE_TEXTURE_2DMS

◆ shader_sm4_read_dcl_sampler()

static void shader_sm4_read_dcl_sampler ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 637 of file shader_sm4.c.

640{
643 FIXME("Unhandled sampler mode %#x.\n", ins->flags);
644 shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], WINED3D_DATA_SAMPLER, &ins->declaration.dst);
645}
#define WINED3D_SM4_SAMPLER_MODE_MASK
Definition: shader_sm4.c:62
#define WINED3D_SM4_SAMPLER_MODE_SHIFT
Definition: shader_sm4.c:61

◆ shader_sm4_read_declaration_count()

static void shader_sm4_read_declaration_count ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 697 of file shader_sm4.c.

700{
701 ins->declaration.count = *tokens;
702}

◆ shader_sm4_read_declaration_dst()

static void shader_sm4_read_declaration_dst ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 704 of file shader_sm4.c.

707{
708 shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], WINED3D_DATA_FLOAT, &ins->declaration.dst);
709}

◆ shader_sm4_read_declaration_register_semantic()

static void shader_sm4_read_declaration_register_semantic ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 711 of file shader_sm4.c.

714{
715 shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], WINED3D_DATA_FLOAT,
717 ins->declaration.register_semantic.sysval_semantic = *tokens;
718}

◆ shader_sm4_read_dst_param()

static BOOL shader_sm4_read_dst_param ( struct wined3d_sm4_data *  priv,
const DWORD **  ptr,
const DWORD *  end,
enum wined3d_data_type  data_type,
struct wined3d_shader_dst_param *  dst_param 
)
static

Definition at line 1610 of file shader_sm4.c.

1612{
1613 enum wined3d_shader_src_modifier modifier;
1614 DWORD token;
1615
1616 if (*ptr >= end)
1617 {
1618 WARN("Invalid ptr %p >= end %p.\n", *ptr, end);
1619 return FALSE;
1620 }
1621 token = **ptr;
1622
1623 if (!shader_sm4_read_param(priv, ptr, end, data_type, &dst_param->reg, &modifier))
1624 {
1625 ERR("Failed to read parameter.\n");
1626 return FALSE;
1627 }
1628
1629 if (modifier != WINED3DSPSM_NONE)
1630 {
1631 ERR("Invalid source modifier %#x on destination register.\n", modifier);
1632 return FALSE;
1633 }
1634
1636 dst_param->modifiers = 0;
1637 dst_param->shift = 0;
1638
1639 return TRUE;
1640}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
GLuint GLuint end
Definition: gl.h:1545
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
#define WINED3D_SM4_WRITEMASK_SHIFT
Definition: shader_sm4.c:113
static BOOL shader_sm4_read_param(struct wined3d_sm4_data *priv, const DWORD **ptr, const DWORD *end, enum wined3d_data_type data_type, struct wined3d_shader_register *param, enum wined3d_shader_src_modifier *modifier)
Definition: shader_sm4.c:1427
#define WINED3D_SM4_WRITEMASK_MASK
Definition: shader_sm4.c:114
struct wined3d_shader_register reg
wined3d_shader_src_modifier
@ WINED3DSPSM_NONE

Referenced by shader_sm4_read_dcl_index_range(), shader_sm4_read_dcl_input_ps(), shader_sm4_read_dcl_input_ps_siv(), shader_sm4_read_dcl_resource(), shader_sm4_read_dcl_sampler(), shader_sm4_read_declaration_dst(), shader_sm4_read_declaration_register_semantic(), shader_sm4_read_instruction(), shader_sm5_read_dcl_resource_raw(), shader_sm5_read_dcl_resource_structured(), shader_sm5_read_dcl_tgsm_raw(), shader_sm5_read_dcl_tgsm_structured(), shader_sm5_read_dcl_uav_raw(), and shader_sm5_read_dcl_uav_structured().

◆ shader_sm4_read_header()

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

Definition at line 1391 of file shader_sm4.c.

1392{
1393 struct wined3d_sm4_data *priv = data;
1394
1395 *ptr = priv->start;
1397}

◆ shader_sm4_read_instruction()

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

Definition at line 1701 of file shader_sm4.c.

1702{
1703 const struct wined3d_sm4_opcode_info *opcode_info;
1704 uint32_t opcode_token, previous_token;
1705 struct wined3d_sm4_data *priv = data;
1706 unsigned int opcode;
1707 unsigned int i, len;
1708 SIZE_T remaining;
1709 const DWORD *p;
1710 DWORD precise;
1711
1712 list_move_head(&priv->src_free, &priv->src);
1713
1714 if (*ptr >= priv->end)
1715 {
1716 WARN("End of byte-code, failed to read opcode.\n");
1717 goto fail;
1718 }
1719 remaining = priv->end - *ptr;
1720
1721 opcode_token = *(*ptr)++;
1722 opcode = opcode_token & WINED3D_SM4_OPCODE_MASK;
1723
1725 if (!len)
1726 {
1727 if (remaining < 2)
1728 {
1729 WARN("End of byte-code, failed to read length token.\n");
1730 goto fail;
1731 }
1732 len = **ptr;
1733 }
1734 if (!len || remaining < len)
1735 {
1736 WARN("Read invalid length %u (remaining %Iu).\n", len, remaining);
1737 goto fail;
1738 }
1739 --len;
1740
1741 if (TRACE_ON(d3d_bytecode))
1742 {
1743 TRACE_(d3d_bytecode)("[ %08x ", opcode_token);
1744 for (i = 0; i < len; ++i)
1745 {
1746 TRACE_(d3d_bytecode)("%08lx ", (*ptr)[i]);
1747 }
1748 TRACE_(d3d_bytecode)("]\n");
1749 }
1750
1751 if (!(opcode_info = get_opcode_info(opcode)))
1752 {
1753 FIXME("Unrecognized opcode %#x, opcode_token 0x%08x.\n", opcode, opcode_token);
1755 *ptr += len;
1756 return;
1757 }
1758
1759 ins->handler_idx = opcode_info->handler_idx;
1760 ins->flags = 0;
1761 ins->coissue = 0;
1762 ins->predicate = NULL;
1763 ins->dst_count = strlen(opcode_info->dst_info);
1764 ins->dst = priv->dst_param;
1765 ins->src_count = strlen(opcode_info->src_info);
1766 ins->src = priv->src_param;
1769 memset(&ins->texel_offset, 0, sizeof(ins->texel_offset));
1770
1771 p = *ptr;
1772 *ptr += len;
1773
1774 if (opcode_info->read_opcode_func)
1775 {
1776 opcode_info->read_opcode_func(ins, opcode, opcode_token, p, len, priv);
1777 }
1778 else
1779 {
1780 enum wined3d_shader_dst_modifier instruction_dst_modifier = WINED3DSPDM_NONE;
1781
1782 previous_token = opcode_token;
1783 while (previous_token & WINED3D_SM4_INSTRUCTION_MODIFIER && p != *ptr)
1784 shader_sm4_read_instruction_modifier(previous_token = *p++, ins);
1785
1788 {
1789 ins->flags &= ~WINED3D_SM4_INSTRUCTION_FLAG_SATURATE;
1790 instruction_dst_modifier = WINED3DSPDM_SATURATE;
1791 }
1792 precise = (opcode_token & WINED3D_SM5_PRECISE_MASK) >> WINED3D_SM5_PRECISE_SHIFT;
1793 ins->flags |= precise << WINED3DSI_PRECISE_SHIFT;
1794
1795 for (i = 0; i < ins->dst_count; ++i)
1796 {
1797 if (!(shader_sm4_read_dst_param(priv, &p, *ptr, map_data_type(opcode_info->dst_info[i]),
1798 &priv->dst_param[i])))
1799 {
1801 return;
1802 }
1803 priv->dst_param[i].modifiers |= instruction_dst_modifier;
1804 }
1805
1806 for (i = 0; i < ins->src_count; ++i)
1807 {
1808 if (!(shader_sm4_read_src_param(priv, &p, *ptr, map_data_type(opcode_info->src_info[i]),
1809 &priv->src_param[i])))
1810 {
1812 return;
1813 }
1814 }
1815 }
1816
1817 return;
1818
1819fail:
1820 *ptr = priv->end;
1822 return;
1823}
#define TRACE_(x)
Definition: compat.h:76
#define TRACE_ON(x)
Definition: compat.h:75
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
GLfloat GLfloat p
Definition: glext.h:8902
GLenum GLsizei len
Definition: glext.h:6722
static void shader_sm4_read_instruction_modifier(uint32_t modifier, struct wined3d_shader_instruction *ins)
Definition: shader_sm4.c:1642
static const struct wined3d_sm4_opcode_info * get_opcode_info(enum wined3d_sm4_opcode opcode)
Definition: shader_sm4.c:1192
#define WINED3D_SM4_INSTRUCTION_FLAGS_SHIFT
Definition: shader_sm4.c:46
#define WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT
Definition: shader_sm4.c:43
#define WINED3D_SM4_INSTRUCTION_FLAGS_MASK
Definition: shader_sm4.c:47
#define WINED3D_SM4_OPCODE_MASK
Definition: shader_sm4.c:91
#define WINED3D_SM4_INSTRUCTION_FLAG_SATURATE
Definition: shader_sm4.c:125
#define WINED3D_SM4_INSTRUCTION_LENGTH_MASK
Definition: shader_sm4.c:44
static enum wined3d_data_type map_data_type(char t)
Definition: shader_sm4.c:1229
#define WINED3D_SM4_INSTRUCTION_MODIFIER
Definition: shader_sm4.c:26
#define WINED3D_SM5_PRECISE_SHIFT
Definition: shader_sm4.c:73
#define WINED3D_SM5_PRECISE_MASK
Definition: shader_sm4.c:74
enum wined3d_data_type resource_data_type
enum wined3d_shader_resource_type resource_type
const struct wined3d_shader_src_param * predicate
enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx
struct wined3d_shader_texel_offset texel_offset
struct wined3d_shader_dst_param dst_param[2]
Definition: shader_sm4.c:473
const char * dst_info
Definition: shader_sm4.c:483
const char * src_info
Definition: shader_sm4.c:484
enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx
Definition: shader_sm4.c:482
void(* read_opcode_func)(struct wined3d_shader_instruction *ins, DWORD opcode, DWORD opcode_token, const DWORD *tokens, unsigned int token_count, struct wined3d_sm4_data *priv)
Definition: shader_sm4.c:485
ULONG_PTR SIZE_T
Definition: typedefs.h:80
@ WINED3DSIH_TABLE_SIZE
wined3d_shader_dst_modifier
@ WINED3DSPDM_SATURATE
@ WINED3DSPDM_NONE
#define WINED3DSI_PRECISE_SHIFT

◆ shader_sm4_read_instruction_modifier()

static void shader_sm4_read_instruction_modifier ( uint32_t  modifier,
struct wined3d_shader_instruction *  ins 
)
static

Definition at line 1642 of file shader_sm4.c.

1643{
1644 enum wined3d_sm4_instruction_modifier modifier_type = modifier & WINED3D_SM4_MODIFIER_MASK;
1645
1646 switch (modifier_type)
1647 {
1649 {
1650 static const DWORD recognized_bits = WINED3D_SM4_INSTRUCTION_MODIFIER
1655
1656 /* Bit fields are used for sign extension. */
1657 struct
1658 {
1659 int u : 4;
1660 int v : 4;
1661 int w : 4;
1662 } aoffimmi;
1663
1664 if (modifier & ~recognized_bits)
1665 FIXME("Unhandled instruction modifier %#x.\n", modifier);
1666
1667 aoffimmi.u = (modifier & WINED3D_SM4_AOFFIMMI_U_MASK) >> WINED3D_SM4_AOFFIMMI_U_SHIFT;
1668 aoffimmi.v = (modifier & WINED3D_SM4_AOFFIMMI_V_MASK) >> WINED3D_SM4_AOFFIMMI_V_SHIFT;
1669 aoffimmi.w = (modifier & WINED3D_SM4_AOFFIMMI_W_MASK) >> WINED3D_SM4_AOFFIMMI_W_SHIFT;
1670 ins->texel_offset.u = aoffimmi.u;
1671 ins->texel_offset.v = aoffimmi.v;
1672 ins->texel_offset.w = aoffimmi.w;
1673 break;
1674 }
1675
1677 {
1680
1681 if ((components & 0xfff0) != (components & 0xf) * 0x1110)
1682 FIXME("Components (%#x) have different data types.\n", components);
1684 break;
1685 }
1686
1688 {
1689 enum wined3d_sm4_resource_type resource_type
1691
1692 ins->resource_type = resource_type_table[resource_type];
1693 break;
1694 }
1695
1696 default:
1697 FIXME("Unhandled instruction modifier %#x.\n", modifier);
1698 }
1699}
const GLdouble * v
Definition: gl.h:2040
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
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_SM5_MODIFIER_DATA_TYPE_SHIFT
Definition: shader_sm4.c:30
wined3d_sm4_instruction_modifier
Definition: shader_sm4.c:318
#define WINED3D_SM4_MODIFIER_MASK
Definition: shader_sm4.c:28
#define WINED3D_SM5_MODIFIER_RESOURCE_TYPE_MASK
Definition: shader_sm4.c:34
#define WINED3D_SM4_AOFFIMMI_V_SHIFT
Definition: shader_sm4.c:38
#define WINED3D_SM5_MODIFIER_DATA_TYPE_MASK
Definition: shader_sm4.c:31
#define WINED3D_SM4_AOFFIMMI_U_SHIFT
Definition: shader_sm4.c:36
#define WINED3D_SM4_AOFFIMMI_V_MASK
Definition: shader_sm4.c:39
#define WINED3D_SM5_MODIFIER_RESOURCE_TYPE_SHIFT
Definition: shader_sm4.c:33
#define WINED3D_SM4_AOFFIMMI_U_MASK
Definition: shader_sm4.c:37
#define WINED3D_SM4_AOFFIMMI_W_MASK
Definition: shader_sm4.c:41
#define WINED3D_SM4_AOFFIMMI_W_SHIFT
Definition: shader_sm4.c:40

Referenced by shader_sm4_read_instruction().

◆ shader_sm4_read_param()

static BOOL shader_sm4_read_param ( struct wined3d_sm4_data *  priv,
const DWORD **  ptr,
const DWORD *  end,
enum wined3d_data_type  data_type,
struct wined3d_shader_register *  param,
enum wined3d_shader_src_modifier *  modifier 
)
static

Definition at line 1427 of file shader_sm4.c.

1430{
1431 enum wined3d_sm4_register_type register_type;
1433
1434 if (*ptr >= end)
1435 {
1436 WARN("Invalid ptr %p >= end %p.\n", *ptr, end);
1437 return FALSE;
1438 }
1439 token = *(*ptr)++;
1440
1442 if (register_type >= ARRAY_SIZE(register_type_table)
1443 || register_type_table[register_type] == ~0u)
1444 {
1445 FIXME("Unhandled register type %#x.\n", register_type);
1446 param->type = WINED3DSPR_TEMP;
1447 }
1448 else
1449 {
1450 param->type = register_type_table[register_type];
1451 }
1452 param->data_type = data_type;
1453
1455 {
1456 unsigned int m;
1457
1458 if (*ptr >= end)
1459 {
1460 WARN("Invalid ptr %p >= end %p.\n", *ptr, end);
1461 return FALSE;
1462 }
1463 m = *(*ptr)++;
1464
1465 switch (m)
1466 {
1467 case 0x41:
1468 *modifier = WINED3DSPSM_NEG;
1469 break;
1470
1471 case 0x81:
1472 *modifier = WINED3DSPSM_ABS;
1473 break;
1474
1475 case 0xc1:
1476 *modifier = WINED3DSPSM_ABSNEG;
1477 break;
1478
1479 default:
1480 FIXME("Skipping modifier 0x%08x.\n", m);
1481 case 0x01:
1482 *modifier = WINED3DSPSM_NONE;
1483 break;
1484 }
1485 }
1486 else
1487 {
1488 *modifier = WINED3DSPSM_NONE;
1489 }
1490
1492
1493 if (order < 1)
1494 param->idx[0].offset = ~0U;
1495 else
1496 {
1498 if (!(shader_sm4_read_reg_idx(priv, ptr, end, addressing, &param->idx[0])))
1499 {
1500 ERR("Failed to read register index.\n");
1501 return FALSE;
1502 }
1503 }
1504
1505 if (order < 2)
1506 param->idx[1].offset = ~0U;
1507 else
1508 {
1510 if (!(shader_sm4_read_reg_idx(priv, ptr, end, addressing, &param->idx[1])))
1511 {
1512 ERR("Failed to read register index.\n");
1513 return FALSE;
1514 }
1515 }
1516
1517 if (order > 2)
1518 FIXME("Unhandled order %u.\n", order);
1519
1520 if (register_type == WINED3D_SM4_RT_IMMCONST)
1521 {
1523
1524 switch (dimension)
1525 {
1527 param->immconst_type = WINED3D_IMMCONST_SCALAR;
1528 if (end - *ptr < 1)
1529 {
1530 WARN("Invalid ptr %p, end %p.\n", *ptr, end);
1531 return FALSE;
1532 }
1533 memcpy(param->u.immconst_data, *ptr, 1 * sizeof(DWORD));
1534 *ptr += 1;
1535 break;
1536
1538 param->immconst_type = WINED3D_IMMCONST_VEC4;
1539 if (end - *ptr < 4)
1540 {
1541 WARN("Invalid ptr %p, end %p.\n", *ptr, end);
1542 return FALSE;
1543 }
1544 memcpy(param->u.immconst_data, *ptr, 4 * sizeof(DWORD));
1545 *ptr += 4;
1546 break;
1547
1548 default:
1549 FIXME("Unhandled dimension %#x.\n", dimension);
1550 break;
1551 }
1552 }
1553
1554 map_register(priv, param);
1555
1556 return TRUE;
1557}
#define U(x)
Definition: wordpad.c:45
GLfloat param
Definition: glext.h:5796
GLuint GLdouble GLdouble GLint GLint order
Definition: glext.h:11194
const GLfloat * m
Definition: glext.h:10848
#define WINED3D_SM4_DIMENSION_SHIFT
Definition: shader_sm4.c:110
#define WINED3D_SM4_REGISTER_TYPE_MASK
Definition: shader_sm4.c:105
static void map_register(const struct wined3d_sm4_data *priv, struct wined3d_shader_register *reg)
Definition: shader_sm4.c:1204
#define WINED3D_SM4_ADDRESSING_SHIFT1
Definition: shader_sm4.c:95
#define WINED3D_SM4_REGISTER_ORDER_MASK
Definition: shader_sm4.c:102
#define WINED3D_SM4_REGISTER_ORDER_SHIFT
Definition: shader_sm4.c:101
#define WINED3D_SM4_DIMENSION_MASK
Definition: shader_sm4.c:111
static BOOL shader_sm4_read_reg_idx(struct wined3d_sm4_data *priv, const DWORD **ptr, const DWORD *end, DWORD addressing, struct wined3d_shader_register_index *reg_idx)
Definition: shader_sm4.c:1399
wined3d_sm4_register_type
Definition: shader_sm4.c:325
#define WINED3D_SM4_REGISTER_MODIFIER
Definition: shader_sm4.c:93
#define WINED3D_SM4_ADDRESSING_SHIFT0
Definition: shader_sm4.c:98
#define WINED3D_SM4_ADDRESSING_MASK0
Definition: shader_sm4.c:99
#define WINED3D_SM4_REGISTER_TYPE_SHIFT
Definition: shader_sm4.c:104
#define WINED3D_SM4_ADDRESSING_MASK1
Definition: shader_sm4.c:96
static enum wined3d_shader_register_type register_type_table[]
Definition: shader_sm4.c:1146
wined3d_sm4_dimension
Definition: shader_sm4.c:419
@ WINED3DSPSM_ABSNEG
@ WINED3DSPSM_ABS
@ WINED3DSPSM_NEG
@ WINED3DSPR_TEMP
@ WINED3D_IMMCONST_VEC4
@ WINED3D_IMMCONST_SCALAR

Referenced by shader_sm4_read_dst_param(), and shader_sm4_read_src_param().

◆ shader_sm4_read_reg_idx()

static BOOL shader_sm4_read_reg_idx ( struct wined3d_sm4_data *  priv,
const DWORD **  ptr,
const DWORD *  end,
DWORD  addressing,
struct wined3d_shader_register_index *  reg_idx 
)
static

Definition at line 1399 of file shader_sm4.c.

1401{
1402 if (addressing & WINED3D_SM4_ADDRESSING_RELATIVE)
1403 {
1404 struct wined3d_shader_src_param *rel_addr = get_src_param(priv);
1405
1406 if (!(reg_idx->rel_addr = rel_addr))
1407 {
1408 ERR("Failed to get src param for relative addressing.\n");
1409 return FALSE;
1410 }
1411
1412 if (addressing & WINED3D_SM4_ADDRESSING_OFFSET)
1413 reg_idx->offset = *(*ptr)++;
1414 else
1415 reg_idx->offset = 0;
1417 }
1418 else
1419 {
1420 reg_idx->rel_addr = NULL;
1421 reg_idx->offset = *(*ptr)++;
1422 }
1423
1424 return TRUE;
1425}
#define WINED3D_SM4_ADDRESSING_RELATIVE
Definition: shader_sm4.c:122
static struct wined3d_shader_src_param * get_src_param(struct wined3d_sm4_data *priv)
Definition: shader_sm4.c:1369
#define WINED3D_SM4_ADDRESSING_OFFSET
Definition: shader_sm4.c:123
const struct wined3d_shader_src_param * rel_addr

Referenced by shader_sm4_read_param().

◆ shader_sm4_read_shader_data()

static void shader_sm4_read_shader_data ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 551 of file shader_sm4.c.

554{
556 unsigned int icb_size;
557
560 {
561 FIXME("Ignoring shader data type %#x.\n", type);
563 return;
564 }
565
566 ++tokens;
567 icb_size = token_count - 1;
568 if (icb_size % 4 || icb_size > MAX_IMMEDIATE_CONSTANT_BUFFER_SIZE)
569 {
570 FIXME("Unexpected immediate constant buffer size %u.\n", icb_size);
572 return;
573 }
574
575 priv->icb.vec4_count = icb_size / 4;
576 memcpy(priv->icb.data, tokens, sizeof(*tokens) * icb_size);
577 ins->declaration.icb = &priv->icb;
578}
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define WINED3D_SM4_SHADER_DATA_TYPE_SHIFT
Definition: shader_sm4.c:64
wined3d_sm4_shader_data_type
Definition: shader_sm4.c:454
#define WINED3D_SM4_SHADER_DATA_TYPE_MASK
Definition: shader_sm4.c:65
const struct wined3d_shader_immediate_constant_buffer * icb
struct wined3d_shader_immediate_constant_buffer icb
Definition: shader_sm4.c:476
@ WINED3DSIH_NOP
#define MAX_IMMEDIATE_CONSTANT_BUFFER_SIZE

◆ shader_sm4_read_src_param()

static BOOL shader_sm4_read_src_param ( struct wined3d_sm4_data *  priv,
const DWORD **  ptr,
const DWORD *  end,
enum wined3d_data_type  data_type,
struct wined3d_shader_src_param *  src_param 
)
static

Definition at line 1559 of file shader_sm4.c.

1561{
1562 DWORD token;
1563
1564 if (*ptr >= end)
1565 {
1566 WARN("Invalid ptr %p >= end %p.\n", *ptr, end);
1567 return FALSE;
1568 }
1569 token = **ptr;
1570
1571 if (!shader_sm4_read_param(priv, ptr, end, data_type, &src_param->reg, &src_param->modifiers))
1572 {
1573 ERR("Failed to read parameter.\n");
1574 return FALSE;
1575 }
1576
1577 if (src_param->reg.type == WINED3DSPR_IMMCONST)
1578 {
1579 src_param->swizzle = WINED3DSP_NOSWIZZLE;
1580 }
1581 else
1582 {
1583 enum wined3d_sm4_swizzle_type swizzle_type =
1585
1586 switch (swizzle_type)
1587 {
1589 src_param->swizzle = WINED3DSP_NOSWIZZLE;
1590 break;
1591
1594 src_param->swizzle = (src_param->swizzle & 0x3) * 0x55;
1595 break;
1596
1599 break;
1600
1601 default:
1602 FIXME("Unhandled swizzle type %#x.\n", swizzle_type);
1603 break;
1604 }
1605 }
1606
1607 return TRUE;
1608}
#define WINED3D_SM4_SWIZZLE_MASK
Definition: shader_sm4.c:117
#define WINED3D_SM4_SWIZZLE_SHIFT
Definition: shader_sm4.c:116
wined3d_sm4_swizzle_type
Definition: shader_sm4.c:412
#define WINED3D_SM4_SWIZZLE_TYPE_MASK
Definition: shader_sm4.c:108
#define WINED3D_SM4_SWIZZLE_TYPE_SHIFT
Definition: shader_sm4.c:107
enum wined3d_shader_src_modifier modifiers
struct wined3d_shader_register reg
@ WINED3DSPR_IMMCONST
#define WINED3DSP_NOSWIZZLE

Referenced by shader_sm4_read_conditional_op(), shader_sm4_read_dcl_constant_buffer(), shader_sm4_read_instruction(), shader_sm4_read_reg_idx(), and shader_sm5_read_fcall().

◆ shader_sm5_read_control_point_count()

static void shader_sm5_read_control_point_count ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 788 of file shader_sm4.c.

791{
794}
#define WINED3D_SM5_CONTROL_POINT_COUNT_SHIFT
Definition: shader_sm4.c:76
#define WINED3D_SM5_CONTROL_POINT_COUNT_MASK
Definition: shader_sm4.c:77

◆ shader_sm5_read_dcl_function_body()

static void shader_sm5_read_dcl_function_body ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 762 of file shader_sm4.c.

765{
766 ins->declaration.index = *tokens;
767}

◆ shader_sm5_read_dcl_function_table()

static void shader_sm5_read_dcl_function_table ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 769 of file shader_sm4.c.

772{
773 ins->declaration.index = *tokens++;
774 FIXME("Ignoring set of function bodies (count %lu).\n", *tokens);
775}

◆ shader_sm5_read_dcl_hs_max_tessfactor()

static void shader_sm5_read_dcl_hs_max_tessfactor ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 820 of file shader_sm4.c.

823{
824 ins->declaration.max_tessellation_factor = *(float *)tokens;
825}

◆ shader_sm5_read_dcl_interface()

static void shader_sm5_read_dcl_interface ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 777 of file shader_sm4.c.

780{
781 ins->declaration.fp.index = *tokens++;
782 ins->declaration.fp.body_count = *tokens++;
783 ins->declaration.fp.array_size = *tokens >> WINED3D_SM5_FP_ARRAY_SIZE_SHIFT;
784 ins->declaration.fp.table_count = *tokens++ & WINED3D_SM5_FP_TABLE_COUNT_MASK;
785 FIXME("Ignoring set of function tables (count %u).\n", ins->declaration.fp.table_count);
786}
#define WINED3D_SM5_FP_TABLE_COUNT_MASK
Definition: shader_sm4.c:80
#define WINED3D_SM5_FP_ARRAY_SIZE_SHIFT
Definition: shader_sm4.c:79
struct wined3d_shader_function_table_pointer fp

◆ shader_sm5_read_dcl_resource_raw()

static void shader_sm5_read_dcl_resource_raw ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 889 of file shader_sm4.c.

892{
893 shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], WINED3D_DATA_RESOURCE, &ins->declaration.dst);
894}

◆ shader_sm5_read_dcl_resource_structured()

static void shader_sm5_read_dcl_resource_structured ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 878 of file shader_sm4.c.

881{
882 shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], WINED3D_DATA_RESOURCE,
884 ins->declaration.structured_resource.byte_stride = *tokens;
885 if (ins->declaration.structured_resource.byte_stride % 4)
886 FIXME("Byte stride %u is not multiple of 4.\n", ins->declaration.structured_resource.byte_stride);
887}
struct wined3d_shader_structured_resource structured_resource

◆ shader_sm5_read_dcl_tessellator_domain()

static void shader_sm5_read_dcl_tessellator_domain ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 796 of file shader_sm4.c.

799{
802}
#define WINED3D_SM5_TESSELLATOR_SHIFT
Definition: shader_sm4.c:88
#define WINED3D_SM5_TESSELLATOR_MASK
Definition: shader_sm4.c:89
enum wined3d_tessellator_domain tessellator_domain

◆ shader_sm5_read_dcl_tessellator_output_primitive()

static void shader_sm5_read_dcl_tessellator_output_primitive ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 812 of file shader_sm4.c.

815{
818}
enum wined3d_tessellator_output_primitive tessellator_output_primitive

◆ shader_sm5_read_dcl_tessellator_partitioning()

static void shader_sm5_read_dcl_tessellator_partitioning ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 804 of file shader_sm4.c.

807{
810}
enum wined3d_tessellator_partitioning tessellator_partitioning

◆ shader_sm5_read_dcl_tgsm_raw()

static void shader_sm5_read_dcl_tgsm_raw ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 856 of file shader_sm4.c.

859{
860 shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], WINED3D_DATA_FLOAT, &ins->declaration.tgsm_raw.reg);
861 ins->declaration.tgsm_raw.byte_count = *tokens;
862 if (ins->declaration.tgsm_raw.byte_count % 4)
863 FIXME("Byte count %u is not multiple of 4.\n", ins->declaration.tgsm_raw.byte_count);
864}
struct wined3d_shader_tgsm_raw tgsm_raw

◆ shader_sm5_read_dcl_tgsm_structured()

static void shader_sm5_read_dcl_tgsm_structured ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 866 of file shader_sm4.c.

869{
870 shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], WINED3D_DATA_FLOAT,
871 &ins->declaration.tgsm_structured.reg);
872 ins->declaration.tgsm_structured.byte_stride = *tokens++;
873 ins->declaration.tgsm_structured.structure_count = *tokens;
874 if (ins->declaration.tgsm_structured.byte_stride % 4)
875 FIXME("Byte stride %u is not multiple of 4.\n", ins->declaration.tgsm_structured.byte_stride);
876}
struct wined3d_shader_tgsm_structured tgsm_structured

◆ shader_sm5_read_dcl_thread_group()

static void shader_sm5_read_dcl_thread_group ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 827 of file shader_sm4.c.

830{
831 ins->declaration.thread_group_size.x = *tokens++;
832 ins->declaration.thread_group_size.y = *tokens++;
833 ins->declaration.thread_group_size.z = *tokens++;
834}
struct wined3d_shader_thread_group_size thread_group_size

◆ shader_sm5_read_dcl_uav_raw()

static void shader_sm5_read_dcl_uav_raw ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 836 of file shader_sm4.c.

839{
840 shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], WINED3D_DATA_UAV, &ins->declaration.dst);
842}

◆ shader_sm5_read_dcl_uav_structured()

static void shader_sm5_read_dcl_uav_structured ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 844 of file shader_sm4.c.

847{
848 shader_sm4_read_dst_param(priv, &tokens, &tokens[token_count], WINED3D_DATA_UAV,
851 ins->declaration.structured_resource.byte_stride = *tokens;
852 if (ins->declaration.structured_resource.byte_stride % 4)
853 FIXME("Byte stride %u is not multiple of 4.\n", ins->declaration.structured_resource.byte_stride);
854}

◆ shader_sm5_read_fcall()

static void shader_sm5_read_fcall ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 754 of file shader_sm4.c.

757{
758 priv->src_param[0].reg.u.fp_body_idx = *tokens++;
759 shader_sm4_read_src_param(priv, &tokens, &tokens[token_count], WINED3D_DATA_OPAQUE, &priv->src_param[0]);
760}

◆ shader_sm5_read_sync()

static void shader_sm5_read_sync ( struct wined3d_shader_instruction *  ins,
DWORD  opcode,
DWORD  opcode_token,
const DWORD *  tokens,
unsigned int  token_count,
struct wined3d_sm4_data *  priv 
)
static

Definition at line 896 of file shader_sm4.c.

899{
901}
#define WINED3D_SM5_SYNC_FLAGS_SHIFT
Definition: shader_sm4.c:85
#define WINED3D_SM5_SYNC_FLAGS_MASK
Definition: shader_sm4.c:86

◆ skip_dword_unknown()

static void skip_dword_unknown ( const char **  ptr,
unsigned int  count 
)
static

Definition at line 1872 of file shader_sm4.c.

1873{
1874 unsigned int i;
1875 unsigned int d;
1876
1877 WARN("Skipping %u unknown DWORDs:\n", count);
1878 for (i = 0; i < count; ++i)
1879 {
1880 d = read_dword(ptr);
1881 WARN("\t0x%08x\n", d);
1882 }
1883}
#define d
Definition: ke_i.h:81

Referenced by shader_parse_signature().

◆ WINE_DECLARE_DEBUG_CHANNEL()

WINE_DECLARE_DEBUG_CHANNEL ( d3d_bytecode  )

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( d3d_shader  )

◆ wined3d_get_sm4_shader_type()

static enum wined3d_shader_type wined3d_get_sm4_shader_type ( const DWORD *  byte_code,
size_t  byte_code_size 
)
static

Definition at line 1253 of file shader_sm4.c.

1254{
1255 unsigned int shader_type;
1256
1257 if (byte_code_size / sizeof(*byte_code) < 1)
1258 {
1259 WARN("Invalid byte code size %lu.\n", (long)byte_code_size);
1261 }
1262
1263 shader_type = byte_code[0] >> 16;
1264 switch (shader_type)
1265 {
1266 case WINED3D_SM4_PS:
1268 break;
1269 case WINED3D_SM4_VS:
1271 break;
1272 case WINED3D_SM4_GS:
1274 break;
1275 case WINED3D_SM5_HS:
1277 break;
1278 case WINED3D_SM5_DS:
1280 break;
1281 case WINED3D_SM5_CS:
1283 break;
1284 default:
1285 FIXME("Unrecognised shader type %#x.\n", shader_type);
1287 }
1288}
@ WINED3D_SHADER_TYPE_HULL
Definition: wined3d.h:844
@ WINED3D_SHADER_TYPE_GEOMETRY
Definition: wined3d.h:843
@ WINED3D_SHADER_TYPE_DOMAIN
Definition: wined3d.h:845
@ WINED3D_SHADER_TYPE_COMPUTE
Definition: wined3d.h:848
@ WINED3D_SHADER_TYPE_VERTEX
Definition: wined3d.h:842
#define WINED3D_SM5_DS
#define WINED3D_SM4_PS
#define WINED3D_SM5_HS
#define WINED3D_SM4_GS
#define WINED3D_SM4_VS
#define WINED3D_SM5_CS

Referenced by shader_sm4_init().

◆ wined3d_shader_extract_from_dxbc()

HRESULT wined3d_shader_extract_from_dxbc ( struct wined3d_shader *  shader,
unsigned int  max_shader_version,
enum vkd3d_shader_source_type *  source_type 
)

Definition at line 2085 of file shader_sm4.c.

2087{
2088 const struct vkd3d_shader_code dxbc = {.code = shader->byte_code, .size = shader->byte_code_size};
2089 struct vkd3d_shader_dxbc_desc dxbc_desc;
2091 unsigned int i;
2092 int ret;
2093
2094 if ((ret = vkd3d_shader_parse_dxbc(&dxbc, 0, &dxbc_desc, NULL)) < 0)
2095 {
2096 WARN("Failed to parse DXBC, ret %d.\n", ret);
2097 return E_INVALIDARG;
2098 }
2099
2100 for (i = 0; i < dxbc_desc.section_count; ++i)
2101 {
2102 if (FAILED(hr = shader_dxbc_process_section(shader, max_shader_version, source_type, &dxbc_desc.sections[i])))
2103 break;
2104 }
2105 vkd3d_shader_free_dxbc(&dxbc_desc);
2106
2107 if (!shader->function)
2108 hr = E_INVALIDARG;
2109
2110 if (FAILED(hr))
2111 WARN("Failed to parse DXBC, hr %#lx.\n", hr);
2112
2113 return hr;
2114}
static HRESULT shader_dxbc_process_section(struct wined3d_shader *shader, unsigned int max_version, enum vkd3d_shader_source_type *source_type, const struct vkd3d_shader_dxbc_section_desc *section)
Definition: shader_sm4.c:1972
const void * code
Definition: vkd3d_shader.h:413
VKD3D_SHADER_API void vkd3d_shader_free_dxbc(struct vkd3d_shader_dxbc_desc *dxbc)
Definition: dxbc.c:290
VKD3D_SHADER_API int vkd3d_shader_parse_dxbc(const struct vkd3d_shader_code *dxbc, uint32_t flags, struct vkd3d_shader_dxbc_desc *desc, char **messages)
Definition: dxbc.c:320
#define WINED3D_OK
Definition: wined3d.h:33

Referenced by shader_set_function().

Variable Documentation

◆ data_type_table

◆ input_primitive_type_table

enum wined3d_primitive_type input_primitive_type_table[]
static
Initial value:

Definition at line 500 of file shader_sm4.c.

Referenced by shader_sm4_read_dcl_input_primitive().

◆ opcode_table

const struct wined3d_sm4_opcode_info opcode_table[]
static

Definition at line 912 of file shader_sm4.c.

Referenced by get_opcode_info(), init_sm4_lookup_tables(), and shader_get_opcode().

◆ output_primitive_type_table

enum wined3d_primitive_type output_primitive_type_table[]
static

◆ register_type_table

enum wined3d_shader_register_type register_type_table[]
static

Definition at line 1146 of file shader_sm4.c.

Referenced by init_sm4_lookup_tables(), and shader_sm4_read_param().

◆ resource_type_table

◆ sm4_shader_frontend

const struct wined3d_shader_frontend sm4_shader_frontend
Initial value:
=
{
}
static void shader_sm4_read_header(void *data, const DWORD **ptr, struct wined3d_shader_version *shader_version)
Definition: shader_sm4.c:1391
static void shader_sm4_free(void *data)
Definition: shader_sm4.c:1356
static BOOL shader_sm4_is_end(void *data, const DWORD **ptr)
Definition: shader_sm4.c:1825
static void * shader_sm4_init(const DWORD *byte_code, size_t byte_code_size, const struct wined3d_shader_signature *output_signature)
Definition: shader_sm4.c:1290
static void shader_sm4_read_instruction(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins)
Definition: shader_sm4.c:1701

Definition at line 1831 of file shader_sm4.c.

Referenced by shader_select_frontend().