28 if (
'0' <=
c &&
c <=
'9')
30 if (
'A' <=
c &&
c <=
'F')
32 if (
'a' <=
c &&
c <=
'f')
46 if (*
s ==
'x' || *
s ==
'X')
79 if (size < buffer->content_size)
88 unsigned int new_buffer_size = rc >= 0 ?
buffer->content_size + rc + 1 :
buffer->buffer_size * 2;
92 ERR(
"Failed to grow buffer.\n");
111 if (rc >= 0 && (
unsigned int)rc < rem)
113 buffer->content_size += rc;
136 unsigned int idx =
buffer->content_size + 1;
151 unsigned int idx =
buffer->content_size + 1;
211 cache->max_count + 1,
sizeof(*
cache->buffers)))
248 context->log_level = log_level;
258 const char *function)
272 if (!
context->messages.content_size)
290 const char *source_name =
location->source_name ?
location->source_name :
"<anonymous>";
310 const char *source_name =
location->source_name ?
location->source_name :
"<anonymous>";
344 const char *source_name =
location->source_name ?
location->source_name :
"<anonymous>";
381 buffer->size = aligned_size;
458 static const char hexadecimal_digits[] =
"0123456789abcdef";
460 char str_checksum[33];
461 unsigned int pos = 0;
466 if (!dump_data->
path)
471 str_checksum[2 *
i] = hexadecimal_digits[
checksum[
i] >> 4];
472 str_checksum[2 *
i + 1] = hexadecimal_digits[
checksum[
i] & 0xf];
474 str_checksum[32] =
'\0';
496 WARN(
"Failed to open %s for dumping shader.\n",
filename);
513 FIXME(
"Unhandled source type %#x.\n",
type);
539 FIXME(
"Unhandled target type %#x.\n",
type);
554 if (!(
data->path =
getenv(
"VKD3D_SHADER_DUMP_PATH")))
609 parser->message_context = message_context;
610 parser->location.source_name = source_name;
612 parser->location.column = 0;
639 bool validate_target_type)
647 WARN(
"Invalid structure type %#x.\n", compile_info->
type);
663 if (validate_target_type)
708 WARN(
"Failed to parse shader.\n");
714 WARN(
"Failed to validate shader after parsing, ret %d.\n",
ret);
758 for (
unsigned int j = 0;
j <
i; ++
j)
765 d->semantic_index =
e->semantic_index;
766 d->stream_index =
e->stream_index;
767 d->sysval_semantic =
e->sysval_semantic;
768 d->component_type =
e->component_type;
769 d->register_index =
e->register_index;
770 if (
e->register_count > 1)
771 FIXME(
"Arrayed elements are not supported yet.\n");
773 d->used_mask =
e->used_mask;
774 d->min_precision =
e->min_precision;
841 context->scan_descriptor_info = scan_descriptor_info;
842 context->message_context = message_context;
846 context->combined_sampler_info = combined_sampler_info;
871 struct vkd3d_shader_cf_info *cf_info;
876 ERR(
"Failed to allocate UAV range.\n");
881 memset(cf_info, 0,
sizeof(*cf_info));
897 struct vkd3d_shader_cf_info *cf_info;
902 if (cf_info->type == VKD3D_SHADER_BLOCK_LOOP
903 || cf_info->type == VKD3D_SHADER_BLOCK_SWITCH)
914 struct vkd3d_shader_cf_info *cf_info;
919 if (cf_info->type == VKD3D_SHADER_BLOCK_LOOP)
929 unsigned int range_id =
reg->idx[0].offset;
932 if (!
context->scan_descriptor_info)
935 for (
i = 0;
i <
context->scan_descriptor_info->descriptor_count; ++
i)
938 &&
context->scan_descriptor_info->descriptors[
i].register_id == range_id)
940 context->scan_descriptor_info->descriptors[
i].flags |=
flag;
1002 info->descriptor_count + 1,
sizeof(*
info->descriptors)))
1004 ERR(
"Failed to allocate descriptor info.\n");
1008 d = &
info->descriptors[
info->descriptor_count];
1011 d->register_id =
reg->idx[0].offset;
1012 d->register_space =
range->space;
1013 d->register_index =
range->first;
1017 ++
info->descriptor_count;
1031 d->buffer_size =
cb->size;
1061 for (
unsigned int i = 0;
i <
info->descriptor_count; ++
i)
1078 unsigned int resource_idx, sampler_idx,
i;
1084 resource_idx =
resource->idx[1].offset;
1086 resource_idx =
resource->idx[0].offset;
1091 sampler_idx =
sampler->idx[1].offset;
1093 sampler_idx =
sampler->idx[0].offset;
1098 bool dynamic_resource, dynamic_sampler;
1100 if ((dynamic_resource =
resource->idx[1].rel_addr))
1102 "Resource descriptor array %u is being dynamically indexed, "
1103 "not recording a combined resource-sampler pair.",
resource->idx[0].offset);
1106 "Sampler descriptor array %u is being dynamically indexed, "
1107 "not recording a combined resource-sampler pair.",
sampler->idx[0].offset);
1108 if (dynamic_resource || dynamic_sampler)
1113 resource_space =
d->register_space;
1117 sampler_space =
d->register_space;
1120 for (
i = 0;
i <
info->combined_sampler_count; ++
i)
1122 s = &
info->combined_samplers[
i];
1123 if (
s->resource_space == resource_space &&
s->resource_index == resource_idx
1124 &&
s->sampler_space == sampler_space &&
s->sampler_index == sampler_idx)
1129 info->combined_sampler_count + 1,
sizeof(*
info->combined_samplers)))
1131 ERR(
"Failed to allocate combined sampler info.\n");
1135 s = &
info->combined_samplers[
info->combined_sampler_count++];
1136 s->resource_space = resource_space;
1137 s->resource_index = resource_idx;
1138 s->sampler_space = sampler_space;
1139 s->sampler_index = sampler_idx;
1174 FIXME(
"Resource data types are different (%d, %d, %d, %d).\n",
1215 ERR(
"Invalid resource data type %#x for API version %#x.\n",
1228 struct vkd3d_shader_cf_info *cf_info;
1268 cf_info->type = VKD3D_SHADER_BLOCK_IF;
1269 cf_info->inside_block =
true;
1275 "Encountered ‘else’ instruction without corresponding ‘if’ block.");
1278 cf_info->inside_block =
true;
1284 "Encountered ‘endif’ instruction without corresponding ‘if’ block.");
1291 cf_info->type = VKD3D_SHADER_BLOCK_LOOP;
1292 cf_info->inside_block =
true;
1298 "Encountered ‘endloop’ instruction without corresponding ‘loop’ block.");
1305 cf_info->type = VKD3D_SHADER_BLOCK_SWITCH;
1309 || cf_info->type != VKD3D_SHADER_BLOCK_SWITCH || cf_info->inside_block)
1312 "Encountered ‘endswitch’ instruction without corresponding ‘switch’ block.");
1319 || cf_info->type != VKD3D_SHADER_BLOCK_SWITCH)
1322 "Encountered ‘case’ instruction outside switch block.");
1325 cf_info->inside_block =
true;
1329 || cf_info->type != VKD3D_SHADER_BLOCK_SWITCH)
1332 "Encountered ‘default’ instruction outside switch block.");
1335 if (cf_info->has_default)
1338 "Encountered duplicate ‘default’ instruction inside the current switch block.");
1341 cf_info->inside_block =
true;
1342 cf_info->has_default =
true;
1348 "Encountered ‘break’ instruction outside breakable block.");
1351 cf_info->inside_block =
false;
1357 "Encountered ‘breakp’ instruction outside loop.");
1365 "Encountered ‘continue’ instruction outside loop.");
1368 cf_info->inside_block =
false;
1374 "Encountered ‘continue’ instruction outside loop.");
1380 context->cf_info[
context->cf_info_count - 1].inside_block =
false;
1383 if (
context->version->major == 1)
1481 dst->register_space =
src->register_space;
1482 dst->register_index =
src->register_index;
1483 dst->resource_type =
src->resource_type;
1484 dst->resource_data_type =
src->resource_data_type;
1495 TRACE(
"scan_descriptor_info %p.\n", scan_descriptor_info);
1514 if (descriptor_info1)
1519 else if (descriptor_info)
1521 descriptor_info1 = &local_descriptor_info1;
1529 if (!descriptor_info1)
1530 descriptor_info1 = &local_descriptor_info1;
1539 for (
i = 0;
i <
program->instructions.count; ++
i)
1557 d->buffer_size =
size * 16;
1561 if (!
ret && signature_info)
1567 &
program->patch_constant_signature))
1573 if (!
ret && descriptor_info)
1578 if (combined_sampler_info)
1580 if (descriptor_info)
1582 if (descriptor_info1)
1601 TRACE(
"compile_info %p, messages %p.\n", compile_info,
messages);
1618 FIXME(
"HLSL support not implemented.\n");
1649 scan_info = *compile_info;
1659 combined_sampler_info.
next = scan_info.
next;
1660 scan_info.
next = &combined_sampler_info;
1664 &combined_sampler_info, compile_info,
out, message_context);
1674 compile_info,
out, message_context);
1715 TRACE(
"compile_info %p, out %p, messages %p.\n", compile_info,
out,
messages);
1770 TRACE(
"scan_descriptor_info %p.\n", scan_descriptor_info);
1786 TRACE(
"shader_code %p.\n", shader_code);
1805 memset(root_signature, 0,
sizeof(*root_signature));
1822 memset(root_signature, 0,
sizeof(*root_signature));
1837 else if (
desc->version)
1839 FIXME(
"Unknown version %#x.\n",
desc->version);
1848 for (
unsigned int i = 0;
i <
signature->element_count; ++
i)
1892 TRACE(
"signature %p, semantic_name %s, semantic_index %u, stream_index %u.\n",
1911 for (
unsigned int i = 0;
i <
signature->element_count; ++
i)
1944#ifdef VKD3D_SHADER_UNSUPPORTED_DXIL
1962#ifdef HAVE_SPIRV_TOOLS
1966#ifdef VKD3D_SHADER_UNSUPPORTED_GLSL
1969#ifdef VKD3D_SHADER_UNSUPPORTED_MSL
1977#ifdef HAVE_SPIRV_TOOLS
1989#ifdef HAVE_SPIRV_TOOLS
1995#ifdef VKD3D_SHADER_UNSUPPORTED_DXIL
1999# ifdef HAVE_SPIRV_TOOLS
2011 TRACE(
"source_type %#x, count %p.\n", source_type,
count);
2013 switch (source_type)
2017 return dxbc_tpf_types;
2027#ifdef VKD3D_SHADER_UNSUPPORTED_DXIL
2030 return dxbc_dxil_types;
2049 TRACE(
"compile_info %p, out %p, messages %p.\n", compile_info,
out,
messages);
2134 memset(instructions, 0,
sizeof(*instructions));
2138 sizeof(*instructions->
elements->dst));
2148 ERR(
"Failed to allocate instructions.\n");
2155 unsigned int idx,
unsigned int count)
2175 sizeof(*instructions->
icbs)))
2183 unsigned int count);
2190 for (
i = 0;
i <
reg->idx_count; ++
i)
2192 if (!
reg->idx[
i].rel_addr)
2245 unsigned int dst,
unsigned int src)
2275 unsigned int count = 0;
2278 TRACE(
"output_signature %p, input_signature %p, ret_count %p, varyings %p.\n",
2279 output_signature, input_signature, ret_count,
varyings);
2285 input_element = &input_signature->
elements[
i];
static unsigned char bytes[4]
void vsir_program_trace(const struct vsir_program *program)
enum vkd3d_result d3d_asm_compile(const struct vsir_program *program, const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, enum vsir_asm_flags flags)
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)
static BOOL reserve(struct dynamic_array *array, int count, int itemsize)
static cab_ULONG checksum(const cab_UBYTE *data, cab_UWORD bytes, cab_ULONG csum)
static const WCHAR version[]
char *CDECL getenv(const char *name)
int CDECL fclose(FILE *file)
FILE *CDECL fopen(const char *path, const char *mode)
size_t CDECL fwrite(const void *ptr, size_t size, size_t nmemb, FILE *file)
int shader_parse_input_signature(const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_message_context *message_context, struct shader_signature *signature)
int dxil_parse(const struct vkd3d_shader_compile_info *compile_info, uint64_t config_flags, struct vkd3d_shader_message_context *message_context, struct vsir_program *program)
int fx_parse(const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context)
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLint GLint GLint GLint GLint GLint y
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble GLdouble q
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLsizei const GLchar *const * varyings
GLenum const GLfloat * params
GLuint GLsizei GLsizei * length
GLboolean GLboolean GLboolean GLboolean a
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 flag
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 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
int glsl_compile(struct vsir_program *program, uint64_t config_flags, const struct vkd3d_shader_scan_descriptor_info1 *descriptor_info, const struct vkd3d_shader_scan_combined_resource_sampler_info *combined_sampler_info, const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context)
int hlsl_compile_shader(const struct vkd3d_shader_code *hlsl, const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context)
void vsir_program_cleanup(struct vsir_program *program)
enum vkd3d_result vsir_program_validate(struct vsir_program *program, uint64_t config_flags, const char *source_name, struct vkd3d_shader_message_context *message_context)
enum vkd3d_result vsir_program_transform_early(struct vsir_program *program, uint64_t config_flags, const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_message_context *message_context)
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
struct task_struct * current
static IPrintDialogCallback callback
D3D11_SHADER_VARIABLE_DESC desc
int msl_compile(struct vsir_program *program, uint64_t config_flags, const struct vkd3d_shader_scan_descriptor_info1 *descriptor_info, const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context)
static unsigned __int64 next
#define offsetof(TYPE, MEMBER)
void vkd3d_compute_md5(const void *data, size_t size, uint32_t checksum[4], enum vkd3d_md5_variant variant)
int spirv_compile(struct vsir_program *program, uint64_t config_flags, const struct vkd3d_shader_scan_descriptor_info1 *scan_descriptor_info, const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context)
const char * target_suffix
const char * source_suffix
unsigned int resource_space
unsigned int sampler_space
const struct vkd3d_shader_compile_option * options
struct vkd3d_shader_code source
enum vkd3d_shader_log_level log_level
enum vkd3d_shader_structure_type type
unsigned int option_count
enum vkd3d_shader_source_type source_type
enum vkd3d_shader_target_type target_type
unsigned int structure_stride
enum vkd3d_shader_resource_data_type resource_data_type
unsigned int sample_count
enum vkd3d_shader_resource_type resource_type
struct vkd3d_shader_immediate_constant_buffer ** icbs
struct vkd3d_shader_param_allocator dst_params
struct vkd3d_shader_param_allocator src_params
struct vkd3d_shader_instruction * elements
struct vkd3d_shader_src_param * src
struct vkd3d_shader_dst_param * dst
struct vkd3d_shader_root_descriptor_table1 descriptor_table
enum vkd3d_shader_root_parameter_type parameter_type
union vkd3d_shader_root_parameter1::@5988 u
union vkd3d_shader_root_parameter::@5987 u
enum vkd3d_shader_root_parameter_type parameter_type
struct vkd3d_shader_root_descriptor_table descriptor_table
unsigned int parameter_count
const struct vkd3d_shader_static_sampler_desc * static_samplers
const struct vkd3d_shader_root_parameter1 * parameters
const struct vkd3d_shader_root_parameter * parameters
const struct vkd3d_shader_static_sampler_desc * static_samplers
unsigned int parameter_count
enum vkd3d_shader_structure_type type
enum vkd3d_shader_scan_context::vkd3d_shader_cf_info::@6018 type
@ VKD3D_SHADER_BLOCK_SWITCH
@ VKD3D_SHADER_BLOCK_LOOP
struct vkd3d_shader_scan_descriptor_info1 * scan_descriptor_info
struct vkd3d_shader_scan_combined_resource_sampler_info * combined_sampler_info
struct vkd3d_shader_message_context * message_context
enum vkd3d_shader_api_version api_version
size_t combined_samplers_size
const struct vkd3d_shader_version * version
struct vkd3d_shader_scan_context::vkd3d_shader_cf_info * cf_info
struct vkd3d_shader_descriptor_info1 * descriptors
unsigned int descriptor_count
struct vkd3d_shader_descriptor_info * descriptors
struct vkd3d_shader_signature patch_constant
struct vkd3d_shader_signature output
struct vkd3d_shader_signature input
enum vkd3d_shader_resource_type resource_type
enum vkd3d_data_type resource_data_type[VKD3D_VEC4_SIZE]
unsigned int sample_count
struct vkd3d_shader_resource resource
unsigned int semantic_index
enum vkd3d_shader_sysval_semantic sysval_semantic
unsigned int stream_index
unsigned int register_index
const char * semantic_name
struct vkd3d_shader_signature_element * elements
unsigned int element_count
int tpf_parse(const struct vkd3d_shader_compile_info *compile_info, uint64_t config_flags, struct vkd3d_shader_message_context *message_context, struct vsir_program *program)
static bool vkd3d_bound_range(size_t start, size_t count, size_t limit)
void vkd3d_dbg_printf(enum vkd3d_dbg_level level, const char *function, const char *fmt,...) VKD3D_PRINTF_FUNC(3
static void vkd3d_parse_version(const char *version, int *major, int *minor)
void void vkd3d_dbg_set_log_callback(PFN_vkd3d_log callback)
#define VKD3D_PRINTF_FUNC(fmt, args)
uint64_t vkd3d_parse_debug_options(const char *string, const struct vkd3d_debug_option *options, unsigned int option_count)
#define vkd3d_unreachable()
#define VKD3D_ASSERT(cond)
static int ascii_strcasecmp(const char *a, const char *b)
static void * vkd3d_calloc(size_t count, size_t size)
static char * vkd3d_strdup(const char *string)
static void vkd3d_free(void *ptr)
static void * vkd3d_malloc(size_t size)
bool vkd3d_array_reserve(void **elements, size_t *capacity, size_t element_count, size_t element_size)
@ VKD3D_SHADER_COMPILE_OPTION_API_VERSION
vkd3d_shader_resource_data_type
@ VKD3D_SHADER_RESOURCE_DATA_DOUBLE
@ VKD3D_SHADER_RESOURCE_DATA_MIXED
@ VKD3D_SHADER_RESOURCE_DATA_SNORM
@ VKD3D_SHADER_RESOURCE_DATA_CONTINUED
@ VKD3D_SHADER_RESOURCE_DATA_UINT
@ VKD3D_SHADER_RESOURCE_DATA_FLOAT
@ VKD3D_SHADER_RESOURCE_DATA_UNORM
@ VKD3D_SHADER_RESOURCE_DATA_INT
@ VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_RAW_BUFFER
@ VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_READ
@ VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_ATOMICS
@ VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_COUNTER
@ VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_SAMPLER_COMPARISON_MODE
@ VKD3D_SHADER_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE
@ VKD3D_SHADER_SOURCE_DXBC_DXIL
@ VKD3D_SHADER_SOURCE_D3D_BYTECODE
@ VKD3D_SHADER_SOURCE_HLSL
@ VKD3D_SHADER_SOURCE_DXBC_TPF
#define VKD3D_SHADER_DUMMY_SAMPLER_INDEX
@ VKD3D_SHADER_LOG_WARNING
@ VKD3D_SHADER_STRUCTURE_TYPE_SCAN_COMBINED_RESOURCE_SAMPLER_INFO
@ VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO
@ VKD3D_SHADER_API_VERSION_1_2
@ VKD3D_SHADER_API_VERSION_1_3
vkd3d_shader_descriptor_type
@ VKD3D_SHADER_DESCRIPTOR_TYPE_UAV
@ VKD3D_SHADER_DESCRIPTOR_TYPE_CBV
@ VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER
@ VKD3D_SHADER_DESCRIPTOR_TYPE_SRV
vkd3d_shader_resource_type
@ VKD3D_SHADER_RESOURCE_NONE
@ VKD3D_SHADER_RESOURCE_BUFFER
@ VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_1
@ VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_0
@ VKD3D_SHADER_TARGET_SPIRV_BINARY
@ VKD3D_SHADER_TARGET_D3D_ASM
@ VKD3D_SHADER_TARGET_NONE
@ VKD3D_SHADER_TARGET_SPIRV_TEXT
@ VKD3D_SHADER_TARGET_DXBC_TPF
@ VKD3D_SHADER_TARGET_GLSL
@ VKD3D_SHADER_TARGET_MSL
@ VKD3D_SHADER_TARGET_D3D_BYTECODE
bool shader_instruction_array_init(struct vkd3d_shader_instruction_array *instructions, unsigned int reserve)
static void vkd3d_shader_scan_resource_declaration(struct vkd3d_shader_scan_context *context, const struct vkd3d_shader_resource *resource, enum vkd3d_shader_resource_type resource_type, enum vkd3d_shader_resource_data_type resource_data_type, unsigned int sample_count, unsigned int structure_stride, bool raw, uint32_t flags)
static struct vkd3d_shader_dst_param * shader_instruction_array_clone_dst_params(struct vkd3d_shader_instruction_array *instructions, const struct vkd3d_shader_dst_param *params, unsigned int count)
void vkd3d_shader_message_context_cleanup(struct vkd3d_shader_message_context *context)
static int char_to_int(char c)
void vkd3d_string_buffer_init(struct vkd3d_string_buffer *buffer)
bool vkd3d_shader_message_context_copy_messages(struct vkd3d_shader_message_context *context, char **out)
void vkd3d_shader_free_scan_signature_info(struct vkd3d_shader_scan_signature_info *info)
static int vsir_program_scan(struct vsir_program *program, const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_message_context *message_context, struct vkd3d_shader_scan_descriptor_info1 *descriptor_info1)
static void init_scan_signature_info(const struct vkd3d_shader_compile_info *info)
int vkd3d_shader_preprocess(const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, char **messages)
int vkd3d_string_buffer_vprintf(struct vkd3d_string_buffer *buffer, const char *format, va_list args)
bool shader_instruction_array_add_icb(struct vkd3d_shader_instruction_array *instructions, struct vkd3d_shader_immediate_constant_buffer *icb)
static struct vkd3d_shader_cf_info * vkd3d_shader_scan_get_current_cf_info(struct vkd3d_shader_scan_context *context)
struct vkd3d_string_buffer * vkd3d_string_buffer_get(struct vkd3d_string_buffer_cache *cache)
void vkd3d_shader_build_varying_map(const struct vkd3d_shader_signature *output_signature, const struct vkd3d_shader_signature *input_signature, unsigned int *ret_count, struct vkd3d_shader_varying_map *varyings)
static void bytecode_set_bytes(struct vkd3d_bytecode_buffer *buffer, size_t offset, const void *value, size_t size)
static struct vkd3d_shader_cf_info * vkd3d_shader_scan_find_innermost_loop_cf_info(struct vkd3d_shader_scan_context *context)
void vkd3d_shader_code_from_string_buffer(struct vkd3d_shader_code *code, struct vkd3d_string_buffer *buffer)
void vkd3d_shader_free_shader_code(struct vkd3d_shader_code *shader_code)
void set_string(struct vkd3d_bytecode_buffer *buffer, size_t offset, const char *string, size_t length)
bool shader_instruction_array_insert_at(struct vkd3d_shader_instruction_array *instructions, unsigned int idx, unsigned int count)
static bool vkd3d_shader_instruction_is_uav_read(const struct vkd3d_shader_instruction *instruction)
void vkd3d_shader_verror(struct vkd3d_shader_message_context *context, const struct vkd3d_shader_location *location, enum vkd3d_shader_error error, const char *format, va_list args)
int vkd3d_string_buffer_print_f64(struct vkd3d_string_buffer *buffer, double d)
static void vkd3d_shader_free_root_signature_v_1_1(struct vkd3d_shader_root_signature_desc1 *root_signature)
int vkd3d_shader_compile(const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, char **messages)
static int vkd3d_shader_scan_instruction(struct vkd3d_shader_scan_context *context, const struct vkd3d_shader_instruction *instruction)
static void vkd3d_shader_scan_record_uav_atomic_op(struct vkd3d_shader_scan_context *context, const struct vkd3d_shader_register *reg)
struct vkd3d_shader_signature_element * vkd3d_shader_find_signature_element(const struct vkd3d_shader_signature *signature, const char *semantic_name, unsigned int semantic_index, unsigned int stream_index)
static void shader_param_allocator_destroy(struct vkd3d_shader_param_allocator *allocator)
static int vkd3d_shader_validate_compile_info(const struct vkd3d_shader_compile_info *compile_info, bool validate_target_type)
static const char * shader_get_source_type_suffix(enum vkd3d_shader_source_type type)
static struct vkd3d_shader_param_node * shader_param_allocator_node_create(struct vkd3d_shader_param_allocator *allocator)
uint32_t vkd3d_parse_integer(const char *s)
void vkd3d_shader_free_shader_signature(struct vkd3d_shader_signature *signature)
static struct vkd3d_shader_src_param * shader_instruction_array_clone_src_params(struct vkd3d_shader_instruction_array *instructions, const struct vkd3d_shader_src_param *params, unsigned int count)
void vkd3d_string_buffer_release(struct vkd3d_string_buffer_cache *cache, struct vkd3d_string_buffer *buffer)
size_t bytecode_put_bytes_unaligned(struct vkd3d_bytecode_buffer *buffer, const void *bytes, size_t size)
static struct vkd3d_shader_descriptor_info1 * vkd3d_shader_scan_add_descriptor(struct vkd3d_shader_scan_context *context, enum vkd3d_shader_descriptor_type type, const struct vkd3d_shader_register *reg, const struct vkd3d_shader_register_range *range, enum vkd3d_shader_resource_type resource_type, enum vkd3d_shader_resource_data_type resource_data_type)
void vkd3d_shader_free_scan_combined_resource_sampler_info(struct vkd3d_shader_scan_combined_resource_sampler_info *info)
static void vkd3d_shader_scan_typed_resource_declaration(struct vkd3d_shader_scan_context *context, const struct vkd3d_shader_instruction *instruction)
void vkd3d_string_buffer_cleanup(struct vkd3d_string_buffer *buffer)
void vkd3d_string_buffer_truncate(struct vkd3d_string_buffer *buffer, size_t size)
size_t bytecode_reserve_bytes(struct vkd3d_bytecode_buffer *buffer, size_t size)
size_t bytecode_align(struct vkd3d_bytecode_buffer *buffer)
int vkd3d_string_buffer_print_f32(struct vkd3d_string_buffer *buffer, float f)
void shader_instruction_array_destroy(struct vkd3d_shader_instruction_array *instructions)
static bool vkd3d_shader_signature_from_shader_signature(struct vkd3d_shader_signature *signature, const struct shader_signature *src)
static void vkd3d_shader_scan_constant_buffer_declaration(struct vkd3d_shader_scan_context *context, const struct vkd3d_shader_instruction *instruction)
void vkd3d_string_buffer_clear(struct vkd3d_string_buffer *buffer)
void vkd3d_string_buffer_cache_init(struct vkd3d_string_buffer_cache *cache)
static const struct vkd3d_shader_descriptor_info1 * find_descriptor(const struct vkd3d_shader_scan_descriptor_info1 *info, enum vkd3d_shader_descriptor_type type, unsigned int register_id)
int vkd3d_shader_scan(const struct vkd3d_shader_compile_info *compile_info, char **messages)
static struct vkd3d_shader_cf_info * vkd3d_shader_scan_find_innermost_breakable_cf_info(struct vkd3d_shader_scan_context *context)
static void fill_shader_dump_data(const struct vkd3d_shader_compile_info *compile_info, struct shader_dump_data *data)
void * shader_param_allocator_get(struct vkd3d_shader_param_allocator *allocator, unsigned int count)
void vkd3d_shader_message_context_init(struct vkd3d_shader_message_context *context, enum vkd3d_shader_log_level log_level)
void vkd3d_shader_warning(struct vkd3d_shader_message_context *context, const struct vkd3d_shader_location *location, enum vkd3d_shader_error error, const char *format,...)
static void vkd3d_shader_dump_shader(const struct shader_dump_data *dump_data, const void *data, size_t size, bool source)
static void vkd3d_shader_free_scan_descriptor_info1(struct vkd3d_shader_scan_descriptor_info1 *scan_descriptor_info)
static void vkd3d_shader_scan_sampler_declaration(struct vkd3d_shader_scan_context *context, const struct vkd3d_shader_instruction *instruction)
static const char * shader_get_target_type_suffix(enum vkd3d_shader_target_type type)
static void vkd3d_shader_free_root_signature_v_1_0(struct vkd3d_shader_root_signature_desc *root_signature)
void vkd3d_shader_vwarning(struct vkd3d_shader_message_context *context, const struct vkd3d_shader_location *location, enum vkd3d_shader_error error, const char *format, va_list args)
static enum vkd3d_result vsir_parse(const struct vkd3d_shader_compile_info *compile_info, uint64_t config_flags, struct vkd3d_shader_message_context *message_context, struct vsir_program *program)
static void vkd3d_shader_scan_add_uav_flag(const struct vkd3d_shader_scan_context *context, const struct vkd3d_shader_register *reg, uint32_t flag)
void vkd3d_shader_free_messages(char *messages)
static void vkd3d_shader_scan_record_uav_counter(struct vkd3d_shader_scan_context *context, const struct vkd3d_shader_register *reg)
void vkd3d_shader_message_context_trace_messages_(const struct vkd3d_shader_message_context *context, const char *function)
static bool vkd3d_shader_instruction_is_uav_atomic_op(const struct vkd3d_shader_instruction *instruction)
void vkd3d_shader_set_log_callback(PFN_vkd3d_log callback)
static void vkd3d_shader_scan_pop_cf_info(struct vkd3d_shader_scan_context *context)
void shader_signature_cleanup(struct shader_signature *signature)
static enum vkd3d_result convert_descriptor_info(struct vkd3d_shader_scan_descriptor_info *info, const struct vkd3d_shader_scan_descriptor_info1 *info1)
void set_u32(struct vkd3d_bytecode_buffer *buffer, size_t offset, uint32_t value)
static const struct vkd3d_debug_option vkd3d_shader_config_options[]
static bool vkd3d_shader_instruction_is_uav_counter(const struct vkd3d_shader_instruction *instruction)
static void vkd3d_shader_scan_context_init(struct vkd3d_shader_scan_context *context, const struct vkd3d_shader_version *version, const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_scan_descriptor_info1 *scan_descriptor_info, struct vkd3d_shader_scan_combined_resource_sampler_info *combined_sampler_info, struct vkd3d_shader_message_context *message_context)
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)
static void vkd3d_shader_scan_combined_sampler_declaration(struct vkd3d_shader_scan_context *context, const struct vkd3d_shader_semantic *semantic)
static bool vkd3d_string_buffer_resize(struct vkd3d_string_buffer *buffer, int rc)
static bool shader_register_clone_relative_addresses(struct vkd3d_shader_register *reg, struct vkd3d_shader_instruction_array *instructions)
void vkd3d_string_buffer_cache_cleanup(struct vkd3d_string_buffer_cache *cache)
const char * vkd3d_shader_get_version(unsigned int *major, unsigned int *minor)
enum vkd3d_shader_target_type * vkd3d_shader_get_supported_target_types(enum vkd3d_shader_source_type source_type, unsigned int *count)
static void vkd3d_shader_scan_combined_sampler_usage(struct vkd3d_shader_scan_context *context, const struct vkd3d_shader_register *resource, const struct vkd3d_shader_register *sampler)
static struct vkd3d_shader_cf_info * vkd3d_shader_scan_push_cf_info(struct vkd3d_shader_scan_context *context)
bool shader_instruction_array_clone_instruction(struct vkd3d_shader_instruction_array *instructions, unsigned int dst, unsigned int src)
void vkd3d_shader_vnote(struct vkd3d_shader_message_context *context, const struct vkd3d_shader_location *location, enum vkd3d_shader_log_level level, const char *format, va_list args)
static void vkd3d_shader_scan_record_uav_read(struct vkd3d_shader_scan_context *context, const struct vkd3d_shader_register *reg)
uint64_t vkd3d_shader_init_config_flags(void)
static void shader_param_allocator_init(struct vkd3d_shader_param_allocator *allocator, unsigned int count, unsigned int stride)
int vsir_program_compile(struct vsir_program *program, uint64_t config_flags, const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context)
bool shader_instruction_array_reserve(struct vkd3d_shader_instruction_array *instructions, unsigned int reserve)
void vkd3d_shader_free_root_signature(struct vkd3d_shader_versioned_root_signature_desc *desc)
void vkd3d_shader_free_scan_descriptor_info(struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info)
size_t bytecode_put_bytes(struct vkd3d_bytecode_buffer *buffer, const void *bytes, size_t size)
void vkd3d_string_buffer_trace_(const struct vkd3d_string_buffer *buffer, const char *function)
void vkd3d_shader_trace_text_(const char *text, size_t size, const char *function)
enum vkd3d_shader_source_type * vkd3d_shader_get_supported_source_types(unsigned int *count)
static void vkd3d_shader_scan_context_cleanup(struct vkd3d_shader_scan_context *context)
static int compile_hlsl(const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context)
int vkd3d_shader_parse_input_signature(const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_signature *signature, char **messages)
int vkd3d_string_buffer_printf(struct vkd3d_string_buffer *buffer, const char *format,...)
#define vkd3d_find_struct(c, t)
static bool vkd3d_shader_ver_ge(const struct vkd3d_shader_version *v, unsigned int major, unsigned int minor)
@ VKD3DSPR_COMBINED_SAMPLER
#define VKD3DSI_SAMPLER_COMPARISON_MODE
@ VKD3D_SHADER_WARNING_VSIR_DYNAMIC_DESCRIPTOR_ARRAY
@ VKD3D_SHADER_ERROR_TPF_MISMATCHED_CF
@ VKD3DSIH_IMM_ATOMIC_XOR
@ VKD3DSIH_DCL_RESOURCE_RAW
@ VKD3DSIH_IMM_ATOMIC_CONSUME
@ VKD3DSIH_DCL_UAV_STRUCTURED
@ VKD3DSIH_IMM_ATOMIC_ALLOC
@ VKD3DSIH_DCL_RESOURCE_STRUCTURED
@ VKD3DSIH_DCL_CONSTANT_BUFFER
#define vkd3d_shader_message_context_trace_messages(context)
@ VKD3D_SHADER_CONFIG_FLAG_FORCE_VALIDATION
void vkd3d_shader_parser_error(struct vkd3d_shader_parser *parser, enum vkd3d_shader_error error, const char *format,...) VKD3D_PRINTF_FUNC(3
int preproc_lexer_parse(const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context)
void vkd3d_shader_parser_warning(struct vkd3d_shader_parser *parser, enum vkd3d_shader_error error, const char *format,...) VKD3D_PRINTF_FUNC(3
static struct vkd3d_shader_src_param * shader_src_param_allocator_get(struct vkd3d_shader_param_allocator *allocator, unsigned int count)
static struct vkd3d_shader_dst_param * shader_dst_param_allocator_get(struct vkd3d_shader_param_allocator *allocator, unsigned int count)
@ VKD3D_ERROR_INVALID_ARGUMENT
@ VKD3D_ERROR_NOT_IMPLEMENTED
@ VKD3D_ERROR_INVALID_SHADER
@ VKD3D_ERROR_OUT_OF_MEMORY
void(* PFN_vkd3d_log)(const char *format, va_list args)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
static size_t align(size_t addr, size_t alignment)