30#define VKD3D_SM1_VS 0xfffeu
31#define VKD3D_SM1_PS 0xffffu
33#define VKD3D_SM1_DCL_USAGE_SHIFT 0u
34#define VKD3D_SM1_DCL_USAGE_MASK (0xfu << VKD3D_SM1_DCL_USAGE_SHIFT)
35#define VKD3D_SM1_DCL_USAGE_INDEX_SHIFT 16u
36#define VKD3D_SM1_DCL_USAGE_INDEX_MASK (0xfu << VKD3D_SM1_DCL_USAGE_INDEX_SHIFT)
38#define VKD3D_SM1_RESOURCE_TYPE_SHIFT 27u
39#define VKD3D_SM1_RESOURCE_TYPE_MASK (0xfu << VKD3D_SM1_RESOURCE_TYPE_SHIFT)
41#define VKD3D_SM1_OPCODE_MASK 0x0000ffffu
43#define VKD3D_SM1_INSTRUCTION_FLAGS_SHIFT 16u
44#define VKD3D_SM1_INSTRUCTION_FLAGS_MASK (0xffu << VKD3D_SM1_INSTRUCTION_FLAGS_SHIFT)
46#define VKD3D_SM1_INSTRUCTION_LENGTH_SHIFT 24u
47#define VKD3D_SM1_INSTRUCTION_LENGTH_MASK (0xfu << VKD3D_SM1_INSTRUCTION_LENGTH_SHIFT)
49#define VKD3D_SM1_COISSUE (0x1u << 30u)
51#define VKD3D_SM1_COMMENT_SIZE_SHIFT 16u
52#define VKD3D_SM1_COMMENT_SIZE_MASK (0x7fffu << VKD3D_SM1_COMMENT_SIZE_SHIFT)
54#define VKD3D_SM1_INSTRUCTION_PREDICATED (0x1u << 28u)
56#define VKD3D_SM1_INSTRUCTION_PARAMETER (0x1u << 31u)
58#define VKD3D_SM1_REGISTER_NUMBER_MASK 0x000007ffu
60#define VKD3D_SM1_REGISTER_TYPE_SHIFT 28u
61#define VKD3D_SM1_REGISTER_TYPE_MASK (0x7u << VKD3D_SM1_REGISTER_TYPE_SHIFT)
62#define VKD3D_SM1_REGISTER_TYPE_SHIFT2 8u
63#define VKD3D_SM1_REGISTER_TYPE_MASK2 (0x18u << VKD3D_SM1_REGISTER_TYPE_SHIFT2)
65#define VKD3D_SM1_ADDRESS_MODE_SHIFT 13u
66#define VKD3D_SM1_ADDRESS_MODE_MASK (0x1u << VKD3D_SM1_ADDRESS_MODE_SHIFT)
68#define VKD3D_SM1_DST_MODIFIER_SHIFT 20u
69#define VKD3D_SM1_DST_MODIFIER_MASK (0xfu << VKD3D_SM1_DST_MODIFIER_SHIFT)
71#define VKD3D_SM1_DSTSHIFT_SHIFT 24u
72#define VKD3D_SM1_DSTSHIFT_MASK (0xfu << VKD3D_SM1_DSTSHIFT_SHIFT)
74#define VKD3D_SM1_WRITEMASK_SHIFT 16u
75#define VKD3D_SM1_WRITEMASK_MASK (0xfu << VKD3D_SM1_WRITEMASK_SHIFT)
77#define VKD3D_SM1_SWIZZLE_SHIFT 16u
78#define VKD3D_SM1_SWIZZLE_MASK (0xffu << VKD3D_SM1_SWIZZLE_SHIFT)
79#define VKD3D_SM1_SWIZZLE_DEFAULT (0u | (1u << 2) | (2u << 4) | (3u << 6))
81#define VKD3D_SM1_SWIZZLE_COMPONENT_SHIFT(idx) (2u * (idx))
82#define VKD3D_SM1_SWIZZLE_COMPONENT_MASK(idx) (0x3u << VKD3D_SM1_SWIZZLE_COMPONENT_SHIFT(idx))
84#define VKD3D_SM1_SRC_MODIFIER_SHIFT 24u
85#define VKD3D_SM1_SRC_MODIFIER_MASK (0xfu << VKD3D_SM1_SRC_MODIFIER_SHIFT)
87#define VKD3D_SM1_END 0x0000ffffu
89#define VKD3D_SM1_VERSION_MAJOR(version) (((version) >> 8u) & 0xffu)
90#define VKD3D_SM1_VERSION_MINOR(version) (((version) >> 0u) & 0xffu)
226#define MAX_CONSTANT_COUNT 8192
432 if (opcode ==
info->sm1_opcode
435 || !
info->max_version.major))
477 src->reg.non_uniform =
false;
481 src->reg.idx[0].rel_addr = rel_addr;
502 dst->reg.non_uniform =
false;
506 dst->reg.idx[0].rel_addr = rel_addr;
517 switch (
dst->reg.dimension)
567 static const unsigned int table[] =
637 "%s register %u was used without being declared.", output ?
"Output" :
"Input",
register_index);
648 unsigned int register_index =
reg->idx_count > 0 ?
reg->idx[0].offset : 0;
705 switch (register_index)
721 "Invalid rasterizer output index %u.", register_index);
726 switch (register_index)
738 "Invalid miscellaneous fragment input index %u.", register_index);
756 static const char sm1_semantic_names[][13] =
860 "Attempted to read a parameter token, but no more tokens are remaining.");
873 if (sm1->
p.program->shader_version.major < 2)
875 *addr_token = (1u << 31)
885 "Attempted to read an indirect addressing token, but no more tokens are remaining.");
902 if (sm1->
p.program->shader_version.major >= 2)
970 sm1->
p.program->has_point_size =
true;
983 "Attempted to read a declaration instruction, but not enough tokens are remaining.");
997 "Invalid resource type %#x.", resource_type);
1024 "Attempted to read a constant definition, but not enough tokens are remaining. "
1025 "%zu token(s) available, %u required.", sm1->
end - *
ptr,
count);
1032 src_param->
reg.non_uniform =
false;
1034 src_param->
reg.idx[0].offset = ~0
u;
1035 src_param->
reg.idx[0].rel_addr =
NULL;
1036 src_param->
reg.idx[1].offset = ~0
u;
1037 src_param->
reg.idx[1].rel_addr =
NULL;
1038 src_param->
reg.idx[2].offset = ~0
u;
1039 src_param->
reg.idx[2].rel_addr =
NULL;
1040 src_param->
reg.idx_count = 0;
1041 src_param->
reg.dimension = dimension;
1060 remaining = sm1->
end - *
ptr;
1067 if (
size > --remaining)
1070 "Encountered a %u token comment, but only %zu token(s) is/are remaining.",
1113 "Ignoring unexpected instruction flags %#x.", ins->
flags);
1142 WARN(
"End of byte-code, failed to read opcode.\n");
1146 ++sm1->
p.location.line;
1151 "Invalid opcode %#x (token 0x%08x, shader version %u.%u).",
1168 if ((!predicate && predicated) || (!src_params && ins->
src_count) || (!dst_param && ins->
dst_count))
1187 "The current instruction ends %zu token(s) past the end of the shader.",
1272 size_t code_size = compile_info->
source.size;
1277 token_count = code_size /
sizeof(*sm1->
start);
1279 if (token_count < 2)
1282 "Invalid shader size %zu (token count %zu). At least 2 tokens are required.",
1283 code_size, token_count);
1314 "Invalid shader version %u.%u (token 0x%08x).",
version.major,
version.minor,
code[0]);
1319 sm1->
end = &
code[token_count];
1360 WARN(
"Failed to initialise shader parser, ret %d.\n",
ret);
1364 instructions = &
program->instructions;
1369 ERR(
"Failed to allocate instructions.\n");
1379 WARN(
"Encountered unrecognized or invalid instruction.\n");
1383 ++instructions->
count;
1389 if (sm1.
p.failed &&
ret >= 0)
1411 unsigned int major_version;
1453 && output == register_table[
i].output
1454 &&
version->type == register_table[
i].shader_type
1455 &&
version->major == register_table[
i].major_version)
1457 *
type = register_table[
i].type;
1459 *
reg = register_table[
i].offset;
1461 *
reg = semantic_index;
1504 *
usage = semantics[
i].usage;
1530 switch (
type->class)
1577 switch (
type->class)
1582 switch (
type->e.numeric.type)
1606 switch (
type->sampler_dim)
1619 ERR(
"Invalid dimension %#x.\n",
type->sampler_dim);
1625 switch (
type->sampler_dim)
1638 ERR(
"Invalid dimension %#x.\n",
type->sampler_dim);
1686 size_t fields_offset = 0;
1689 if (
type->bytecode_offset)
1706 for (
i = 0;
i < field_count; ++
i)
1746 if (
var->is_uniform)
1754 size_t ctab_offset, ctab_start, ctab_end, vars_offset, vars_start, size_offset, creator_offset,
offset;
1755 unsigned int uniform_count = 0;
1764 if (
var->semantic.name || !
var->regs[
r].allocated || !
var->last_read)
1769 if (
var->is_param &&
var->is_uniform)
1776 var->name = new_name;
1803 if (
var->semantic.name || !
var->regs[
r].allocated || !
var->last_read)
1830 size_t var_offset, name_offset;
1832 if (
var->semantic.name || !
var->regs[
r].allocated || !
var->last_read)
1835 var_offset = vars_start + (uniform_count * 5 *
sizeof(
uint32_t));
1843 if (
var->default_values)
1847 unsigned int default_value_offset;
1853 for (
k = 0;
k < comp_count; ++
k)
1856 unsigned int comp_offset;
1871 if (
ctx->double_as_float_alias)
1872 uni.u =
var->default_values[
k].number.u;
1878 uni.f =
var->default_values[
k].number.i;
1883 uni.f =
var->default_values[
k].number.u;
1888 uni.u =
var->default_values[
k].number.u;
1944 const struct sm1_src_register *
src = &instr->
srcs[0];
1945 const struct sm1_dst_register *
dst = &instr->
dst;
1954 if (
src->type !=
dst->type)
1956 if (
src->reg !=
dst->reg)
1959 for (
i = 0;
i < 4; ++
i)
1978 const struct sm1_src_register *
reg)
2025 || !
info->max_version.major))
2037 if (
x & ~0x3u ||
y & ~0x3u ||
z & ~0x3u ||
w & ~0x3u)
2038 ERR(
"Unexpected vsir swizzle: 0x%08x.\n",
swizzle);
2050 src->reg =
param->reg.idx[0].offset;
2054 if (
param->reg.idx[0].rel_addr)
2057 "Unhandled relative addressing on source register.");
2066 dst->reg =
param->reg.idx[0].offset;
2068 dst->writemask =
param->write_mask;
2070 if (
param->reg.idx[0].rel_addr)
2073 "Unhandled relative addressing on destination register.");
2084 const struct sm1_dst_register
reg =
2088 .reg = ins->
dst[0].reg.idx[0].offset,
2097 for (
unsigned int x = 0;
x < 4; ++
x)
2106 struct sm1_dst_register
reg = {0};
2129 unsigned int reg_id;
2134 reg_id = semantic->
resource.reg.reg.idx[0].offset;
2139 "dcl instruction with register type %u.", semantic->
resource.reg.reg.type);
2160 "dcl instruction with resource_type %u.", semantic->
resource_type);
2174 "Opcode %#x not supported for shader profile.", ins->
opcode);
2182 "Invalid destination count %u for vsir instruction %#x (expected %u).",
2190 "Invalid source count %u for vsir instruction %#x (expected %u).",
2264 writemask = ins->
dst->write_mask;
2270 "writemask %#x for vsir instruction with opcode %#x is not single component.",
2279 "vsir instruction with opcode %#x.", ins->
opcode);
2290 struct sm1_dst_register
reg = {0};
2327 bool write_in =
false, write_out =
false;
2333 write_in = write_out =
true;
2339 for (
unsigned int i = 0;
i <
program->input_signature.element_count; ++
i)
2345 for (
unsigned int i = 0;
i <
program->output_signature.element_count; ++
i)
2355 for (
i = 0;
i <
program->instructions.count; ++
i)
2382 "Invalid shader type %u.",
version->type);
static const unsigned char reg_size[]
static void list_remove(struct list_entry *entry)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static __inline void bitmap_set(IN bitmap4 *mask, IN uint32_t word, IN uint32_t flag)
static void put_u32(struct bytecode_buffer *buffer, uint32_t value)
static bool shader_sm1_is_end(struct vkd3d_shader_sm1_parser *sm1)
#define VKD3D_SM1_SWIZZLE_COMPONENT_SHIFT(idx)
static void d3dbc_write_semantic_dcl(struct d3dbc_compiler *d3dbc, const struct signature_element *element, bool output)
static void d3dbc_write_vsir_instruction(struct d3dbc_compiler *d3dbc, const struct vkd3d_shader_instruction *ins)
static bool has_relative_address(uint32_t param)
static const struct vkd3d_sm1_opcode_info * shader_sm1_get_opcode_info(const struct vkd3d_shader_sm1_parser *sm1, enum vkd3d_sm1_opcode opcode)
void write_sm1_uniforms(struct hlsl_ctx *ctx, struct vkd3d_bytecode_buffer *buffer)
static uint32_t swizzle_from_sm1(uint32_t swizzle)
static struct signature_element * find_signature_element(const struct shader_signature *signature, const char *semantic_name, unsigned int semantic_index)
#define VKD3D_SM1_SWIZZLE_COMPONENT_MASK(idx)
static const struct vkd3d_sm1_opcode_info ps_opcode_table[]
#define VKD3D_SM1_RESOURCE_TYPE_MASK
@ VKD3D_SM1_MISC_POSITION
static uint32_t read_u32(const uint32_t **ptr)
#define VKD3D_SM1_INSTRUCTION_LENGTH_SHIFT
#define VKD3D_SM1_DST_MODIFIER_SHIFT
#define VKD3D_SM1_OPCODE_MASK
static uint32_t swizzle_from_vsir(uint32_t swizzle)
static void d3dbc_write_vsir_dcl(struct d3dbc_compiler *d3dbc, const struct vkd3d_shader_instruction *ins)
#define VKD3D_SM1_INSTRUCTION_PREDICATED
@ VKD3D_SM1_RESOURCE_TEXTURE_1D
@ VKD3D_SM1_RESOURCE_UNKNOWN
@ VKD3D_SM1_RESOURCE_TEXTURE_2D
@ VKD3D_SM1_RESOURCE_TEXTURE_3D
@ VKD3D_SM1_RESOURCE_TEXTURE_CUBE
static unsigned int make_mask_contiguous(unsigned int mask)
static bool add_signature_element(struct vkd3d_shader_sm1_parser *sm1, bool output, const char *name, unsigned int index, enum vkd3d_shader_sysval_semantic sysval, unsigned int register_index, bool is_dcl, unsigned int mask)
static struct signature_element * find_signature_element_by_register_index(const struct shader_signature *signature, unsigned int register_index)
vkd3d_sm1_address_mode_type
@ VKD3D_SM1_ADDRESS_MODE_ABSOLUTE
@ VKD3D_SM1_ADDRESS_MODE_RELATIVE
static void d3dbc_write_vsir_sampler_dcl(struct d3dbc_compiler *d3dbc, unsigned int reg_id, enum vkd3d_sm1_resource_type res_type)
static const struct vkd3d_sm1_opcode_info * shader_sm1_get_opcode_info_from_vsir_instruction(struct d3dbc_compiler *d3dbc, const struct vkd3d_shader_instruction *ins)
#define VKD3D_SM1_SWIZZLE_SHIFT
#define VKD3D_SM1_SWIZZLE_MASK
static void record_constant_register(struct vkd3d_shader_sm1_parser *sm1, enum vkd3d_shader_d3dbc_constant_register set, uint32_t index, bool from_def)
static void write_sm1_dst_register(struct vkd3d_bytecode_buffer *buffer, const struct sm1_dst_register *reg)
#define VKD3D_SM1_SWIZZLE_DEFAULT
static void sm1_dst_reg_from_vsir(struct d3dbc_compiler *d3dbc, const struct vkd3d_shader_dst_param *param, struct sm1_dst_register *dst, const struct vkd3d_shader_location *loc)
#define VKD3D_SM1_DSTSHIFT_SHIFT
static void shader_sm1_validate_instruction(struct vkd3d_shader_sm1_parser *sm1, struct vkd3d_shader_instruction *ins)
static void shader_sm1_scan_register(struct vkd3d_shader_sm1_parser *sm1, const struct vkd3d_shader_register *reg, unsigned int mask, bool from_def)
#define VKD3D_SM1_SRC_MODIFIER_MASK
@ VKD3D_SM1_OP_TEXM3x3PAD
@ VKD3D_SM1_OP_TEXM3x2TEX
@ VKD3D_SM1_OP_TEXM3x3VSPEC
@ VKD3D_SM1_OP_TEXM3x3SPEC
@ VKD3D_SM1_OP_TEXM3x3TEX
@ VKD3D_SM1_OP_TEXM3x2DEPTH
@ VKD3D_SM1_OP_TEXM3x2PAD
@ VKD3D_SM1_OP_TEXREG2RGB
@ VKD3D_SM1_OP_TEXM3x3DIFF
#define VKD3D_SM1_DCL_USAGE_INDEX_MASK
static void sm1_sort_extern(struct list *sorted, struct hlsl_ir_var *to_sort)
static void write_sm1_src_register(struct vkd3d_bytecode_buffer *buffer, const struct sm1_src_register *reg)
static void d3dbc_write_instruction(struct d3dbc_compiler *d3dbc, const struct sm1_instruction *instr)
static void shader_sm1_read_src_param(struct vkd3d_shader_sm1_parser *sm1, const uint32_t **ptr, struct vkd3d_shader_src_param *src_param)
#define VKD3D_SM1_VERSION_MINOR(version)
#define VKD3D_SM1_ADDRESS_MODE_SHIFT
int d3dbc_parse(const struct vkd3d_shader_compile_info *compile_info, uint64_t config_flags, struct vkd3d_shader_message_context *message_context, struct vsir_program *program)
bool sm1_register_from_semantic_name(const struct vkd3d_shader_version *version, const char *semantic_name, unsigned int semantic_index, bool output, enum vkd3d_shader_register_type *type, unsigned int *reg)
static const struct vkd3d_sm1_opcode_info vs_opcode_table[]
#define VKD3D_SM1_WRITEMASK_SHIFT
#define VKD3D_SM1_DCL_USAGE_INDEX_SHIFT
static void write_sm1_type(struct vkd3d_bytecode_buffer *buffer, struct hlsl_type *type, unsigned int ctab_start)
static unsigned int mask_from_swizzle(uint32_t swizzle)
static enum vkd3d_result shader_sm1_init(struct vkd3d_shader_sm1_parser *sm1, struct vsir_program *program, const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_message_context *message_context)
#define VKD3D_SM1_COMMENT_SIZE_MASK
static uint32_t get_external_constant_count(struct vkd3d_shader_sm1_parser *sm1, enum vkd3d_shader_d3dbc_constant_register set)
#define VKD3D_SM1_REGISTER_TYPE_MASK2
#define VKD3D_SM1_RESOURCE_TYPE_SHIFT
static void shader_sm1_parse_src_param(uint32_t param, struct vkd3d_shader_src_param *rel_addr, struct vkd3d_shader_src_param *src)
#define VKD3D_SM1_COISSUE
static void add_signature_mask(struct vkd3d_shader_sm1_parser *sm1, bool output, unsigned int register_index, unsigned int mask)
D3DXPARAMETER_TYPE hlsl_sm1_base_type(const struct hlsl_type *type)
#define VKD3D_SM1_INSTRUCTION_PARAMETER
static void d3dbc_write_semantic_dcls(struct d3dbc_compiler *d3dbc)
static const struct vkd3d_sm1_opcode_info * shader_sm1_get_opcode_info_from_vsir(struct d3dbc_compiler *d3dbc, enum vkd3d_shader_opcode vkd3d_opcode)
static void shader_sm1_read_immconst(struct vkd3d_shader_sm1_parser *sm1, const uint32_t **ptr, struct vkd3d_shader_src_param *src_param, enum vsir_dimension dimension, enum vkd3d_data_type data_type)
#define VKD3D_SM1_INSTRUCTION_FLAGS_MASK
static bool add_signature_element_from_register(struct vkd3d_shader_sm1_parser *sm1, const struct vkd3d_shader_register *reg, bool is_dcl, unsigned int mask)
static void shader_sm1_read_semantic(struct vkd3d_shader_sm1_parser *sm1, const uint32_t **ptr, struct vkd3d_shader_semantic *semantic)
#define VKD3D_SM1_VERSION_MAJOR(version)
#define VKD3D_SM1_REGISTER_NUMBER_MASK
static void d3dbc_write_vsir_simple_instruction(struct d3dbc_compiler *d3dbc, const struct vkd3d_shader_instruction *ins)
static void shader_sm1_read_instruction(struct vkd3d_shader_sm1_parser *sm1, struct vkd3d_shader_instruction *ins)
static void sm1_sort_externs(struct hlsl_ctx *ctx)
static unsigned int idx_count_from_reg_type(enum vkd3d_shader_register_type reg_type)
bool sm1_usage_from_semantic_name(const char *semantic_name, uint32_t semantic_index, enum vkd3d_decl_usage *usage, uint32_t *usage_idx)
#define VKD3D_SM1_DCL_USAGE_MASK
#define VKD3D_SM1_REGISTER_TYPE_SHIFT
static void d3dbc_write_program_instructions(struct d3dbc_compiler *d3dbc)
static void shader_sm1_read_comment(struct vkd3d_shader_sm1_parser *sm1)
#define VKD3D_SM1_COMMENT_SIZE_SHIFT
#define VKD3D_SM1_DSTSHIFT_MASK
#define VKD3D_SM1_INSTRUCTION_FLAGS_SHIFT
#define VKD3D_SM1_REGISTER_TYPE_MASK
static void d3dbc_write_vsir_def(struct d3dbc_compiler *d3dbc, const struct vkd3d_shader_instruction *ins)
int d3dbc_compile(struct vsir_program *program, uint64_t config_flags, const struct vkd3d_shader_compile_info *compile_info, const struct vkd3d_shader_code *ctab, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context)
static void shader_sm1_parse_dst_param(uint32_t param, struct vkd3d_shader_src_param *rel_addr, struct vkd3d_shader_dst_param *dst)
D3DXPARAMETER_CLASS hlsl_sm1_class(const struct hlsl_type *type)
static void shader_sm1_skip_opcode(const struct vkd3d_shader_sm1_parser *sm1, const uint32_t **ptr, const struct vkd3d_sm1_opcode_info *opcode_info, uint32_t opcode_token)
#define MAX_CONSTANT_COUNT
static void shader_sm1_read_param(struct vkd3d_shader_sm1_parser *sm1, const uint32_t **ptr, uint32_t *token, uint32_t *addr_token)
#define VKD3D_SM1_DCL_USAGE_SHIFT
static uint32_t sm1_encode_register_type(enum vkd3d_shader_register_type type)
#define VKD3D_SM1_REGISTER_TYPE_SHIFT2
static enum vkd3d_shader_resource_type resource_type_table[]
#define VKD3D_SM1_DST_MODIFIER_MASK
#define VKD3D_SM1_WRITEMASK_MASK
static unsigned int shader_sm1_get_swizzle_component(uint32_t swizzle, unsigned int idx)
static bool is_inconsequential_instr(const struct sm1_instruction *instr)
static void shader_sm1_read_dst_param(struct vkd3d_shader_sm1_parser *sm1, const uint32_t **ptr, struct vkd3d_shader_dst_param *dst_param)
#define VKD3D_SM1_SRC_MODIFIER_SHIFT
#define VKD3D_SM1_INSTRUCTION_LENGTH_MASK
static uint32_t sm1_version(enum vkd3d_shader_type type, unsigned int major, unsigned int minor)
#define VKD3D_SM1_ADDRESS_MODE_MASK
static void sm1_src_reg_from_vsir(struct d3dbc_compiler *d3dbc, const struct vkd3d_shader_src_param *param, struct sm1_src_register *src, const struct vkd3d_shader_location *loc)
static bool add_signature_element_from_semantic(struct vkd3d_shader_sm1_parser *sm1, const struct vkd3d_shader_semantic *semantic)
static __inline const char * debugstr_an(const char *s, int n)
static const WCHAR version[]
_ACRTIMP int __cdecl strcmp(const char *, const char *)
static void list_move_tail(struct list_head *list, struct list_head *head)
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLint GLint GLint GLint GLint GLint y
GLdouble GLdouble GLdouble r
GLuint GLsizei GLsizei * length
GLubyte GLubyte GLubyte GLubyte w
GLsizeiptr const GLvoid GLenum usage
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
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
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
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 GLint GLint j
enum wined3d_data_type data_type
unsigned int hlsl_type_component_count(const struct hlsl_type *type)
unsigned int hlsl_type_get_component_offset(struct hlsl_ctx *ctx, struct hlsl_type *type, unsigned int index, enum hlsl_regset *regset)
struct hlsl_type * hlsl_type_get_component_type(struct hlsl_ctx *ctx, struct hlsl_type *type, unsigned int index)
const struct hlsl_type * hlsl_get_multiarray_element_type(const struct hlsl_type *type)
unsigned int hlsl_get_multiarray_size(const struct hlsl_type *type)
char * hlsl_sprintf_alloc(struct hlsl_ctx *ctx, const char *fmt,...)
@ HLSL_CLASS_COMPUTE_SHADER
@ HLSL_CLASS_RASTERIZER_STATE
@ HLSL_CLASS_RENDER_TARGET_VIEW
@ HLSL_CLASS_VERTEX_SHADER
@ HLSL_CLASS_GEOMETRY_SHADER
@ HLSL_CLASS_DEPTH_STENCIL_VIEW
@ HLSL_CLASS_CONSTANT_BUFFER
@ HLSL_CLASS_EFFECT_GROUP
@ HLSL_CLASS_PIXEL_SHADER
@ HLSL_CLASS_DOMAIN_SHADER
@ HLSL_CLASS_DEPTH_STENCIL_STATE
@ HLSL_SAMPLER_DIM_GENERIC
#define HLSL_MODIFIERS_MAJORITY_MASK
#define HLSL_MODIFIER_COLUMN_MAJOR
bool vsir_program_init(struct vsir_program *program, const struct vkd3d_shader_compile_info *compile_info, const struct vkd3d_shader_version *version, unsigned int reserve, enum vsir_control_flow_type cf_type, enum vsir_normalisation_level normalisation_level)
void vsir_program_cleanup(struct vsir_program *program)
void vsir_register_init(struct vkd3d_shader_register *reg, enum vkd3d_shader_register_type reg_type, enum vkd3d_data_type data_type, unsigned int idx_count)
void vsir_instruction_init(struct vkd3d_shader_instruction *ins, const struct vkd3d_shader_location *location, enum vkd3d_shader_opcode opcode)
#define memcpy(s1, s2, n)
#define comment(fmt, arg1)
static unsigned __int64 next
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
__WINE_SERVER_LIST_INLINE void list_add_before(struct list *elem, struct list *to_add)
enum vkd3d_shader_register_type reg_type
enum vkd3d_shader_sysval_semantic sysval
struct vkd3d_bytecode_buffer buffer
struct vkd3d_shader_message_context * message_context
struct vsir_program * program
const struct vkd3d_sm1_opcode_info * opcode_table
struct hlsl_type::@5997::@5998 numeric
struct hlsl_type::@5997::@5999 record
enum hlsl_type_class class
const char * semantic_name
unsigned int register_index
unsigned int semantic_index
enum vkd3d_shader_register_type type
enum vkd3d_shader_dst_modifier mod
enum vkd3d_shader_src_modifier mod
enum vkd3d_shader_register_type type
struct sm1_instruction::sm1_src_register srcs[4]
enum vkd3d_sm1_opcode opcode
struct sm1_instruction::sm1_dst_register dst
struct vkd3d_shader_code source
struct vkd3d_shader_register reg
struct vkd3d_shader_instruction * elements
struct vkd3d_shader_src_param * src
const struct vkd3d_shader_src_param * predicate
struct vkd3d_shader_location location
struct vkd3d_shader_texel_offset texel_offset
unsigned int resource_stride
enum vkd3d_shader_resource_type resource_type
union vkd3d_shader_instruction::@6020 declaration
enum vkd3d_shader_opcode opcode
enum vkd3d_data_type resource_data_type[VKD3D_VEC4_SIZE]
struct vkd3d_shader_semantic semantic
struct vkd3d_shader_dst_param * dst
enum vkd3d_shader_resource_type resource_type
enum vkd3d_data_type resource_data_type[VKD3D_VEC4_SIZE]
struct vkd3d_shader_resource resource
enum vkd3d_decl_usage usage
struct vkd3d_shader_parser p
uint32_t def_mask[VKD3D_BITMAP_SIZE(MAX_CONSTANT_COUNT)]
const struct vkd3d_sm1_opcode_info * opcode_table
struct vkd3d_shader_sm1_parser::@5991 constants[3]
struct vkd3d_shader_register reg
enum vkd3d_shader_src_modifier modifiers
enum vkd3d_shader_opcode vkd3d_opcode
enum vkd3d_sm1_opcode sm1_opcode
struct vkd3d_sm1_opcode_info::@5990 min_version
struct vkd3d_sm1_opcode_info::@5990 max_version
static bool bitmap_is_set(const uint32_t *map, unsigned int idx)
static uint16_t vkd3d_make_u16(uint8_t low, uint8_t high)
static uint32_t vkd3d_make_u32(uint16_t low, uint16_t high)
#define VKD3D_MAKE_TAG(ch0, ch1, ch2, ch3)
#define vkd3d_unreachable()
#define VKD3D_BITMAP_SIZE(x)
#define VKD3D_ASSERT(cond)
static int ascii_strcasecmp(const char *a, const char *b)
static char * vkd3d_strdup(const char *string)
static void vkd3d_free(void *ptr)
bool vkd3d_array_reserve(void **elements, size_t *capacity, size_t element_count, size_t element_size)
vkd3d_shader_d3dbc_constant_register
@ VKD3D_SHADER_D3DBC_BOOL_CONSTANT_REGISTER
@ VKD3D_SHADER_D3DBC_FLOAT_CONSTANT_REGISTER
@ VKD3D_SHADER_D3DBC_INT_CONSTANT_REGISTER
static uint32_t vkd3d_shader_create_swizzle(enum vkd3d_shader_swizzle_component x, enum vkd3d_shader_swizzle_component y, enum vkd3d_shader_swizzle_component z, enum vkd3d_shader_swizzle_component w)
VKD3D_SHADER_API const char * vkd3d_shader_get_version(unsigned int *major, unsigned int *minor)
vkd3d_shader_sysval_semantic
@ VKD3D_SHADER_SV_IS_FRONT_FACE
@ VKD3D_SHADER_SV_POSITION
@ VKD3D_SHADER_COMPONENT_FLOAT
vkd3d_shader_resource_type
@ VKD3D_SHADER_RESOURCE_NONE
@ VKD3D_SHADER_RESOURCE_TEXTURE_3D
@ VKD3D_SHADER_RESOURCE_TEXTURE_CUBE
@ VKD3D_SHADER_RESOURCE_TEXTURE_1D
@ VKD3D_SHADER_RESOURCE_TEXTURE_2D
#define VKD3D_SHADER_NO_SWIZZLE
size_t bytecode_reserve_bytes(struct vkd3d_bytecode_buffer *buffer, size_t size)
size_t bytecode_align(struct vkd3d_bytecode_buffer *buffer)
void set_u32(struct vkd3d_bytecode_buffer *buffer, size_t offset, uint32_t value)
void vkd3d_shader_parser_init(struct vkd3d_shader_parser *parser, struct vsir_program *program, struct vkd3d_shader_message_context *message_context, const char *source_name)
bool shader_instruction_array_reserve(struct vkd3d_shader_instruction_array *instructions, unsigned int reserve)
size_t bytecode_put_bytes(struct vkd3d_bytecode_buffer *buffer, const void *bytes, size_t size)
vkd3d_shader_src_modifier
static bool vkd3d_shader_ver_ge(const struct vkd3d_shader_version *v, unsigned int major, unsigned int minor)
@ VKD3D_SHADER_TYPE_VERTEX
@ VKD3D_SHADER_TYPE_PIXEL
static struct vkd3d_shader_dst_param * vsir_program_get_dst_params(struct vsir_program *program, unsigned int count)
#define VKD3DSP_WRITEMASK_3
vkd3d_shader_register_type
@ VKD3DSPR_COMBINED_SAMPLER
@ VKD3D_SHADER_ERROR_D3DBC_UNDECLARED_SEMANTIC
@ VKD3D_SHADER_ERROR_D3DBC_INVALID_OPCODE
@ VKD3D_SHADER_ERROR_D3DBC_INVALID_WRITEMASK
@ VKD3D_SHADER_ERROR_D3DBC_INVALID_REGISTER_COUNT
@ VKD3D_SHADER_ERROR_D3DBC_UNEXPECTED_EOF
@ VKD3D_SHADER_ERROR_D3DBC_INVALID_REGISTER_TYPE
@ VKD3D_SHADER_WARNING_D3DBC_IGNORED_INSTRUCTION_FLAGS
@ VKD3D_SHADER_ERROR_D3DBC_INVALID_REGISTER_INDEX
@ VKD3D_SHADER_ERROR_D3DBC_OUT_OF_MEMORY
@ VKD3D_SHADER_ERROR_D3DBC_NOT_IMPLEMENTED
@ VKD3D_SHADER_ERROR_D3DBC_INVALID_PROFILE
@ VKD3D_SHADER_ERROR_D3DBC_INVALID_RESOURCE_TYPE
@ VKD3D_SHADER_ERROR_D3DBC_INVALID_VERSION_TOKEN
#define VKD3DSP_WRITEMASK_ALL
static struct vkd3d_shader_src_param * vsir_program_get_src_params(struct vsir_program *program, unsigned int count)
@ VSIR_RASTOUT_POINT_SIZE
static unsigned int vsir_swizzle_get_component(uint32_t swizzle, unsigned int idx)
#define SM1_COLOR_REGISTER_OFFSET
@ VKD3D_SHADER_REGISTER_PRECISION_DEFAULT
static size_t put_string(struct vkd3d_bytecode_buffer *buffer, const char *string)
@ VKD3D_DECL_USAGE_SAMPLE
@ VKD3D_DECL_USAGE_BLEND_WEIGHT
@ VKD3D_DECL_USAGE_BINORMAL
@ VKD3D_DECL_USAGE_TEXCOORD
@ VKD3D_DECL_USAGE_BLEND_INDICES
@ VKD3D_DECL_USAGE_TANGENT
@ VKD3D_DECL_USAGE_POSITION
@ VKD3D_DECL_USAGE_TESS_FACTOR
@ VKD3D_DECL_USAGE_NORMAL
@ VKD3D_DECL_USAGE_POSITIONT
static size_t put_f32(struct vkd3d_bytecode_buffer *buffer, float value)
void vkd3d_shader_parser_error(struct vkd3d_shader_parser *parser, enum vkd3d_shader_error error, const char *format,...) VKD3D_PRINTF_FUNC(3
vkd3d_shader_dst_modifier
void vkd3d_shader_parser_warning(struct vkd3d_shader_parser *parser, enum vkd3d_shader_error error, const char *format,...) VKD3D_PRINTF_FUNC(3
#define VKD3DSP_WRITEMASK_0
#define SM1_RASTOUT_REGISTER_OFFSET
#define VKD3DSP_WRITEMASK_1
#define VKD3DSP_WRITEMASK_2
static bool vkd3d_shader_ver_le(const struct vkd3d_shader_version *v, unsigned int major, unsigned int minor)
@ VKD3D_ERROR_INVALID_SHADER
@ VKD3D_ERROR_OUT_OF_MEMORY
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out