21#include "wine/rbtree.h"
26#ifdef HAVE_SPIRV_UNIFIED1_SPIRV_H
27# include "spirv/unified1/spirv.h"
31#ifdef HAVE_SPIRV_UNIFIED1_GLSL_STD_450_H
32# include "spirv/unified1/GLSL.std.450.h"
37#ifdef HAVE_SPIRV_TOOLS
38# include "spirv-tools/libspirv.h"
45 return SPV_ENV_OPENGL_4_5;
47 return SPV_ENV_VULKAN_1_0;
49 return SPV_ENV_VULKAN_1_1;
52 return SPV_ENV_VULKAN_1_0;
78 if (valuemap[
i].
invert == !(formatting & valuemap[
i].vkd3d))
79 out |= valuemap[
i].spv;
89 spv_diagnostic diagnostic =
NULL;
98 get_binary_to_text_options(formatting), &
text, &diagnostic)))
100 const char *
p, *
q, *
end, *pad, *truncate;
116 for (pad =
"", line_len = 100;
q -
p > line_len; line_len = 100 -
strlen(pad))
118 if (!(truncate =
memchr(
p + line_len,
' ',
q -
p - line_len)))
134 FIXME(
"Failed to convert SPIR-V binary to text, ret %d.\n", spvret);
139 spvTextDestroy(
text);
140 spvDiagnosticDestroy(diagnostic);
163 spv_diagnostic diagnostic =
NULL;
175 spvDiagnosticDestroy(diagnostic);
250#define VKD3D_SPIRV_VERSION_1_0 0x00010000
251#define VKD3D_SPIRV_VERSION_1_3 0x00010300
252#define VKD3D_SPIRV_GENERATOR_ID 18
253#define VKD3D_SPIRV_GENERATOR_VERSION 14
254#define VKD3D_SPIRV_GENERATOR_MAGIC vkd3d_make_u32(VKD3D_SPIRV_GENERATOR_VERSION, VKD3D_SPIRV_GENERATOR_ID)
314 return stream->word_count;
346 size_t src_location = 0;
351 src_word_count +=
chunk->word_count;
494 ERR(
"Unhandled execution model %#x.\n", model);
521 unsigned int word_idx,
i;
524 for (word_idx = 0; word_idx <
word_count; ++word_idx)
548 *
id = build_pfn(builder);
552#define MAX_SPIRV_DECLARATION_PARAMETER_COUNT 7
575 return memcmp(&
a->parameters, &
b->parameters,
a->parameter_count *
sizeof(*
a->parameters));
597 ERR(
"Failed to insert declaration entry.\n");
625 unsigned int i, param_idx = 0;
630 WARN(
"Unsupported parameter count %u (opcode %#x).\n", operand_count + 1,
op);
631 return build_pfn(builder, operand0, operands, operand_count);
636 for (
i = 0;
i < operand_count; ++
i)
643 declaration.id = build_pfn(builder, operand0, operands, operand_count);
662 declaration.id = build_pfn(builder, operand0, operand1);
680 declaration.id = build_pfn(builder, operands[0], operands[1], operands[2],
681 operands[3], operands[4], operands[5], operands[6]);
713 for (
i = 0;
i < operand_count; ++
i)
719 const uint32_t *operands,
unsigned int operand_count)
725 for (
i = 0;
i < operand_count; ++
i)
731 const uint32_t *operands,
unsigned int operand_count)
738 for (
i = 0;
i < operand_count; ++
i)
756 const uint32_t *operands,
unsigned int operand_count)
778 uint32_t operands[] = {operand0, operand1};
784 const uint32_t *operands,
unsigned int operand_count)
793 const uint32_t *operands,
unsigned int operand_count)
817 uint32_t operands[] = {operand0, operand1};
826 uint32_t operands[] = {operand0, operand1, operand2};
851 for (
i = 0;
i < operand_count; ++
i)
910 uint32_t *operands,
unsigned int operand_count)
913 SpvOpExtInst, result_type, inst_set, inst_number, operands, operand_count);
931 for (
i = 0;
i < interface_size; ++
i)
945 unsigned int name_size;
964 unsigned int name_size;
985 SpvOpDecorate, target_id, decoration, literals, literal_count);
999 structure_type_id, member_idx, decoration, literals, literal_count);
1093 uint32_t *members,
unsigned int member_count)
1143 uint32_t return_type,
const uint32_t *param_types,
unsigned int param_count)
1150 uint32_t return_type,
const uint32_t *param_types,
unsigned int param_count)
1225 uint32_t result_type,
const uint32_t *constituents,
unsigned int constituent_count)
1232 uint32_t result_type,
const uint32_t *constituents,
unsigned int constituent_count)
1239 uint32_t result_type,
const uint32_t *constituents,
unsigned int constituent_count)
1263 SpvOpFunction, result_type, result_id, function_control, &function_type, 1);
1331 uint32_t result_type,
const uint32_t *constituents,
unsigned int constituent_count)
1334 result_type, constituents, constituent_count);
1341 result_type, composite_id, indexes, index_count);
1352 const uint32_t *indexes,
unsigned int index_count)
1355 result_type, object_id, composite_id, indexes, index_count);
1369 result_type, pointer_id);
1372 result_type, pointer_id, memory_access);
1380 pointer_id, object_id);
1383 pointer_id, object_id, memory_access);
1401 SpvOpSelect, result_type, condition_id, object0_id, object1_id);
1431 merge_block, continue_target, loop_control);
1438 merge_block, selection_control);
1458 selector, default_label, targets, 2 * target_count);
1465 SpvOpIAdd, result_type, operand0, operand1);
1472 SpvOpIMul, result_type, operand0, operand1);
1479 SpvOpUDiv, result_type, operand0, operand1);
1486 SpvOpISub, result_type, operand0, operand1);
1493 SpvOpFDiv, result_type, operand0, operand1);
1621 uint32_t image_operands_mask,
const uint32_t *image_operands,
unsigned int image_operand_count)
1623 unsigned int index = 0,
i;
1627 for (
i = 0;
i < operand_count; ++
i)
1630 if (image_operands_mask)
1633 w[
index++] = image_operands_mask;
1634 for (
i = 0;
i < image_operand_count; ++
i)
1635 w[
index++] = image_operands[
i];
1644 uint32_t image_operands_mask,
const uint32_t *image_operands,
unsigned int image_operand_count)
1646 const uint32_t operands[] = {sampled_image_id, coordinate_id};
1654 operands,
ARRAY_SIZE(operands), image_operands_mask, image_operands, image_operand_count);
1659 uint32_t image_operands_mask,
const uint32_t *image_operands,
unsigned int image_operand_count)
1661 const uint32_t operands[] = {sampled_image_id, coordinate_id, dref_id};
1669 operands,
ARRAY_SIZE(operands), image_operands_mask, image_operands, image_operand_count);
1674 uint32_t image_operands_mask,
const uint32_t *image_operands,
unsigned int image_operand_count)
1676 const uint32_t operands[] = {sampled_image_id, coordinate_id, component_id};
1678 operands,
ARRAY_SIZE(operands), image_operands_mask, image_operands, image_operand_count);
1683 uint32_t image_operands_mask,
const uint32_t *image_operands,
unsigned int image_operand_count)
1685 const uint32_t operands[] = {sampled_image_id, coordinate_id, dref_id};
1687 operands,
ARRAY_SIZE(operands), image_operands_mask, image_operands, image_operand_count);
1692 uint32_t image_operands_mask,
const uint32_t *image_operands,
unsigned int image_operand_count)
1694 const uint32_t operands[] = {image_id, coordinate_id};
1696 operands,
ARRAY_SIZE(operands), image_operands_mask, image_operands, image_operand_count);
1701 uint32_t image_operands_mask,
const uint32_t *image_operands,
unsigned int image_operand_count)
1703 const uint32_t operands[] = {image_id, coordinate_id};
1705 operands,
ARRAY_SIZE(operands), image_operands_mask, image_operands, image_operand_count);
1710 uint32_t image_operands,
const uint32_t *operands,
unsigned int operand_count)
1713 FIXME(
"Image operands not supported.\n");
1716 image_id, coordinate_id, texel_id);
1995 uint32_t void_id, function_type_id;
2038 for (
i = 0; capability_mask; ++
i)
2040 if (capability_mask & 1)
2042 capability_mask >>= 1;
2265 return memcmp(&
a->key, &
b->key,
sizeof(
a->key));
2287 symbol->
key.
reg.idx =
reg->idx_count ?
reg->idx[
reg->idx_count - 1].offset : ~0
u;
2292 symbol->
key.
reg.idx =
reg->idx_count > 1 ?
reg->idx[0].offset : 0;
2296 symbol->
key.
reg.idx =
reg->idx_count ?
reg->idx[0].offset : ~0
u;
2313 symbol->
id = val_id;
2316 symbol->
info.
reg.member_idx = 0;
2318 symbol->
info.
reg.write_mask = write_mask;
2319 symbol->
info.
reg.structure_stride = 0;
2320 symbol->
info.
reg.binding_base_idx = 0;
2321 symbol->
info.
reg.is_aggregate =
false;
2342 const struct vkd3d_shader_register *resource_reg,
unsigned int sampler_space,
unsigned int sampler_index)
2359 return memcpy(
s, symbol,
sizeof(*
s));
2364 switch (symbol->
type)
2524 return info &&
info->entry_point ?
info->entry_point :
"main";
2568 memset(compiler, 0,
sizeof(*compiler));
2739 for (
i = 0;
info &&
i <
info->extension_count; ++
i)
2741 if (
info->extensions[
i] == extension)
2768 ERR(
"Invalid shader visibility %#x.\n", visibility);
2776 unsigned int register_space =
range->space;
2777 unsigned int reg_idx =
range->first;
2790 if (
current->pc.register_space == register_space &&
current->pc.register_index == reg_idx)
2861 compiler->failed =
true;
2904 unsigned int register_last = (
range->last == ~0
u) ?
range->first :
range->last;
2921 FIXME(
"Unhandled register type %#x.\n",
reg->type);
2923 "Encountered invalid/unhandled register type %#x.",
reg->type);
2933 binding_offsets = compiler->offset_info.uav_counter_offsets;
2942 ||
current->binding.count <= register_last -
current->register_index)
2947 FIXME(
"Atomic counter offsets are not supported yet.\n");
2949 "Descriptor binding for UAV counter %u, space %u has unsupported ‘offset’ %u.",
2953 binding_address->binding_base_idx =
current->register_index
2954 - (binding_offsets ? binding_offsets[
i].static_offset : 0);
2955 binding_address->push_constant_index = binding_offsets ? binding_offsets[
i].dynamic_offset_index : ~0
u;
2960 FIXME(
"Could not find descriptor binding for UAV counter %u, space %u.\n",
range->first,
range->space);
2962 "Could not find descriptor binding for UAV counter %u, space %u.",
range->first,
range->space);
2967 binding_offsets = compiler->offset_info.binding_offsets;
2972 if (!(
current->flags & resource_type_flag))
2980 ||
current->binding.count <= register_last -
current->register_index)
2983 binding_address->binding_base_idx =
current->register_index
2984 - (binding_offsets ? binding_offsets[
i].static_offset : 0);
2985 binding_address->push_constant_index = binding_offsets ? binding_offsets[
i].dynamic_offset_index : ~0
u;
2992 FIXME(
"Could not find descriptor binding for type %#x, space %u, registers %s, shader type %#x.\n",
2993 descriptor_type,
range->space, range_str, compiler->shader_type);
2995 "Could not find descriptor binding for type %#x, space %u, registers %s, shader type %#x.",
2996 descriptor_type,
range->space, range_str, compiler->shader_type);
3002 binding_address->binding_base_idx =
range->first;
3003 binding_address->push_constant_index = ~0
u;
3006 binding.binding = compiler->binding_idx++;
3062 FIXME(
"Unsupported vector of bool.\n");
3064 "Vectors of bool type are not supported.");
3182 idx =
reg->idx_count ?
reg->idx[
reg->idx_count - 1].offset : 0;
3203 FIXME(
"Unhandled rastout register %#x.\n",
idx);
3269 FIXME(
"Unhandled register %#x.\n",
reg->type);
3281 char debug_name[256];
3289 const unsigned int *array_lengths,
unsigned int length_count)
3296 for (
i = 0;
i < length_count; ++
i)
3298 if (!array_lengths[
i])
3338 FIXME(
"Unhandled parameter name %#x.\n",
name);
3348 unsigned int i,
id = 0;
3350 for (
i = 0;
i < compiler->
program->parameter_count; ++
i)
3359 id =
max(
current->u.specialization_constant.id + 4,
id);
3363 id =
max(
current->u.specialization_constant.id + 1,
id);
3435 unsigned int index = parameter - compiler->
program->parameters;
3465 WARN(
"Unresolved shader parameter %#x.\n",
name);
3466 goto default_parameter;
3471 ERR(
"Expected type %#x, count %u for parameter %#x, got %#x.\n",
3484 FIXME(
"Unhandled parameter type %#x.\n", parameter->
type);
3493 uint32_t val_id,
unsigned int val_component_idx,
unsigned int val_component_count)
3503 if (val_component_count == 1)
3566 register_info->
id = compiler->
temp_id +
reg->idx[0].offset;
3583 memset(register_info, 0,
sizeof(*register_info));
3588 register_info->
id = symbol->
id;
3644 unsigned int push_constant_index;
3651 FIXME(
"The target environment does not support descriptor indexing.\n");
3653 "Cannot dynamically index a descriptor array of type %#x, id %u. "
3654 "The target environment does not support descriptor indexing.",
reg->type,
reg->idx[0].offset);
3658 index.offset -= binding_base_idx;
3661 if (push_constant_index != ~0
u)
3714 if (
reg->idx_count > 2)
3716 if (
reg->idx_count > 1)
3724 if (
reg->idx_count &&
reg->idx[
reg->idx_count - 1].rel_addr)
3725 FIXME(
"Relative addressing not implemented.\n");
3734 TRACE(
"Ignoring alignment %u.\n",
reg->alignment);
3742 register_info->
id, indexes, index_count);
3743 if (
reg->non_uniform)
3757 return register_info.
id;
3808 if (val_component_count == 1)
3939 while (!(
m & 0x400u))
3953 return s | 0x7f800000u | (
m << 13);
3961 return s | (
e << 23) |
m;
4059 unsigned int component_idx, reg_component_count;
4069 if (skipped_component_mask)
4077 ERR(
"Invalid component_idx %u for register %#x, %u (write_mask %#x).\n",
4078 component_idx,
reg->type,
reg->idx[0].offset,
reg_info->write_mask);
4083 if (reg_component_count != 1)
4143 "Failed to allocate %u constant array elements.",
element_count);
4175 "Immediate constant buffer data type %u is unhandled.", icb->
data_type);
4195 unsigned int i =
reg->idx[0].offset;
4208 unsigned int component_idx;
4350 FIXME(
"Unhandled data type %#x.\n",
reg->data_type);
4366 FIXME(
"Unhandled data type %#x.\n",
reg->data_type);
4386 FIXME(
"Unhandled src modifier %#x.\n", modifier);
4417 unsigned int component_idx;
4439 unsigned int i, src_idx, dst_idx;
4452 write_mask &= dst_write_mask;
4469 for (
i = 0, src_idx = 0, dst_idx = 0; dst_idx <
VKD3D_VEC4_SIZE; ++dst_idx)
4548 FIXME(
"Unhandled data type %#x.\n",
reg->data_type);
4558 modifiers &= ~VKD3DSPDM_PARTIALPRECISION;
4563 modifiers &= ~VKD3DSPDM_SATURATE;
4568 FIXME(
"Ignoring _centroid modifier.\n");
4569 modifiers &= ~VKD3DSPDM_MSAMPCENTROID;
4607 val_id = *component_ids;
4623 unsigned int component_idx,
i;
4629 ERR(
"Invalid swizzle %#x for scalar value, write mask %#x.\n",
swizzle,
dst->write_mask);
4631 component_ids[
i] = val_id;
4663 FIXME(
"The target environment does not support decoration Layer.\n");
4665 "Cannot use SV_RenderTargetArrayIndex. "
4666 "The target environment does not support decoration Layer.");
4673 "Invalid use of SV_RenderTargetArrayIndex.");
4690 FIXME(
"The target environment does not support decoration ViewportIndex.\n");
4692 "Cannot use SV_ViewportArrayIndex. "
4693 "The target environment does not support decoration ViewportIndex.");
4700 "Invalid use of SV_ViewportArrayIndex.");
4758 FIXME(
"Unhandled interpolation mode %#x.\n",
mode);
4932 FIXME(
"The target environment does not support stencil export.\n");
4934 "Cannot export stencil reference value. "
4935 "The target environment does not support stencil export.");
4967 FIXME(
"Unhandled builtin (sysval %#x).\n",
sysval);
5033 switch (compiler->
phase)
5045 ERR(
"Invalid phase type %#x.\n", compiler->
phase);
5089 for (
i = 0; xfb_element != &xfb_info->
elements[
i]; ++
i)
5111 stride += 4 *
e->component_count;
5122 unsigned int size_count)
5125 unsigned int sizes[2];
5130 array_sizes =
sizes;
5134 builtin->component_type,
builtin->component_count, array_sizes, size_count);
5159 unsigned int i, max_row;
5164 for (
i = 0, max_row = 0;
i <
signature->element_count; ++
i)
5173 unsigned int component_idx, input_component_count;
5179 uint32_t write_mask, reg_write_mask;
5186 bool use_private_var =
false;
5187 unsigned int array_sizes[2];
5215 input_component_count =
builtin->component_count;
5227 use_private_var =
true;
5228 reg_write_mask = write_mask;
5233 reg_write_mask = write_mask >> component_idx;
5247 FIXME(
"Duplicate input definition found.\n");
5279 if (use_private_var)
5289 reg_symbol.
info.
reg.is_aggregate = array_sizes[0] || array_sizes[1];
5295 if (use_private_var)
5300 dst_reg.
idx[0].offset = element_idx;
5307 val_id =
builtin->fixup_pfn(compiler, val_id);
5341 FIXME(
"Unhandled register %#x.\n",
reg->type);
5361 unsigned int register_idx)
5367 if (register_idx >=
info->output_swizzle_count)
5369 return info->output_swizzles[register_idx];
5381 unsigned int write_mask;
5385 FIXME(
"Invalid semantic index %u for clip/cull distance.\n",
e->semantic_index);
5397 uint32_t clip_distance_mask = 0, clip_distance_id = 0;
5398 uint32_t cull_distance_mask = 0, cull_distance_id = 0;
5406 switch (
e->sysval_semantic)
5421 if (clip_distance_mask)
5429 if (cull_distance_mask)
5441 switch (
e->sysval_semantic)
5446 compiler->
output_info[
i].array_element_mask = clip_distance_mask;
5452 compiler->
output_info[
i].array_element_mask = cull_distance_mask;
5480 FIXME(
"Unhandled register %#x.\n",
reg->type);
5505 variable_id = &compiler->
hs.tess_level_outer_id;
5507 variable_id = &compiler->
hs.tess_level_inner_id;
5509 if (variable_id && *variable_id)
5510 return *variable_id;
5525 unsigned int component_idx, output_component_count;
5532 bool use_private_variable =
false;
5535 unsigned int array_sizes[2];
5536 bool is_patch_constant;
5562 if (!
builtin->spirv_array_size)
5563 output_component_count =
builtin->component_count;
5573 use_private_variable =
true;
5575 if (!is_patch_constant
5579 use_private_variable =
true;
5587 FIXME(
"Duplicate output definition found.\n");
5591 if (!is_patch_constant && compiler->
output_info[element_idx].id)
5614 if (is_patch_constant)
5638 if (is_patch_constant)
5643 if (!is_patch_constant)
5650 if (use_private_variable)
5660 reg_symbol.
info.
reg.is_aggregate = array_sizes[0] || array_sizes[1];
5667 if (use_private_variable)
5690 return e->semantic_index;
5696 const struct vkd3d_shader_output_info *output_info,
5703 unsigned int i,
index, array_idx;
5706 dst_write_mask = output->
mask;
5717 dst_write_mask |=
element->mask;
5718 use_mask |=
element->used_mask;
5722 dst_write_mask >>=
index;
5724 write_mask &= dst_write_mask;
5736 uninit_mask = dst_write_mask & ~use_mask;
5740 write_mask |= uninit_mask;
5744 zero_id, val_id,
swizzle, uninit_mask, output_info->component_type,
5753 output_id = output_info->id;
5754 if (output_index_id)
5762 if (!output_info->array_element_mask)
5771 mask = output_info->array_element_mask;
5792 uint32_t void_id,
type_id, ptr_type_id, function_type_id, function_id;
5796 bool is_patch_constant;
5815 param_type_id[
count++] = ptr_type_id;
5930 flags &= ~VKD3DSGF_FORCE_EARLY_DEPTH_STENCIL;
5941 WARN(
"Unsupported 64-bit float ops.\n");
5943 "The target environment does not support 64-bit floating point.");
5956 WARN(
"Unsupported 64-bit integer ops.\n");
5958 "The target environment does not support 64-bit integers.");
5960 flags &= ~VKD3DSGF_ENABLE_INT64;
5967 WARN(
"Unsupported wave ops.\n");
5969 "The target environment does not support wave ops.");
5973 WARN(
"Wave ops enabled but environment does not support SPIR-V 1.3 or greater.\n");
5975 "The target environment uses wave ops but does not support SPIR-V 1.3 or greater.");
5977 flags &= ~VKD3DSGF_ENABLE_WAVE_INTRINSICS;
5989 size_t function_location;
6017 ERR(
"Failed to allocate SSA register value id array, count %u.\n",
count);
6019 "Failed to allocate SSA register value id array of count %u.",
count);
6034 size_t function_location;
6042 reg.idx[0].offset =
temp->register_idx;
6045 if (
temp->alignment)
6046 TRACE(
"Ignoring alignment %u.\n",
temp->alignment);
6056 if (
temp->initialiser)
6072 unsigned int i,
j,
count, reg_idx, descriptor_offsets_member_idx = 0;
6074 uint32_t vec4_id, length_id, struct_id, pointer_type_id, var_id;
6114 descriptor_offsets_member_idx =
j;
6136 reg_idx =
cb->reg.idx[0].offset;
6144 reg_symbol.
info.
reg.member_idx =
j;
6161 unsigned int register_last = (
range->last == ~0
u) ?
range->first :
range->last;
6168 if (
d->type ==
type &&
d->register_space ==
range->space &&
d->register_index <=
range->first
6169 && (
d->count == ~0
u ||
d->count > register_last -
d->register_index))
6183 uint32_t var_id,
bool write_only,
bool coherent)
6202 uint32_t array_type_id, ptr_type_id, var_id;
6203 bool write_only =
false, coherent =
false;
6208 resource_type, is_uav_counter, &binding_address);
6239 symbol.
type = VKD3D_SYMBOL_DESCRIPTOR_ARRAY;
6272 uint32_t vec4_id, array_type_id, length_id, struct_id, var_id;
6274 unsigned int size_in_bytes =
descriptor->buffer_size;
6296 if (size_in_bytes > push_cb->
pc.size)
6298 WARN(
"Constant buffer size %u exceeds push constant size %u.\n",
6299 size_in_bytes, push_cb->
pc.size);
6422 bool raw_structured)
6426 bool uav_read, uav_atomics;
6473 if (!(
current->flags & resource_type_flag))
6479 if (
current->binding.count != 1)
6481 FIXME(
"Descriptor arrays are not supported.\n");
6483 "Combined descriptor binding for resource %u, space %u, "
6484 "and sampler %u, space %u has unsupported ‘count’ %u.",
6501 resource_range->
first);
6515 symbol.
info.
resource.structure_stride = structure_stride;
6531 unsigned int structure_stride =
descriptor->structure_stride / 4;
6536 unsigned int sample_count =
descriptor->sample_count;
6550 resource_type, is_uav)))
6552 FIXME(
"Unrecognized resource type.\n");
6596 "Rasteriser-ordered views are only supported in fragment shaders.");
6600 "Cannot enable fragment shader interlock. "
6601 "The target environment does not support fragment shader interlock.");
6619 uint32_t length_id, array_type_id, struct_id;
6639 resource_symbol.
id = var_id;
6642 resource_symbol.
info.
resource.sampled_type = sampled_type;
6645 resource_symbol.
info.
resource.structure_stride = structure_stride;
6648 resource_symbol.
info.
resource.uav_counter_id = counter_var_id;
6656 unsigned int structure_stride,
bool zero_init)
6658 uint32_t type_id, array_type_id, length_id, pointer_type_id, var_id, init_id;
6681 reg_symbol.
info.
reg.structure_stride = structure_stride;
6729 FIXME(
"Multiple streams are not supported yet.\n");
6745 switch (primitive_type)
6763 FIXME(
"Unhandled primitive type %#x.\n", primitive_type);
6772 if (compiler->
program->has_point_size)
6799 switch (primitive_type)
6812 ERR(
"Unexpected primitive type %#x.\n", primitive_type);
6846 FIXME(
"Invalid tessellator domain %#x.\n",
domain);
6875 FIXME(
"Invalid tessellator output primitive %#x.\n", primitive);
6890 switch (partitioning)
6903 FIXME(
"Invalid tessellator partitioning %#x.\n", partitioning);
6913 const uint32_t local_size[] = {group_size->
x, group_size->
y, group_size->
z};
6949 uint32_t function_id, void_id, function_type_id;
7007 uint32_t type_id, output_ptr_type_id, input_id, dst_id, invocation_id;
7019 memset(&invocation, 0,
sizeof(invocation));
7024 input_reg.
idx[0].offset = 0;
7025 input_reg.
idx[0].rel_addr = &invocation;
7026 input_reg.
idx[1].offset = 0;
7040 input_reg.
idx[1].offset =
i;
7044 output_reg.
idx[0].offset =
i;
7064 uint32_t execution_id, memory_id, semantics_id;
7178 return alu_ops[
i].spirv_op;
7228 WARN(
"Unhandled data type %u.\n",
dst->reg.data_type);
7230 "Register data type %u is unhandled.",
dst->reg.data_type);
7250 FIXME(
"Unsupported 64-bit source for bit count.\n");
7252 "64-bit source for bit count is not supported.");
7380 return glsl_insts[
i].glsl_inst;
7389 uint32_t instr_set_id,
type_id, val_id, rev_val_id, uint_max_id, condition_id;
7425 instr_set_id, glsl_inst, src_id,
instruction->src_count);
7446 uint32_t val_id, dst_val_id,
type_id, dst_id, src_id, write_mask32, swizzle32;
7456 goto general_implementation;
7463 goto general_implementation;
7502general_implementation:
7503 write_mask =
dst->write_mask;
7510 if (
dst->reg.data_type !=
src->reg.data_type)
7681 FIXME(
"Extended multiplies not implemented.\n");
7720 uint32_t type_id, val_id, src0_id, src1_id, condition_id, uint_max_id;
7725 SpvOp div_op, mod_op;
7781 uint32_t src_id, int_min_id, int_max_id, zero_id, float_max_id, condition_id, val_id;
7785 uint32_t src_type_id, dst_type_id, condition_type_id;
7835 uint32_t src_id, zero_id, uint_max_id, float_max_id, condition_id, val_id;
7839 uint32_t src_type_id, dst_type_id, condition_type_id;
7886 unsigned int i,
j,
k, src_count,
size;
7915 for (
j = 0;
j < src_count; ++
j)
7922 for (
j = src_count - 2;
j < src_count; ++
j)
7928 src_ids[src_count - 1], max_count_id);
7963 scalar_type_id, result_id, 0);
7973 uint32_t instr_set_id,
type_id, scalar_type_id, src_id, zero_id, constituents[2];
7994 constituents[0] = src_id;
7995 constituents[1] = zero_id;
8110 uint32_t condition_id, merge_block_id;
8120 return merge_block_id;
8159 uint32_t target_id, merge_block_id;
8181 uint32_t void_id, bool_id, function_type_id, condition_id, target_block_id, merge_block_id;
8256 unsigned int block_id =
src->reg.idx[0].offset;
8263 if (block_id < compiler->block_name_count && compiler->
block_names[block_id])
8274 if (!merge_block_id)
8278 if (!continue_block_id)
8304 ERR(
"Invalid branch with %u sources.\n",
instruction->src_count);
8312 WARN(
"Unexpected src swizzle %#x.\n",
src->swizzle);
8314 "The swizzle for a branch condition value is not scalar.");
8326 ERR(
"Invalid branch with %u sources.\n",
instruction->src_count);
8338 unsigned int i, word_count;
8345 "The swizzle for a switch value is not scalar.");
8349 if (!(cases =
vkd3d_calloc(word_count,
sizeof(*cases))))
8352 "Failed to allocate %u words for switch cases.", word_count);
8362 for (
i = 0;
i < word_count;
i += 2)
8364 cases[
i] =
src[
i].reg.u.immconst_u32[0];
8379 const struct instruction_info *
info;
8383 static const struct instruction_info
8387 bool needs_derivative_control;
8389 deriv_instructions[] =
8404 info = &deriv_instructions[
i];
8414 if (
info->needs_derivative_control)
8439#define VKD3D_IMAGE_FLAG_NONE 0x0
8440#define VKD3D_IMAGE_FLAG_DEPTH 0x1
8441#define VKD3D_IMAGE_FLAG_NO_LOAD 0x2
8442#define VKD3D_IMAGE_FLAG_SAMPLED 0x4
8460 unsigned int sampler_space, sampler_index;
8475 sampler_space = sampler_symbol->
info.
sampler.range.space;
8476 sampler_index = sampler_symbol->
info.
sampler.range.first;
8495 uint32_t sampler_var_id, sampler_id, sampled_image_type_id;
8531 if (symbol->
type == VKD3D_SYMBOL_COMBINED_SAMPLER)
8537 image->image_type_id,
image->sampled_image_id) : 0;
8549 image->image_id = 0;
8564 ERR(
"Failed to get sampler register info.\n");
8565 sampler_var_id = register_info.
id;
8584 sampled_image_type_id,
image->image_id, sampler_id);
8590 image->sampled_image_id = 0;
8615 unsigned int image_operand_count = 0;
8626 coordinate_mask = (1u <<
image.resource_type_info->coordinate_component_count) - 1;
8640 if (multisample &&
image.resource_type_info->ms)
8648 image.image_id, coordinate_id, operands_mask, image_operands, image_operand_count);
8688 uint32_t sampled_type_id, coordinate_id, val_id;
8717 &
src[3], coordinate_mask);
8719 &
src[4], coordinate_mask);
8743 image.sampled_image_id, coordinate_id, operands_mask, image_operands, image_operand_count);
8755 uint32_t sampled_type_id, coordinate_id, dref_id, val_id;
8757 unsigned int image_operand_count = 0;
8766 image_operands[image_operand_count++]
8788 image.sampled_image_id, coordinate_id, dref_id, operands_mask,
8789 image_operands, image_operand_count);
8799 uint32_t sampled_type_id, coordinate_id, component_id, dref_id, val_id;
8806 unsigned int image_operand_count = 0;
8810 bool extended_offset;
8844 coordinate_mask = (1u <<
image.resource_type_info->coordinate_component_count) - 1;
8851 image.sampled_image_id, coordinate_id, dref_id,
8852 operands_mask, image_operands, image_operand_count);
8861 image.sampled_image_id, coordinate_id, component_id,
8862 operands_mask, image_operands, image_operand_count);
8876 uint32_t structure_id = 0, offset_id;
8886 offset_write_mask =
stride ? src1_mask : src0_mask;
8901 uint32_t coordinate_id,
type_id, val_id, texel_type_id, ptr_type_id, ptr_id;
8907 uint32_t base_coordinate_id, component_idx;
8910 bool storage_buffer_uav =
false;
8923 if (storage_buffer_uav)
8940 coordinate_id = base_coordinate_id;
8972 coordinate_id = base_coordinate_id;
8978 op, texel_type_id,
image.image_id, coordinate_id);
8995 uint32_t base_coordinate_id, component_idx;
9015 coordinate_id = base_coordinate_id;
9047 uint32_t coordinate_id,
type_id, val_id, data_id, ptr_type_id, ptr_id;
9052 uint32_t base_coordinate_id, component_idx;
9075 for (component_idx = 0; component_idx <
component_count; ++component_idx)
9080 coordinate_id = base_coordinate_id;
9103 for (component_idx = 0; component_idx <
component_count; ++component_idx)
9109 coordinate_id = base_coordinate_id;
9124 uint32_t coordinate_id,
type_id, val_id, ptr_type_id, ptr_id, data_id;
9128 uint32_t base_coordinate_id, component_idx;
9146 for (component_idx = 0; component_idx <
component_count; ++component_idx)
9151 coordinate_id = base_coordinate_id;
9210 coordinate_mask = (1u <<
image.resource_type_info->coordinate_component_count) - 1;
9224 uint32_t coordinate_id, texel_id,
type_id, val_id, ptr_type_id, ptr_id;
9253 coordinate_mask = (1u <<
image.resource_type_info->coordinate_component_count) - 1;
9270 uint32_t coordinate_id, sample_id, pointer_id;
9279 counter_id = resource_symbol->
info.
resource.uav_counter_id;
9292 resource_symbol->
info.
resource.resource_type_info->resource_type);
9294 array_data = &resource_symbol->
info.
resource.uav_counter_array->info.descriptor_array;
9303 pointer_id = counter_id;
9311 operands[1] = coordinate_id;
9313 ptr_type_id, counter_id, operands, 2);
9320 ptr_type_id, counter_id, coordinate_id, sample_id);
9323 operands[0] = pointer_id;
9371 return atomic_ops[
i].spirv_op;
9392 uint32_t coordinate_id, sample_id, pointer_id;
9416 coordinate_mask = 1u;
9436 coordinate_mask = (1u <<
image.resource_type_info->coordinate_component_count) - 1;
9470 operands[1] = coordinate_id;
9480 ptr_type_id,
image.id, coordinate_id, sample_id);
9488 WARN(
"Ignoring 'volatile' attribute.\n");
9490 "Ignoring the 'volatile' attribute flag for atomic instruction %#x.",
instruction->
opcode);
9497 operands[
i++] = pointer_id;
9505 operands[
i++] = val_id;
9523 unsigned int write_mask;
9544 if (
image.structure_stride)
9548 constituents[1] = stride_id;
9574 unsigned int i, size_component_count;
9576 bool supports_mipmaps;
9581 size_component_count =
image.resource_type_info->coordinate_component_count;
9583 --size_component_count;
9587 if (supports_mipmaps)
9601 constituents[0] = val_id;
9602 for (
i = 0;
i < 3 - size_component_count; ++
i)
9604 constituents[
i + 1] = miplevel_count_id;
9668 constituents[0] = val_id;
9697 static const float standard_sample_positions[][2] =
9700 { 0.0 / 16.0, 0.0 / 16.0},
9702 { 4.0 / 16.0, 4.0 / 16.0},
9703 {-4.0 / 16.0, -4.0 / 16.0},
9705 {-2.0 / 16.0, -6.0 / 16.0},
9706 { 6.0 / 16.0, -2.0 / 16.0},
9707 {-6.0 / 16.0, 2.0 / 16.0},
9708 { 2.0 / 16.0, 6.0 / 16.0},
9710 { 1.0 / 16.0, -3.0 / 16.0},
9711 {-1.0 / 16.0, 3.0 / 16.0},
9712 { 5.0 / 16.0, 1.0 / 16.0},
9713 {-3.0 / 16.0, -5.0 / 16.0},
9714 {-5.0 / 16.0, 5.0 / 16.0},
9715 {-7.0 / 16.0, -1.0 / 16.0},
9716 { 3.0 / 16.0, 7.0 / 16.0},
9717 { 7.0 / 16.0, -7.0 / 16.0},
9719 { 1.0 / 16.0, 1.0 / 16.0},
9720 {-1.0 / 16.0, -3.0 / 16.0},
9721 {-3.0 / 16.0, 2.0 / 16.0},
9722 { 4.0 / 16.0, -1.0 / 16.0},
9723 {-5.0 / 16.0, -2.0 / 16.0},
9724 { 2.0 / 16.0, 5.0 / 16.0},
9725 { 5.0 / 16.0, 3.0 / 16.0},
9726 { 3.0 / 16.0, -5.0 / 16.0},
9727 {-2.0 / 16.0, 6.0 / 16.0},
9728 { 0.0 / 16.0, -7.0 / 16.0},
9729 {-4.0 / 16.0, -6.0 / 16.0},
9730 {-6.0 / 16.0, 4.0 / 16.0},
9731 {-8.0 / 16.0, 0.0 / 16.0},
9732 { 7.0 / 16.0, -4.0 / 16.0},
9733 { 6.0 / 16.0, 7.0 / 16.0},
9734 {-7.0 / 16.0, -8.0 / 16.0},
9739 uint32_t array_type_id, length_id, index_id,
id;
9740 uint32_t sample_count_id, sample_index_id;
9767 for (
i = 0;
i <
ARRAY_SIZE(standard_sample_positions); ++
i)
9798 unsigned int src_count = 0;
9812 src_ids[src_count++] = register_info.
id;
9855 flags &= ~VKD3DSSF_GROUP_SHARED_MEMORY;
9861 flags &= ~VKD3DSSF_THREAD_GROUP;
9869 if (group_uav && global_uav)
9871 WARN(
"Invalid UAV sync flag combination; assuming global.\n");
9873 "The flags for a UAV sync instruction are contradictory; assuming global sync.");
9900 unsigned int stream_idx;
9909 FIXME(
"Multiple streams are not supported yet.\n");
9921 unsigned int stream_idx;
9930 FIXME(
"Multiple streams are not supported yet.\n");
9981 FIXME(
"Unsupported non-constant quad read lane index.\n");
9983 "Non-constant quad read lane indices are not supported.");
10247 instruction->declaration.tessellator_output_primitive);
10251 instruction->declaration.tessellator_partitioning);
10580 "Encountered invalid/unhandled instruction handler %#x.",
instruction->
opcode);
10610 if (compiler->
program->has_point_size)
10619 if (compiler->
program->has_point_coord)
10674 unsigned int i, max_element_count;
10682 max_element_count =
max(
program->output_signature.element_count,
program->patch_constant_signature.element_count);
10697 for (
i = 0;
i <
program->parameter_count; ++
i)
10730 instructions =
program->instructions;
10776 ERR(
"vkd3d_shader_spirv_domain_shader_target_info is required for "
10777 "OpenGL tessellation evaluation shader.\n");
10807 FIXME(
"Failed to validate SPIR-V binary.\n");
10813 "Execution generated an invalid shader, failing compilation:\n%s",
10846 ERR(
"Failed to create SPIR-V compiler.\n");
@ GLSLstd450InterpolateAtCentroid
@ GLSLstd450InterpolateAtSample
@ GLSLstd450UnpackHalf2x16
_Check_return_ _Ret_maybenull_ _In_ size_t alignment
static int list_empty(struct list_entry *head)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
static struct regsvr_interface const interface_list[]
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP size_t __cdecl strlen(const char *)
GLint GLint GLsizei GLsizei GLsizei depth
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 r
GLint GLint GLsizei width
GLuint GLuint GLsizei GLenum const GLvoid * indices
GLdouble GLdouble GLdouble GLdouble q
GLenum GLenum GLuint components
GLboolean GLboolean GLboolean b
GLboolean GLenum GLenum GLvoid * values
GLenum const GLvoid * addr
GLboolean GLboolean GLboolean GLboolean a
GLenum GLenum GLenum input
GLubyte GLubyte GLubyte GLubyte w
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
enum wined3d_data_type data_type
static const struct @335 resource_type_info[]
const struct vkd3d_shader_parameter1 * vsir_program_get_parameter(const struct vsir_program *program, enum vkd3d_shader_parameter_name name)
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_dst_param_init(struct vkd3d_shader_dst_param *param, enum vkd3d_shader_register_type reg_type, enum vkd3d_data_type data_type, unsigned int idx_count)
enum vkd3d_result vsir_program_transform(struct vsir_program *program, uint64_t config_flags, const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_message_context *message_context)
#define location(file, line)
#define memcpy(s1, s2, n)
struct task_struct * current
static const WCHAR label[]
static ULONG ** element_count
static RPC_BINDING_HANDLE binding
static const struct @662 sizes[]
static BOOL is_float(parse_buffer *buf)
for(i=0;i< sizeof(testsuite)/sizeof(testsuite[0]);++i) ok(call_test(testsuite[i].func)
#define offsetof(TYPE, MEMBER)
#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)
#define RB_ENTRY_VALUE(element, type, field)
static void rb_destroy(struct rb_tree *tree, rb_traverse_func_t *callback, void *context)
static int rb_put(struct rb_tree *tree, const void *key, struct rb_entry *entry)
static struct rb_entry * rb_get(const struct rb_tree *tree, const void *key)
static void rb_init(struct rb_tree *tree, rb_compare_func_t compare)
static void spirv_compiler_emit_int_div(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static enum vkd3d_result spirv_compiler_emit_alu_instruction(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_access_chain(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t base_id, uint32_t *indexes, uint32_t index_count)
static const struct vkd3d_spec_constant_info * get_spec_constant_info(enum vkd3d_shader_parameter_name name)
static SpvOp map_wave_bool_op(enum vkd3d_shader_opcode opcode)
#define MAX_SPIRV_DECLARATION_PARAMETER_COUNT
static uint32_t spirv_compiler_emit_query_sample_count(struct spirv_compiler *compiler, const struct vkd3d_shader_src_param *src)
static void spirv_compiler_emit_discard_function(struct spirv_compiler *compiler)
static void spirv_compiler_end_invocation_interlock(struct spirv_compiler *compiler)
static void vkd3d_spirv_build_op_member_decorate(struct vkd3d_spirv_builder *builder, uint32_t structure_type_id, uint32_t member_idx, SpvDecoration decoration, uint32_t *literals, uint32_t literal_count)
static void spirv_compiler_emit_ld(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_type_image(struct vkd3d_spirv_builder *builder, uint32_t sampled_type_id, uint32_t dim, uint32_t depth, uint32_t arrayed, uint32_t ms, uint32_t sampled, uint32_t format)
enum vkd3d_shader_spirv_environment environment
static bool is_in_default_phase(const struct spirv_compiler *compiler)
static uint32_t vkd3d_spirv_build_op_type_void(struct vkd3d_spirv_builder *builder)
static void spirv_compiler_emit_branch(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_in_bounds_access_chain1(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t base_id, uint32_t index)
static uint32_t vkd3d_spirv_build_op_undef(struct vkd3d_spirv_builder *builder, uint32_t type_id)
static uint32_t vkd3d_spirv_build_op_isub(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand0, uint32_t operand1)
static uint32_t vkd3d_spirv_build_op_function(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t result_id, uint32_t function_control, uint32_t function_type)
uint32_t(* vkd3d_spirv_build_pfn)(struct vkd3d_spirv_builder *builder)
static bool spirv_compiler_get_register_info(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, struct vkd3d_shader_register_info *register_info)
static uint32_t vkd3d_spirv_build_image_instruction(struct vkd3d_spirv_builder *builder, SpvOp op, uint32_t result_type, const uint32_t *operands, unsigned int operand_count, uint32_t image_operands_mask, const uint32_t *image_operands, unsigned int image_operand_count)
static uint32_t spirv_compiler_emit_spec_constant(struct spirv_compiler *compiler, enum vkd3d_shader_parameter_name name, uint32_t spec_id, enum vkd3d_data_type type, unsigned int component_count)
static int vkd3d_spirv_declaration_compare(const void *key, const struct rb_entry *e)
static void spirv_compiler_emit_dcl_gs_instances(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_label(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_bitfield_instruction(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_imul(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_tr2v(struct vkd3d_spirv_builder *builder, struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t result_type, uint32_t operand0, uint32_t operand1, const uint32_t *operands, unsigned int operand_count)
static void vkd3d_spirv_build_op(struct vkd3d_spirv_stream *stream, SpvOp op)
static void vkd3d_spirv_build_op_selection_merge(struct vkd3d_spirv_builder *builder, uint32_t merge_block, uint32_t selection_control)
static uint32_t vkd3d_spirv_build_op_image_texel_pointer(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t image_id, uint32_t coordinate_id, uint32_t sample_id)
static uint32_t spirv_compiler_build_descriptor_variable(struct spirv_compiler *compiler, SpvStorageClass storage_class, uint32_t type_id, const struct vkd3d_shader_register *reg, const struct vkd3d_shader_register_range *range, enum vkd3d_shader_resource_type resource_type, const struct vkd3d_shader_descriptor_info1 *descriptor, bool is_uav_counter, struct vkd3d_descriptor_variable_info *var_info)
static uint32_t vkd3d_spirv_build_op_group_nonuniform_ballot_bit_count(struct vkd3d_spirv_builder *builder, uint32_t result_type, SpvGroupOperation group_op, uint32_t val_id)
static void spirv_compiler_emit_hull_shader_main(struct spirv_compiler *compiler)
static uint32_t vkd3d_spirv_build_op_type_array(struct vkd3d_spirv_builder *builder, uint32_t element_type, uint32_t length_id)
static uint32_t spirv_compiler_get_type_id_for_reg(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, uint32_t write_mask)
static void vkd3d_spirv_build_op3v(struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t operand0, uint32_t operand1, uint32_t operand2, const uint32_t *operands, unsigned int operand_count)
static SpvImageFormat image_format_for_image_read(enum vkd3d_shader_component_type data_type)
static void spirv_compiler_emit_store_raw_structured(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_once(struct vkd3d_spirv_builder *builder, uint32_t *id, vkd3d_spirv_build_pfn build_pfn)
static uint32_t vkd3d_spirv_build_op_image_query_size(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t image_id)
static uint32_t vkd3d_spirv_build_op_load(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t pointer_id, uint32_t memory_access)
static void spirv_compiler_emit_deriv_instruction(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_main_prolog(struct spirv_compiler *compiler)
static uint32_t spirv_compiler_get_constant_uint_vector(struct spirv_compiler *compiler, uint32_t value, unsigned int component_count)
static void spirv_compiler_emit_gather4(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static enum vkd3d_shader_spirv_environment spirv_compiler_get_target_environment(const struct spirv_compiler *compiler)
static uint32_t vkd3d_spirv_build_op_is_inf(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand)
static void spirv_compiler_emit_sample_position(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static bool spirv_compiler_init_blocks(struct spirv_compiler *compiler, unsigned int block_count)
static uint32_t vkd3d_spirv_build_op_tr(struct vkd3d_spirv_builder *builder, struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t result_type)
static uint32_t spirv_compiler_emit_constant_array(struct spirv_compiler *compiler, const struct vkd3d_shader_immediate_constant_buffer *icb, uint32_t *type_id_out)
static void vkd3d_spirv_stream_free(struct vkd3d_spirv_stream *stream)
static uint32_t vkd3d_spirv_build_op_in_bounds_access_chain(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t base_id, uint32_t *indexes, uint32_t index_count)
static void spirv_compiler_emit_atomic_instruction(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_glsl_std450_fabs(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand)
unsigned int component_count
static uint32_t vkd3d_spirv_build_op_iadd(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand0, uint32_t operand1)
static void vkd3d_spirv_build_op_decorate1(struct vkd3d_spirv_builder *builder, uint32_t target_id, SpvDecoration decoration, uint32_t operand0)
static const char * spirv_compiler_get_entry_point_name(const struct spirv_compiler *compiler)
static uint32_t spirv_compiler_get_descriptor_index(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, const struct vkd3d_symbol *array_symbol, unsigned int binding_base_idx, enum vkd3d_shader_resource_type resource_type)
static uint32_t vkd3d_spirv_build_op_group_nonuniform_quad_broadcast(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t val_id, uint32_t index_id)
static uint32_t vkd3d_spirv_build_op_image_gather(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t sampled_image_id, uint32_t coordinate_id, uint32_t component_id, uint32_t image_operands_mask, const uint32_t *image_operands, unsigned int image_operand_count)
static uint32_t vkd3d_spirv_build_op_fdiv(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand0, uint32_t operand1)
static void spirv_compiler_emit_ftoi(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static const struct vkd3d_spirv_builtin vkd3d_output_point_size_builtin
static uint32_t spirv_compiler_emit_bool_to_double(struct spirv_compiler *compiler, unsigned int component_count, uint32_t val_id, bool signedness)
static void spirv_compiler_emit_hull_shader_barrier(struct spirv_compiler *compiler)
static uint32_t vkd3d_spirv_build_op_glsl_std450_umin(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t x, uint32_t y)
static uint32_t spirv_compiler_get_constant_float_vector(struct spirv_compiler *compiler, float value, unsigned int component_count)
static int vkd3d_symbol_compare(const void *key, const struct rb_entry *entry)
static void vkd3d_spirv_end_function_stream_insertion(struct vkd3d_spirv_builder *builder)
static uint32_t sv_instance_id_fixup(struct spirv_compiler *compiler, uint32_t instance_index_id)
static void spirv_compiler_emit_output_register(struct spirv_compiler *compiler, const struct vkd3d_shader_dst_param *dst)
static uint32_t vkd3d_spirv_build_op_tr2(struct vkd3d_spirv_builder *builder, struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t result_type, uint32_t operand0, uint32_t operand1)
static uint32_t vkd3d_spirv_build_once1v(struct vkd3d_spirv_builder *builder, SpvOp op, uint32_t operand0, const uint32_t *operands, unsigned int operand_count, vkd3d_spirv_build1v_pfn build_pfn)
static const struct vkd3d_spirv_builtin * get_spirv_builtin_for_register(enum vkd3d_shader_register_type reg_type)
static uint32_t vkd3d_spirv_build_op_glsl_std450_cos(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand)
#define VKD3D_IMAGE_FLAG_DEPTH
static void spirv_compiler_emit_resinfo(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_logical_not(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand)
static uint32_t vkd3d_spirv_build_op_constant64(struct vkd3d_spirv_builder *builder, uint32_t result_type, const uint32_t *values, unsigned int value_count)
static uint32_t vkd3d_spirv_build_op_spec_constant(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t value)
static bool is_in_fork_or_join_phase(const struct spirv_compiler *compiler)
static uint32_t vkd3d_spirv_build_op_constant_bool(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t value)
static bool spirv_compiler_is_target_extension_supported(const struct spirv_compiler *compiler, enum vkd3d_shader_spirv_extension extension)
static uint32_t vkd3d_spirv_get_op_type_vector(struct vkd3d_spirv_builder *builder, uint32_t component_type, uint32_t component_count)
static uint32_t vkd3d_spirv_build_op_image_sample_dref(struct vkd3d_spirv_builder *builder, SpvOp op, uint32_t result_type, uint32_t sampled_image_id, uint32_t coordinate_id, uint32_t dref_id, uint32_t image_operands_mask, const uint32_t *image_operands, unsigned int image_operand_count)
static void spirv_compiler_emit_ld_raw_structured(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_access_chain1(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t base_id, uint32_t index)
static void spirv_compiler_allocate_ssa_register_ids(struct spirv_compiler *compiler, unsigned int count)
static bool vkd3d_swizzle_is_equal(uint32_t dst_write_mask, uint32_t swizzle, uint32_t write_mask)
static uint32_t spirv_compiler_emit_src_modifier(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, uint32_t write_mask, enum vkd3d_shader_src_modifier modifier, uint32_t val_id)
static void spirv_compiler_emit_sincos(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_get_op_constant_bool(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t value)
static uint32_t spirv_compiler_get_type_id_for_dst(struct spirv_compiler *compiler, const struct vkd3d_shader_dst_param *dst)
static void spirv_compiler_decorate_nonuniform(struct spirv_compiler *compiler, uint32_t expression_id)
static uint32_t vkd3d_spirv_build_op_uless_than(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand0, uint32_t operand1)
static uint32_t vkd3d_spirv_build_op_image_query_levels(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t image_id)
static uint32_t vkd3d_spirv_build_op_image_sample(struct vkd3d_spirv_builder *builder, SpvOp op, uint32_t result_type, uint32_t sampled_image_id, uint32_t coordinate_id, uint32_t image_operands_mask, const uint32_t *image_operands, unsigned int image_operand_count)
static void spirv_compiler_set_ssa_register_info(const struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, uint32_t val_id)
static void spirv_compiler_emit_descriptor_binding(struct spirv_compiler *compiler, uint32_t variable_id, const struct vkd3d_shader_descriptor_binding *binding)
static size_t vkd3d_spirv_stream_current_location(struct vkd3d_spirv_stream *stream)
static void spirv_compiler_emit_wave_active_ballot(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void vkd3d_spirv_build_op_image_write(struct vkd3d_spirv_builder *builder, uint32_t image_id, uint32_t coordinate_id, uint32_t texel_id, uint32_t image_operands, const uint32_t *operands, unsigned int operand_count)
static uint32_t vkd3d_spirv_get_op_type_runtime_array(struct vkd3d_spirv_builder *builder, uint32_t element_type)
static bool is_imm_atomic_instruction(enum vkd3d_shader_opcode opcode)
static void spirv_compiler_emit_f16tof32(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_type_bool(struct vkd3d_spirv_builder *builder)
static uint32_t vkd3d_spirv_build_op_fnegate(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand)
static void vkd3d_spirv_build_op_capability(struct vkd3d_spirv_stream *stream, SpvCapability cap)
static uint32_t vkd3d_spirv_build_op_select(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t condition_id, uint32_t object0_id, uint32_t object1_id)
static uint32_t spirv_compiler_emit_load_constant64(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, uint32_t swizzle, uint32_t write_mask)
static uint32_t vkd3d_spirv_get_op_type_float(struct vkd3d_spirv_builder *builder, uint32_t width)
static uint32_t spirv_compiler_emit_builtin_variable(struct spirv_compiler *compiler, const struct vkd3d_spirv_builtin *builtin, SpvStorageClass storage_class, unsigned int array_size)
static SpvOp spirv_compiler_map_alu_instruction(const struct vkd3d_shader_instruction *instruction)
static uint32_t spirv_compiler_get_discard_function_id(struct spirv_compiler *compiler)
static void vkd3d_spirv_insert_declaration(struct vkd3d_spirv_builder *builder, const struct vkd3d_spirv_declaration *declaration)
static uint32_t vkd3d_spirv_build_op_rv(struct vkd3d_spirv_builder *builder, struct vkd3d_spirv_stream *stream, SpvOp op, const uint32_t *operands, unsigned int operand_count)
static void vkd3d_symbol_free(struct rb_entry *entry, void *context)
static uint32_t vkd3d_spirv_build_op_array_length(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t struct_id, uint32_t member_id)
static uint32_t spirv_compiler_emit_load_ssa_reg(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, enum vkd3d_shader_component_type component_type, uint32_t swizzle)
static uint32_t vkd3d_spirv_build_op_group_nonuniform_quad_swap(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t val_id, uint32_t op_id)
static uint32_t spirv_compiler_emit_load_scalar(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, uint32_t swizzle, uint32_t write_mask, const struct vkd3d_shader_register_info *reg_info)
static void spirv_compiler_initialise_block(struct spirv_compiler *compiler)
static void vkd3d_symbol_set_register_info(struct vkd3d_symbol *symbol, uint32_t val_id, SpvStorageClass storage_class, enum vkd3d_shader_component_type component_type, uint32_t write_mask)
static bool spirv_compiler_get_register_name(char *buffer, unsigned int buffer_size, const struct vkd3d_shader_register *reg)
static uint32_t vkd3d_spirv_build_op_tr1v(struct vkd3d_spirv_builder *builder, struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t result_type, uint32_t operand0, const uint32_t *operands, unsigned int operand_count)
static uint32_t vkd3d_spirv_build_op_is_nan(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand)
static void spirv_compiler_emit_output_vertex_count(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_get_op_scope_subgroup(struct vkd3d_spirv_builder *builder)
static uint32_t vkd3d_spirv_build_op_composite_extract1(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t composite_id, uint32_t index)
#define VKD3D_SPIRV_VERSION_1_0
static struct vkd3d_push_constant_buffer_binding * spirv_compiler_find_push_constant_buffer(const struct spirv_compiler *compiler, const struct vkd3d_shader_register_range *range)
static void vkd3d_spirv_build_op_entry_point(struct vkd3d_spirv_stream *stream, SpvExecutionModel model, uint32_t function_id, const char *name, uint32_t *interface_list, unsigned int interface_size)
static void spirv_compiler_emit_shader_phase_name(struct spirv_compiler *compiler, uint32_t id, const char *suffix)
static uint32_t vkd3d_spirv_build_op_logical_equal(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand0, uint32_t operand1)
static uint32_t convert_raw_constant32(enum vkd3d_data_type data_type, unsigned int uint_value)
static void spirv_compiler_emit_register_execution_mode(struct spirv_compiler *compiler, enum vkd3d_shader_register_type type)
static uint32_t vkd3d_spirv_build_op_glsl_std450_tr1(struct vkd3d_spirv_builder *builder, enum GLSLstd450 op, uint32_t result_type, uint32_t operand)
static bool spirv_compiler_has_combined_sampler_for_sampler(const struct spirv_compiler *compiler, const struct vkd3d_shader_register_range *range)
static void spirv_compiler_emit_ld_tgsm(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_bitcast(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand)
static uint32_t spirv_compiler_get_buffer_parameter(struct spirv_compiler *compiler, const struct vkd3d_shader_parameter1 *parameter, enum vkd3d_data_type type, unsigned int component_count)
static uint32_t spirv_compiler_get_constant(struct spirv_compiler *compiler, enum vkd3d_shader_component_type component_type, unsigned int component_count, const uint32_t *values)
static uint32_t vkd3d_spirv_build_op_constant(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t value)
static unsigned int shader_signature_next_location(const struct shader_signature *signature)
static uint32_t vkd3d_spirv_build_op_group_nonuniform_ballot(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t val_id)
static void spirv_compiler_emit_dcl_tgsm_raw(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_swapc(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_dcl_input_primitive(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_ext_inst(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t inst_set, uint32_t inst_number, uint32_t *operands, unsigned int operand_count)
static bool vkd3d_spirv_compile_module(struct vkd3d_spirv_builder *builder, struct vkd3d_shader_code *spirv, const char *entry_point, enum vkd3d_shader_spirv_environment environment)
static unsigned int vkd3d_spirv_string_word_count(const char *str)
static const struct vkd3d_spirv_resource_type * vkd3d_get_spirv_resource_type(enum vkd3d_shader_resource_type resource_type)
static uint32_t spirv_compiler_emit_load_src(struct spirv_compiler *compiler, const struct vkd3d_shader_src_param *src, uint32_t write_mask)
static void spirv_compiler_emit_merge(struct spirv_compiler *compiler, uint32_t merge_block_id, uint32_t continue_block_id)
static uint32_t vkd3d_spirv_build_op_constant_composite(struct vkd3d_spirv_builder *builder, uint32_t result_type, const uint32_t *constituents, unsigned int constituent_count)
static void vkd3d_shader_code_from_spirv_stream(struct vkd3d_shader_code *code, struct vkd3d_spirv_stream *stream)
static uint32_t spirv_compiler_emit_load_reg(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, uint32_t swizzle, uint32_t write_mask)
static uint32_t vkd3d_spirv_build_op_logical_and(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand0, uint32_t operand1)
static void vkd3d_spirv_declaration_free(struct rb_entry *entry, void *context)
static void spirv_compiler_enter_shader_phase(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_store_dst_swizzled(struct spirv_compiler *compiler, const struct vkd3d_shader_dst_param *dst, uint32_t val_id, enum vkd3d_shader_component_type component_type, uint32_t swizzle)
static void vkd3d_spirv_build_op_demote_to_helper_invocation(struct vkd3d_spirv_builder *builder)
static void spirv_compiler_prepare_image(struct spirv_compiler *compiler, struct vkd3d_shader_image *image, const struct vkd3d_shader_register *resource_reg, const struct vkd3d_shader_register *sampler_reg, unsigned int flags)
static uint32_t vkd3d_spirv_build_op_type_pointer(struct vkd3d_spirv_builder *builder, uint32_t storage_class, uint32_t type_id)
static uint32_t vkd3d_spirv_get_op_constant_composite(struct vkd3d_spirv_builder *builder, uint32_t result_type, const uint32_t *constituents, unsigned int constituent_count)
static uint32_t vkd3d_spirv_build_op_sampled_image(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t image_id, uint32_t sampler_id)
static void spirv_compiler_emit_dcl_immediate_constant_buffer(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static SpvOp map_wave_alu_op(enum vkd3d_shader_opcode opcode, bool is_float)
static uint32_t vkd3d_spirv_build_op_shift_left_logical(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t base, uint32_t shift)
static void spirv_compiler_emit_workgroup_memory(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, unsigned int alignment, unsigned int size, unsigned int structure_stride, bool zero_init)
static uint32_t spirv_compiler_get_constant64(struct spirv_compiler *compiler, enum vkd3d_shader_component_type component_type, unsigned int component_count, const uint64_t *values)
static uint32_t vkd3d_spirv_build_op_udiv(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand0, uint32_t operand1)
static uint32_t vkd3d_spirv_build_op_group_nonuniform_elect(struct vkd3d_spirv_builder *builder)
static uint32_t vkd3d_spirv_build_op_composite_insert1(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t object_id, uint32_t composite_id, uint32_t index)
static void vkd3d_symbol_make_combined_sampler(struct vkd3d_symbol *symbol, const struct vkd3d_shader_register *resource_reg, unsigned int sampler_space, unsigned int sampler_index)
static bool spirv_compiler_use_storage_buffer(const struct spirv_compiler *compiler, const struct vkd3d_symbol_resource_data *resource)
static uint32_t spirv_compiler_get_constant_double_vector(struct spirv_compiler *compiler, double value, unsigned int component_count)
static const struct vkd3d_symbol * spirv_compiler_find_resource(struct spirv_compiler *compiler, const struct vkd3d_shader_register *resource_reg)
static uint32_t vkd3d_spirv_build_op_uless_than_equal(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand0, uint32_t operand1)
static bool needs_private_io_variable(const struct vkd3d_spirv_builtin *builtin)
static void vkd3d_spirv_build_op_ext_inst_import(struct vkd3d_spirv_stream *stream, uint32_t result_id, const char *name)
static void vkd3d_spirv_builder_init(struct vkd3d_spirv_builder *builder, const char *entry_point)
static void spirv_compiler_emit_resource_declaration(struct spirv_compiler *compiler, const struct vkd3d_shader_register_range *range, const struct vkd3d_shader_descriptor_info1 *descriptor)
static uint32_t vkd3d_spirv_build_op_r1v(struct vkd3d_spirv_builder *builder, struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t operand0, const uint32_t *operands, unsigned int operand_count)
static void spirv_compiler_emit_execution_mode1(struct spirv_compiler *compiler, SpvExecutionMode mode, const uint32_t literal)
uint32_t(* vkd3d_spirv_build7_pfn)(struct vkd3d_spirv_builder *builder, uint32_t operand0, uint32_t operand1, uint32_t operand2, uint32_t operand3, uint32_t operand4, uint32_t operand5, uint32_t operand6)
static void spirv_compiler_emit_dereference_register(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, struct vkd3d_shader_register_info *register_info)
static void vkd3d_spirv_stream_insert(struct vkd3d_spirv_stream *stream, size_t location, const uint32_t *words, unsigned int word_count)
static uint32_t vkd3d_spirv_build_op_r(struct vkd3d_spirv_builder *builder, struct vkd3d_spirv_stream *stream, SpvOp op)
static uint32_t spirv_compiler_emit_builtin_variable_v(struct spirv_compiler *compiler, const struct vkd3d_spirv_builtin *builtin, SpvStorageClass storage_class, const unsigned int *array_sizes, unsigned int size_count)
static void vkd3d_spirv_set_execution_model(struct vkd3d_spirv_builder *builder, SpvExecutionModel model)
static uint32_t half_to_float(uint16_t value)
static void spirv_compiler_emit_store(struct spirv_compiler *compiler, uint32_t dst_id, uint32_t dst_write_mask, enum vkd3d_shader_component_type component_type, SpvStorageClass storage_class, uint32_t write_mask, uint32_t val_id)
static uint32_t vkd3d_spirv_get_op_type_sampled_image(struct vkd3d_spirv_builder *builder, uint32_t image_type_id)
static uint32_t vkd3d_spirv_build_op_r1(struct vkd3d_spirv_builder *builder, struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t operand0)
static void vkd3d_spirv_stream_clear(struct vkd3d_spirv_stream *stream)
static void vkd3d_spirv_build_string(struct vkd3d_spirv_stream *stream, const char *str, unsigned int word_count)
static void spirv_compiler_emit_wave_read_lane_at(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_eval_attrib(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
#define VKD3D_IMAGE_FLAG_SAMPLED
static void spirv_compiler_decorate_xfb_output(struct spirv_compiler *compiler, uint32_t id, unsigned int component_count, const struct signature_element *signature_element)
static const struct vkd3d_spirv_builtin * get_spirv_builtin_for_sysval(const struct spirv_compiler *compiler, enum vkd3d_shader_sysval_semantic sysval)
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)
static struct vkd3d_string_buffer * vkd3d_shader_register_range_string(struct spirv_compiler *compiler, const struct vkd3d_shader_register_range *range)
static void spirv_compiler_emit_wave_read_lane_first(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_initial_declarations(struct spirv_compiler *compiler)
#define VKD3D_SPIRV_GENERATOR_MAGIC
static uint32_t spirv_compiler_emit_neg(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, uint32_t write_mask, uint32_t val_id)
static uint32_t vkd3d_spirv_get_type_id(struct vkd3d_spirv_builder *builder, enum vkd3d_shader_component_type component_type, unsigned int component_count)
static void spirv_compiler_emit_bufinfo(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_output(struct spirv_compiler *compiler, enum vkd3d_shader_register_type reg_type, unsigned int element_idx)
static void spirv_compiler_emit_interpolation_decorations(struct spirv_compiler *compiler, enum vkd3d_shader_component_type component_type, uint32_t id, enum vkd3d_shader_interpolation_mode mode)
static uint32_t spirv_compiler_alloc_spec_constant_id(struct spirv_compiler *compiler, unsigned int count)
static void spirv_compiler_emit_register_debug_name(struct vkd3d_spirv_builder *builder, uint32_t id, const struct vkd3d_shader_register *reg)
static uint32_t vkd3d_spirv_build_op_imul(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand0, uint32_t operand1)
static const struct vkd3d_spec_constant_info vkd3d_shader_parameters[]
static const struct vkd3d_spirv_builtin vkd3d_pixel_shader_position_builtin
static const struct vkd3d_spirv_resource_type * spirv_compiler_enable_resource_type(struct spirv_compiler *compiler, enum vkd3d_shader_resource_type resource_type, bool is_uav)
static void vkd3d_spirv_build_op_execution_mode(struct vkd3d_spirv_stream *stream, uint32_t entry_point, SpvExecutionMode mode, const uint32_t *literals, unsigned int literal_count)
static bool spirv_compiler_enable_descriptor_indexing(struct spirv_compiler *compiler, enum vkd3d_shader_register_type reg_type, enum vkd3d_shader_resource_type resource_type)
static void spirv_compiler_emit_shader_epilogue_function(struct spirv_compiler *compiler)
static uint32_t spirv_compiler_get_output_array_index(struct spirv_compiler *compiler, const struct signature_element *e)
static void spirv_compiler_emit_ftou(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
enum vkd3d_shader_register_type reg_type
static uint32_t vkd3d_spirv_build_op_tr1(struct vkd3d_spirv_builder *builder, struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t result_type, uint32_t operand0)
enum vkd3d_data_type type
static uint32_t vkd3d_spirv_build_op_trv(struct vkd3d_spirv_builder *builder, struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t result_type, const uint32_t *operands, unsigned int operand_count)
static void spirv_compiler_emit_quad_read_across(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_composite_construct(struct vkd3d_spirv_builder *builder, uint32_t result_type, const uint32_t *constituents, unsigned int constituent_count)
static uint32_t vkd3d_spirv_build_op_convert_utof(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t unsigned_value)
static enum GLSLstd450 spirv_compiler_map_ext_glsl_instruction(const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_uav_counter_instruction(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_dot(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_get_op_type_function(struct vkd3d_spirv_builder *builder, uint32_t return_type, const uint32_t *param_types, unsigned int param_count)
static void vkd3d_spirv_stream_init(struct vkd3d_spirv_stream *stream)
static uint32_t spirv_compiler_get_constant_vector(struct spirv_compiler *compiler, enum vkd3d_shader_component_type component_type, unsigned int component_count, uint32_t value)
static uint32_t vkd3d_spirv_get_op_type_image(struct vkd3d_spirv_builder *builder, uint32_t sampled_type_id, SpvDim dim, uint32_t depth, uint32_t arrayed, uint32_t ms, uint32_t sampled, SpvImageFormat format)
static void spirv_compiler_emit_isfinite(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
#define VKD3D_IMAGE_FLAG_NO_LOAD
static uint32_t vkd3d_spirv_build_op_composite_extract(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t composite_id, const uint32_t *indexes, unsigned int index_count)
static void spirv_compiler_emit_sample_info(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_get_op_type_void(struct vkd3d_spirv_builder *builder)
static int spirv_compiler_handle_instruction(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_sampler_declaration(struct spirv_compiler *compiler, const struct vkd3d_shader_register_range *range, const struct vkd3d_shader_descriptor_info1 *descriptor)
static void spirv_compiler_emit_descriptor_declarations(struct spirv_compiler *compiler)
static void spirv_compiler_emit_ld_raw_structured_srv_uav(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static bool vkd3d_spirv_capability_is_enabled(struct vkd3d_spirv_builder *builder, SpvCapability cap)
static void spirv_compiler_emit_store_shader_output(struct spirv_compiler *compiler, const struct shader_signature *signature, const struct signature_element *output, const struct vkd3d_shader_output_info *output_info, uint32_t output_index_id, uint32_t val_id, uint32_t write_mask)
static uint32_t vkd3d_spirv_build_op_group_nonuniform_shuffle(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t val_id, uint32_t lane_id)
static void spirv_compiler_emit_push_constant_buffers(struct spirv_compiler *compiler)
static uint32_t vkd3d_spirv_build_op_shift_right_logical(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t base, uint32_t shift)
static bool spirv_compiler_has_combined_sampler_for_resource(const struct spirv_compiler *compiler, const struct vkd3d_shader_register_range *range)
static void spirv_compiler_emit_store_tgsm(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t spirv_compiler_emit_load_undef(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, uint32_t write_mask)
static uint32_t spirv_compiler_emit_shader_phase_builtin_variable(struct spirv_compiler *compiler, const struct vkd3d_spirv_builtin *builtin, const unsigned int *array_sizes, unsigned int size_count)
static void vkd3d_spirv_dump(const struct vkd3d_shader_code *spirv, enum vkd3d_shader_spirv_environment environment)
static void spirv_compiler_decorate_builtin(struct spirv_compiler *compiler, uint32_t target_id, SpvBuiltIn builtin)
static void spirv_compiler_emit_quad_read_lane_at(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t spirv_compiler_emit_int_to_bool(struct spirv_compiler *compiler, enum vkd3d_shader_conditional_op condition, enum vkd3d_data_type data_type, unsigned int component_count, uint32_t val_id)
static uint32_t spirv_compiler_emit_register_addressing(struct spirv_compiler *compiler, const struct vkd3d_shader_register_index *reg_index)
static uint32_t vkd3d_spirv_build_op_image_query_samples(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t image_id)
static size_t spirv_compiler_get_current_function_location(struct spirv_compiler *compiler)
static uint32_t spirv_compiler_emit_bool_to_int64(struct spirv_compiler *compiler, unsigned int component_count, uint32_t val_id, bool signedness)
static void spirv_compiler_emit_wave_bit_count(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_store_scalar(struct spirv_compiler *compiler, uint32_t dst_id, uint32_t dst_write_mask, enum vkd3d_shader_component_type component_type, SpvStorageClass storage_class, uint32_t write_mask, uint32_t val_id)
static uint32_t vkd3d_spirv_get_type_id_for_data_type(struct vkd3d_spirv_builder *builder, enum vkd3d_data_type data_type, unsigned int component_count)
static uint32_t spirv_compiler_get_constant_uint64_vector(struct spirv_compiler *compiler, uint64_t value, unsigned int component_count)
static uint32_t spirv_compiler_emit_swizzle(struct spirv_compiler *compiler, uint32_t val_id, uint32_t val_write_mask, enum vkd3d_shader_component_type component_type, uint32_t swizzle, uint32_t write_mask)
static void spirv_compiler_emit_store_reg(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, uint32_t write_mask, uint32_t val_id)
#define VKD3D_IMAGE_FLAG_NONE
static SpvOp spirv_compiler_map_logical_instruction(const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_constant_null(struct vkd3d_spirv_builder *builder, uint32_t result_type)
static void spirv_compiler_emit_combined_sampler_declarations(struct spirv_compiler *compiler, const struct vkd3d_shader_register *resource, const struct vkd3d_shader_register_range *resource_range, enum vkd3d_shader_resource_type resource_type, enum vkd3d_shader_component_type sampled_type, unsigned int structure_stride, bool raw, const struct vkd3d_spirv_resource_type *resource_type_info)
static void vkd3d_spirv_build_op3(struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t operand0, uint32_t operand1, uint32_t operand2)
static uint32_t spirv_compiler_emit_input(struct spirv_compiler *compiler, enum vkd3d_shader_register_type reg_type, unsigned int element_idx)
static void vkd3d_spirv_build_op_branch_conditional(struct vkd3d_spirv_builder *builder, uint32_t condition, uint32_t true_label, uint32_t false_label)
static uint32_t vkd3d_spirv_build_op_snegate(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand)
static void spirv_compiler_emit_store_uav_typed(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_execution_mode(struct spirv_compiler *compiler, SpvExecutionMode mode, const uint32_t *literals, unsigned int literal_count)
static void vkd3d_spirv_begin_function_stream_insertion(struct vkd3d_spirv_builder *builder, size_t location)
static void spirv_compiler_emit_sync(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void vkd3d_spirv_build_op_name(struct vkd3d_spirv_builder *builder, uint32_t id, const char *fmt,...)
static uint32_t vkd3d_spirv_build_op_image_query_size_lod(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t image_id, uint32_t lod_id)
static void vkd3d_spirv_build_op2(struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t operand0, uint32_t operand1)
static void spirv_compiler_emit_wave_alu_op(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_cbv_declaration(struct spirv_compiler *compiler, const struct vkd3d_shader_register_range *range, const struct vkd3d_shader_descriptor_info1 *descriptor)
static uint32_t spirv_compiler_get_invocation_id(struct spirv_compiler *compiler)
static uint32_t vkd3d_spirv_build_op_image_dref_gather(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t sampled_image_id, uint32_t coordinate_id, uint32_t dref_id, uint32_t image_operands_mask, const uint32_t *image_operands, unsigned int image_operand_count)
static void spirv_compiler_emit_default_control_point_phase(struct spirv_compiler *compiler)
static uint32_t spirv_compiler_get_constant_float(struct spirv_compiler *compiler, float value)
static void spirv_compiler_emit_store_dst_components(struct spirv_compiler *compiler, const struct vkd3d_shader_dst_param *dst, enum vkd3d_shader_component_type component_type, uint32_t *component_ids)
static uint32_t vkd3d_spirv_build_op_glsl_std450_nclamp(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t x, uint32_t min, uint32_t max)
static uint32_t vkd3d_spirv_build_op_and(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand0, uint32_t operand1)
static void vkd3d_spirv_build_op1(struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t operand)
static void spirv_compiler_emit_shader_signature_outputs(struct spirv_compiler *compiler)
static uint32_t vkd3d_spirv_build_op_group_nonuniform_broadcast(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t val_id, uint32_t lane_id)
static void vkd3d_spirv_build_op_memory_barrier(struct vkd3d_spirv_builder *builder, uint32_t memory_id, uint32_t memory_semantics_id)
static const struct vkd3d_shader_phase * spirv_compiler_get_current_shader_phase(struct spirv_compiler *compiler)
static void vkd3d_spirv_build_op_end_primitive(struct vkd3d_spirv_builder *builder)
static void vkd3d_spirv_build_op_decorate(struct vkd3d_spirv_builder *builder, uint32_t target_id, SpvDecoration decoration, uint32_t *literals, uint32_t literal_count)
static const char * debug_vkd3d_symbol(const struct vkd3d_symbol *symbol)
static void spirv_compiler_emit_dcl_indexable_temp(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_cut_stream(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void vkd3d_spirv_enable_capability(struct vkd3d_spirv_builder *builder, SpvCapability cap)
static uint32_t vkd3d_spirv_build_op_type_sampled_image(struct vkd3d_spirv_builder *builder, uint32_t image_type_id)
static uint32_t spirv_compiler_get_spec_constant(struct spirv_compiler *compiler, enum vkd3d_shader_parameter_name name, uint32_t spec_id, enum vkd3d_data_type type, unsigned int component_count)
static uint32_t vkd3d_spirv_build_op_image(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t sampled_image_id)
static uint32_t spirv_compiler_emit_bool_to_int(struct spirv_compiler *compiler, unsigned int component_count, uint32_t val_id, bool signedness)
static void spirv_compiler_decorate_descriptor(struct spirv_compiler *compiler, uint32_t var_id, bool write_only, bool coherent)
static void spirv_compiler_emit_comparison_instruction(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
enum vkd3d_shader_sysval_semantic sysval
static void spirv_compiler_emit_f32tof16(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_get_op_type_pointer(struct vkd3d_spirv_builder *builder, uint32_t storage_class, uint32_t type_id)
static uint32_t spirv_compiler_get_label_id(struct spirv_compiler *compiler, unsigned int block_id)
static uint32_t vkd3d_spirv_build_once1(struct vkd3d_spirv_builder *builder, SpvOp op, uint32_t operand0, vkd3d_spirv_build1_pfn build_pfn)
static uint32_t vkd3d_spirv_build_op_type_function(struct vkd3d_spirv_builder *builder, uint32_t return_type, const uint32_t *param_types, unsigned int param_count)
static uint32_t spirv_compiler_emit_vector_shuffle(struct spirv_compiler *compiler, uint32_t vector1_id, uint32_t vector2_id, uint32_t swizzle, uint32_t write_mask, enum vkd3d_shader_component_type component_type, unsigned int component_count)
static uint32_t spirv_compiler_emit_sat(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, uint32_t write_mask, uint32_t val_id)
static uint32_t spirv_compiler_emit_draw_parameter_fixup(struct spirv_compiler *compiler, uint32_t index_id, SpvBuiltIn base)
static uint32_t spirv_compiler_emit_array_variable(struct spirv_compiler *compiler, struct vkd3d_spirv_stream *stream, SpvStorageClass storage_class, enum vkd3d_shader_component_type component_type, unsigned int component_count, const unsigned int *array_lengths, unsigned int length_count)
static void vkd3d_spirv_build_op_member_name(struct vkd3d_spirv_builder *builder, uint32_t type_id, uint32_t member, const char *fmt,...)
static void vkd3d_spirv_build_op_loop_merge(struct vkd3d_spirv_builder *builder, uint32_t merge_block, uint32_t continue_target, SpvLoopControlMask loop_control)
static uint32_t vkd3d_spirv_build_op_logical_or(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand0, uint32_t operand1)
static uint32_t spirv_compiler_emit_load_src_with_type(struct spirv_compiler *compiler, const struct vkd3d_shader_src_param *src, uint32_t write_mask, enum vkd3d_shader_component_type component_type)
static int spirv_compiler_generate_spirv(struct spirv_compiler *compiler, struct vsir_program *program, const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *spirv)
static uint32_t vkd3d_spirv_get_op_constant_null(struct vkd3d_spirv_builder *builder, uint32_t result_type)
static void spirv_compiler_emit_discard(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_dcl_input(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t spirv_compiler_emit_conditional_branch(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction, uint32_t target_block_id)
static uint32_t vkd3d_spirv_build_op_vector_shuffle(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t vector1_id, uint32_t vector2_id, const uint32_t *components, uint32_t component_count)
static bool spirv_compiler_is_opengl_target(const struct spirv_compiler *compiler)
static uint32_t vkd3d_spirv_get_op_type_bool(struct vkd3d_spirv_builder *builder)
static void vkd3d_spirv_build_op2v(struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t operand0, uint32_t operand1, const uint32_t *operands, unsigned int operand_count)
static uint32_t spirv_compiler_emit_load_constant(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, uint32_t swizzle, uint32_t write_mask)
static uint32_t vkd3d_spirv_build_op_type_vector(struct vkd3d_spirv_builder *builder, uint32_t component_type, uint32_t component_count)
static uint32_t spirv_compiler_get_image_type_id(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, const struct vkd3d_shader_register_range *range, const struct vkd3d_spirv_resource_type *resource_type_info, enum vkd3d_shader_component_type data_type, bool raw_structured)
#define VKD3D_SPIRV_VERSION_1_3
static void vkd3d_spirv_build_op_control_barrier(struct vkd3d_spirv_builder *builder, uint32_t execution_id, uint32_t memory_id, uint32_t memory_semantics_id)
static void vkd3d_symbol_make_resource(struct vkd3d_symbol *symbol, const struct vkd3d_shader_register *reg)
static uint32_t vkd3d_spirv_build_op_type_sampler(struct vkd3d_spirv_builder *builder)
static void spirv_compiler_emit_temps(struct spirv_compiler *compiler, uint32_t count)
static void vkd3d_symbol_make_io(struct vkd3d_symbol *symbol, enum vkd3d_shader_register_type type, unsigned int index)
static void spirv_compiler_emit_global_flags(struct spirv_compiler *compiler, enum vsir_global_flags flags)
static void vkd3d_spirv_build_op_kill(struct vkd3d_spirv_builder *builder)
static uint32_t vkd3d_spirv_build_op_type_struct(struct vkd3d_spirv_builder *builder, uint32_t *members, unsigned int member_count)
static void spirv_compiler_emit_wave_bool_op(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_io_declarations(struct spirv_compiler *compiler)
static void spirv_compiler_emit_point_size(struct spirv_compiler *compiler)
static enum vkd3d_result vkd3d_spirv_binary_to_text(const struct vkd3d_shader_code *spirv, enum vkd3d_shader_spirv_environment environment, enum vkd3d_shader_compile_option_formatting_flags formatting, struct vkd3d_shader_code *out)
static void vkd3d_spirv_build_op_memory_model(struct vkd3d_spirv_stream *stream, SpvAddressingModel addressing_model, SpvMemoryModel memory_model)
static void spirv_compiler_emit_dcl_output(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_get_op_constant64(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint64_t value)
static void spirv_compiler_emit_dcl_tessellator_domain(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_get_op_constant(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t value)
static uint32_t vkd3d_spirv_build_op_spec_constant_composite(struct vkd3d_spirv_builder *builder, uint32_t result_type, const uint32_t *constituents, unsigned int constituent_count)
static struct spirv_compiler * spirv_compiler_create(const struct vsir_program *program, const struct vkd3d_shader_compile_info *compile_info, const struct vkd3d_shader_scan_descriptor_info1 *scan_descriptor_info, struct vkd3d_shader_message_context *message_context, uint64_t config_flags)
static uint32_t vkd3d_spirv_get_op_type_array(struct vkd3d_spirv_builder *builder, uint32_t element_type, uint32_t length_id)
static uint32_t vkd3d_spirv_build_op_glsl_std450_sin(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t operand)
static const struct @6010 vkd3d_register_builtins[]
static struct vkd3d_symbol * vkd3d_symbol_dup(const struct vkd3d_symbol *symbol)
static void vkd3d_spirv_builder_begin_main_function(struct vkd3d_spirv_builder *builder)
static void spirv_compiler_emit_wave_is_first_lane(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void vkd3d_spirv_build_op_emit_vertex(struct vkd3d_spirv_builder *builder)
static void spirv_compiler_emit_switch(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
enum vkd3d_shader_input_sysval_semantic vkd3d_siv_from_sysval_indexed(enum vkd3d_shader_sysval_semantic sysval, unsigned int index)
static uint32_t spirv_compiler_emit_abs(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, uint32_t write_mask, uint32_t val_id)
static const struct @6008 parameter_data_type_map[]
static bool vkd3d_swizzle_is_scalar(uint32_t swizzle, const struct vkd3d_shader_register *reg)
static void spirv_compiler_emit_movc(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static const struct ssa_register_info * spirv_compiler_get_ssa_register_info(const struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg)
static void vkd3d_spirv_build_op_return(struct vkd3d_spirv_builder *builder)
uint32_t(* vkd3d_spirv_build1_pfn)(struct vkd3d_spirv_builder *builder, uint32_t operand0)
static void vkd3d_symbol_make_register(struct vkd3d_symbol *symbol, const struct vkd3d_shader_register *reg)
static uint32_t vkd3d_spirv_alloc_id(struct vkd3d_spirv_builder *builder)
uint32_t(* vkd3d_spirv_build1v_pfn)(struct vkd3d_spirv_builder *builder, uint32_t operand0, const uint32_t *operands, unsigned int operand_count)
static void vkd3d_spirv_build_op1v(struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t operand0, const uint32_t *operands, unsigned int operand_count)
static unsigned int get_shader_output_swizzle(const struct spirv_compiler *compiler, unsigned int register_idx)
static void vkd3d_spirv_build_op_store(struct vkd3d_spirv_builder *builder, uint32_t pointer_id, uint32_t object_id, uint32_t memory_access)
static void spirv_compiler_emit_ext_glsl_instruction(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_float_comparison_instruction(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_variable(struct vkd3d_spirv_builder *builder, struct vkd3d_spirv_stream *stream, uint32_t type_id, uint32_t storage_class, uint32_t initializer)
static void spirv_compiler_emit_imad(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_lod(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t spirv_compiler_emit_bool_to_float(struct spirv_compiler *compiler, unsigned int component_count, uint32_t val_id, bool signedness)
static void spirv_compiler_emit_emit_stream(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_tessellator_partitioning(struct spirv_compiler *compiler, enum vkd3d_shader_tessellator_partitioning partitioning)
static void spirv_compiler_destroy(struct spirv_compiler *compiler)
struct vkd3d_spirv_builtin builtin
static uint32_t vkd3d_spirv_build_op_image_fetch(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t image_id, uint32_t coordinate_id, uint32_t image_operands_mask, const uint32_t *image_operands, unsigned int image_operand_count)
static bool is_in_control_point_phase(const struct spirv_compiler *compiler)
static uint32_t vkd3d_spirv_get_op_undef(struct vkd3d_spirv_builder *builder, uint32_t type_id)
static void vkd3d_spirv_build_op_function_end(struct vkd3d_spirv_builder *builder)
static uint32_t spirv_compiler_emit_group_nonuniform_ballot(struct spirv_compiler *compiler, const struct vkd3d_shader_src_param *src)
static void vkd3d_spirv_build_op_copy_memory(struct vkd3d_spirv_builder *builder, uint32_t target_id, uint32_t source_id, uint32_t memory_access)
static void spirv_compiler_emit_retc(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_composite_insert(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t object_id, uint32_t composite_id, const uint32_t *indexes, unsigned int index_count)
static uint32_t vkd3d_spirv_get_glsl_std450_instr_set(struct vkd3d_spirv_builder *builder)
static uint32_t vkd3d_spirv_build_op_function_parameter(struct vkd3d_spirv_builder *builder, uint32_t result_type)
static uint32_t vkd3d_spirv_build_op_scope_subgroup(struct vkd3d_spirv_builder *builder)
static struct vkd3d_shader_descriptor_binding spirv_compiler_get_descriptor_binding(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg, const struct vkd3d_shader_register_range *range, enum vkd3d_shader_resource_type resource_type, bool is_uav_counter, struct vkd3d_descriptor_binding_address *binding_address)
static void spirv_compiler_emit_bool_cast(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_shader_epilogue_invocation(struct spirv_compiler *compiler)
static void spirv_compiler_emit_dcl_stream(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void vkd3d_symbol_make_sampler(struct vkd3d_symbol *symbol, const struct vkd3d_shader_register *reg)
static bool spirv_compiler_is_spirv_min_1_3_target(const struct spirv_compiler *compiler)
static void vkd3d_spirv_build_op_branch(struct vkd3d_spirv_builder *builder, uint32_t label)
static const struct vkd3d_spirv_resource_type vkd3d_spirv_resource_type_table[]
static void spirv_compiler_emit_input_register(struct spirv_compiler *compiler, const struct vkd3d_shader_dst_param *dst)
static uint32_t frag_coord_fixup(struct spirv_compiler *compiler, uint32_t frag_coord_id)
static uint32_t spirv_compiler_emit_load_invocation_id(struct spirv_compiler *compiler)
static void vkd3d_spirv_build_word(struct vkd3d_spirv_stream *stream, uint32_t word)
static void vkd3d_spirv_build_op_member_decorate1(struct vkd3d_spirv_builder *builder, uint32_t structure_type_id, uint32_t member_idx, SpvDecoration decoration, uint32_t operand0)
static uint32_t spirv_compiler_emit_raw_structured_addressing(struct spirv_compiler *compiler, uint32_t type_id, unsigned int stride, const struct vkd3d_shader_src_param *src0, uint32_t src0_mask, const struct vkd3d_shader_src_param *src1, uint32_t src1_mask)
static const struct vkd3d_symbol * spirv_compiler_put_symbol(struct spirv_compiler *compiler, const struct vkd3d_symbol *symbol)
static uint32_t vkd3d_spirv_build_op_image_query_lod(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t image_id, uint32_t coordinate_id)
static uint32_t vkd3d_spirv_opcode_word(SpvOp op, unsigned int word_count)
static void spirv_compiler_emit_return(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_function_call(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t function_id, const uint32_t *arguments, unsigned int argument_count)
static uint32_t spirv_compiler_emit_construct_vector(struct spirv_compiler *compiler, enum vkd3d_shader_component_type component_type, unsigned int component_count, uint32_t val_id, unsigned int val_component_idx, unsigned int val_component_count)
static void spirv_compiler_emit_rcp(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t vkd3d_spirv_build_op_image_read(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t image_id, uint32_t coordinate_id, uint32_t image_operands_mask, const uint32_t *image_operands, unsigned int image_operand_count)
static uint32_t spirv_compiler_get_constant_uint(struct spirv_compiler *compiler, uint32_t value)
static uint32_t vkd3d_spirv_build_once2(struct vkd3d_spirv_builder *builder, SpvOp op, uint32_t operand0, uint32_t operand1, vkd3d_spirv_build2_pfn build_pfn)
static uint32_t vkd3d_spirv_get_op_type_int(struct vkd3d_spirv_builder *builder, uint32_t width, uint32_t signedness)
static uint32_t spirv_compiler_emit_texel_offset(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction, const struct vkd3d_spirv_resource_type *resource_type_info)
static void spirv_compiler_emit_tessellator_output_primitive(struct spirv_compiler *compiler, enum vkd3d_shader_tessellator_output_primitive primitive)
static const struct @6009 vkd3d_system_value_builtins[]
static void spirv_compiler_emit_store_dst_scalar(struct spirv_compiler *compiler, const struct vkd3d_shader_dst_param *dst, uint32_t val_id, enum vkd3d_shader_component_type component_type, uint32_t swizzle)
static uint32_t vkd3d_spirv_build_op_r2(struct vkd3d_spirv_builder *builder, struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t operand0, uint32_t operand1)
static void spirv_compiler_emit_sample_c(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static bool is_dual_source_blending(const struct spirv_compiler *compiler)
static uint32_t vkd3d_spirv_build_op_type_runtime_array(struct vkd3d_spirv_builder *builder, uint32_t element_type)
static void spirv_compiler_emit_mov(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_thread_group_size(struct spirv_compiler *compiler, const struct vsir_thread_group_size *group_size)
static bool spirv_compiler_check_shader_visibility(const struct spirv_compiler *compiler, enum vkd3d_shader_visibility visibility)
static uint32_t sv_vertex_id_fixup(struct spirv_compiler *compiler, uint32_t vertex_index_id)
static void vkd3d_spirv_builder_free(struct vkd3d_spirv_builder *builder)
static uint32_t vkd3d_spirv_build_once7(struct vkd3d_spirv_builder *builder, SpvOp op, const uint32_t *operands, vkd3d_spirv_build7_pfn build_pfn)
static bool vkd3d_spirv_stream_append(struct vkd3d_spirv_stream *dst_stream, const struct vkd3d_spirv_stream *src_stream)
static void spirv_compiler_leave_shader_phase(struct spirv_compiler *compiler)
static uint32_t sv_front_face_fixup(struct spirv_compiler *compiler, uint32_t front_facing_id)
static uint32_t vkd3d_spirv_build_op_type_int(struct vkd3d_spirv_builder *builder, uint32_t width, uint32_t signedness)
static void spirv_compiler_emit_barrier(struct spirv_compiler *compiler, SpvScope execution_scope, SpvScope memory_scope, SpvMemorySemanticsMask semantics)
static uint32_t vkd3d_spirv_build_op_label(struct vkd3d_spirv_builder *builder, uint32_t label_id)
static void spirv_compiler_emit_dcl_tgsm_structured(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static const struct vkd3d_symbol * spirv_compiler_find_combined_sampler(struct spirv_compiler *compiler, const struct vkd3d_shader_register *resource_reg, const struct vkd3d_shader_register *sampler_reg)
static uint32_t vkd3d_spirv_build_op_group_nonuniform_broadcast_first(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t val_id)
static const struct vkd3d_spirv_builtin * vkd3d_get_spirv_builtin(const struct spirv_compiler *compiler, enum vkd3d_shader_register_type reg_type, enum vkd3d_shader_sysval_semantic sysval)
uint32_t(* vkd3d_spirv_build2_pfn)(struct vkd3d_spirv_builder *builder, uint32_t operand0, uint32_t operand1)
static uint32_t spirv_compiler_emit_variable(struct spirv_compiler *compiler, struct vkd3d_spirv_stream *stream, SpvStorageClass storage_class, enum vkd3d_shader_component_type component_type, unsigned int component_count)
static void spirv_compiler_emit_orderedness_instruction(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static uint32_t spirv_compiler_emit_shader_parameter(struct spirv_compiler *compiler, enum vkd3d_shader_parameter_name name, enum vkd3d_data_type type, unsigned int component_count)
static uint32_t map_quad_read_across_direction(enum vkd3d_shader_opcode opcode)
static void spirv_compiler_emit_ld_uav_typed(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static SpvOp spirv_compiler_map_atomic_instruction(const struct vkd3d_shader_instruction *instruction)
static const struct vkd3d_shader_descriptor_info1 * spirv_compiler_get_descriptor_info(struct spirv_compiler *compiler, enum vkd3d_shader_descriptor_type type, const struct vkd3d_shader_register_range *range)
static void vkd3d_spirv_build_op_switch(struct vkd3d_spirv_builder *builder, uint32_t selector, uint32_t default_label, uint32_t *targets, unsigned int target_count)
static void spirv_compiler_emit_store_uav_raw_structured(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void spirv_compiler_emit_dcl_output_topology(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void vkd3d_spirv_add_iface_variable(struct vkd3d_spirv_builder *builder, uint32_t id)
static uint32_t vkd3d_spirv_build_op_type_float(struct vkd3d_spirv_builder *builder, uint32_t width)
uint32_t(* vkd3d_spirv_builtin_fixup_pfn)(struct spirv_compiler *compiler, uint32_t val_id)
static bool vkd3d_spirv_validate(struct vkd3d_string_buffer *buffer, const struct vkd3d_shader_code *spirv, enum vkd3d_shader_spirv_environment environment)
static void spirv_compiler_emit_sample(struct spirv_compiler *compiler, const struct vkd3d_shader_instruction *instruction)
static void vkd3d_spirv_build_op_extension(struct vkd3d_spirv_stream *stream, const char *name)
static uint32_t vkd3d_spirv_build_op_tr3(struct vkd3d_spirv_builder *builder, struct vkd3d_spirv_stream *stream, SpvOp op, uint32_t result_type, uint32_t operand0, uint32_t operand1, uint32_t operand2)
static uint32_t vkd3d_spirv_build_op_glsl_std450_max(struct vkd3d_spirv_builder *builder, uint32_t result_type, uint32_t x, uint32_t y)
static void spirv_compiler_emit_hull_shader_builtins(struct spirv_compiler *compiler)
static uint32_t spirv_compiler_get_register_id(struct spirv_compiler *compiler, const struct vkd3d_shader_register *reg)
static void spirv_compiler_emit_store_dst(struct spirv_compiler *compiler, const struct vkd3d_shader_dst_param *dst, uint32_t val_id)
static void calculate_clip_or_cull_distance_mask(const struct signature_element *e, uint32_t *mask)
static uint32_t vkd3d_spirv_get_op_type_sampler(struct vkd3d_spirv_builder *builder)
enum SpvBuiltIn_ SpvBuiltIn
@ SpvStorageClassUniformConstant
@ SpvStorageClassPushConstant
@ SpvStorageClassFunction
@ SpvStorageClassWorkgroup
@ SpvStorageClassAtomicCounter
enum SpvImageFormat_ SpvImageFormat
@ SpvBuiltInGlobalInvocationId
@ SpvBuiltInLocalInvocationIndex
@ SpvBuiltInLocalInvocationId
@ SpvBuiltInViewportIndex
@ SpvBuiltInFragStencilRefEXT
@ SpvBuiltInInstanceIndex
@ SpvBuiltInTessLevelOuter
@ SpvBuiltInSubgroupLocalInvocationId
@ SpvBuiltInTessLevelInner
enum SpvCapability_ SpvCapability
@ SpvSelectionControlMaskNone
@ SpvMemoryAccessMaskNone
enum SpvDecoration_ SpvDecoration
enum SpvAddressingModel_ SpvAddressingModel
@ SpvDecorationNonUniformEXT
@ SpvDecorationArrayStride
@ SpvDecorationBufferBlock
@ SpvDecorationNonReadable
@ SpvDecorationNoPerspective
@ SpvDecorationDescriptorSet
@ SpvDecorationNoContraction
enum SpvExecutionModel_ SpvExecutionModel
static const unsigned int SpvMagicNumber
@ SpvExecutionModeStencilRefReplacingEXT
@ SpvExecutionModeInputPoints
@ SpvExecutionModeOutputVertices
@ SpvExecutionModeTriangles
@ SpvExecutionModeIsolines
@ SpvExecutionModeSpacingEqual
@ SpvExecutionModeLocalSize
@ SpvExecutionModePixelInterlockOrderedEXT
@ SpvExecutionModeSpacingFractionalEven
@ SpvExecutionModeSpacingFractionalOdd
@ SpvExecutionModeInvocations
@ SpvExecutionModeDepthLess
@ SpvExecutionModeEarlyFragmentTests
@ SpvExecutionModeOutputPoints
@ SpvExecutionModeInputTrianglesAdjacency
@ SpvExecutionModeSampleInterlockOrderedEXT
@ SpvExecutionModeOriginLowerLeft
@ SpvExecutionModeInputLinesAdjacency
@ SpvExecutionModeOutputLineStrip
@ SpvExecutionModeDepthGreater
@ SpvExecutionModeVertexOrderCw
@ SpvExecutionModeOutputTriangleStrip
@ SpvExecutionModePointMode
@ SpvExecutionModeInputLines
@ SpvExecutionModeDepthReplacing
@ SpvExecutionModeVertexOrderCcw
@ SpvExecutionModeOriginUpperLeft
static const unsigned int SpvWordCountShift
enum SpvLoopControlMask_ SpvLoopControlMask
static const unsigned int SpvOpCodeMask
enum SpvImageOperandsMask_ SpvImageOperandsMask
@ SpvImageOperandsBiasMask
@ SpvImageOperandsOffsetMask
@ SpvImageOperandsSampleMask
@ SpvImageOperandsLodMask
@ SpvImageOperandsConstOffsetMask
@ SpvImageOperandsMaskNone
@ SpvImageOperandsGradMask
@ SpvCapabilityMultiViewport
@ SpvCapabilityDerivativeControl
@ SpvCapabilityStorageTexelBufferArrayDynamicIndexingEXT
@ SpvCapabilityInterpolationFunction
@ SpvCapabilityDemoteToHelperInvocationEXT
@ SpvCapabilityDrawParameters
@ SpvCapabilityStorageImageArrayDynamicIndexing
@ SpvCapabilityCullDistance
@ SpvCapabilityRuntimeDescriptorArrayEXT
@ SpvCapabilityFragmentShaderSampleInterlockEXT
@ SpvCapabilityGroupNonUniformVote
@ SpvCapabilitySampledBuffer
@ SpvCapabilityClipDistance
@ SpvCapabilityFragmentShaderPixelInterlockEXT
@ SpvCapabilityAtomicStorage
@ SpvCapabilityImageGatherExtended
@ SpvCapabilityGroupNonUniformQuad
@ SpvCapabilityStencilExportEXT
@ SpvCapabilityGroupNonUniformArithmetic
@ SpvCapabilityGroupNonUniformBallot
@ SpvCapabilityTessellation
@ SpvCapabilityShaderNonUniformEXT
@ SpvCapabilityStorageBufferArrayDynamicIndexing
@ SpvCapabilityGroupNonUniformShuffle
@ SpvCapabilityStorageImageWriteWithoutFormat
@ SpvCapabilityUniformBufferArrayDynamicIndexing
@ SpvCapabilitySampledCubeArray
@ SpvCapabilityStorageImageReadWithoutFormat
@ SpvCapabilityTransformFeedback
@ SpvCapabilityImageBuffer
@ SpvCapabilitySampleRateShading
@ SpvCapabilityShaderViewportIndexLayerEXT
@ SpvCapabilityImageCubeArray
@ SpvCapabilitySampledImageArrayDynamicIndexing
@ SpvCapabilityImageQuery
@ SpvCapabilityUniformTexelBufferArrayDynamicIndexingEXT
@ SpvCapabilityGroupNonUniform
@ SpvGroupOperationReduce
@ SpvGroupOperationExclusiveScan
@ SpvFunctionControlMaskNone
@ SpvAddressingModelLogical
enum SpvStorageClass_ SpvStorageClass
@ SpvExecutionModelGeometry
@ SpvExecutionModelGLCompute
@ SpvExecutionModelTessellationControl
@ SpvExecutionModelTessellationEvaluation
@ SpvExecutionModelFragment
@ SpvExecutionModelVertex
enum SpvGroupOperation_ SpvGroupOperation
enum SpvMemoryModel_ SpvMemoryModel
enum SpvMemorySemanticsMask_ SpvMemorySemanticsMask
enum SpvExecutionMode_ SpvExecutionMode
@ SpvMemorySemanticsWorkgroupMemoryMask
@ SpvMemorySemanticsUniformMemoryMask
@ SpvMemorySemanticsAtomicCounterMemoryMask
@ SpvMemorySemanticsSequentiallyConsistentMask
@ SpvMemorySemanticsCrossWorkgroupMemoryMask
@ SpvMemorySemanticsMaskNone
@ SpvMemorySemanticsImageMemoryMask
@ SpvMemorySemanticsSubgroupMemoryMask
@ SpvMemorySemanticsAcquireReleaseMask
@ SpvOpGroupNonUniformFMul
@ SpvOpFOrdGreaterThanEqual
@ SpvOpSpecConstantComposite
@ SpvOpGroupNonUniformElect
@ SpvOpGroupNonUniformBallotBitCount
@ SpvOpImageSampleDrefImplicitLod
@ SpvOpGroupNonUniformAny
@ SpvOpGroupNonUniformBallot
@ SpvOpGroupNonUniformShuffle
@ SpvOpGroupNonUniformIMul
@ SpvOpGroupNonUniformFMin
@ SpvOpGroupNonUniformUMax
@ SpvOpFUnordGreaterThanEqual
@ SpvOpImageSampleExplicitLod
@ SpvOpInBoundsAccessChain
@ SpvOpGroupNonUniformIAdd
@ SpvOpImageSampleDrefExplicitLod
@ SpvOpGroupNonUniformFMax
@ SpvOpGroupNonUniformFAdd
@ SpvOpBeginInvocationInterlockEXT
@ SpvOpCompositeConstruct
@ SpvOpGroupNonUniformQuadBroadcast
@ SpvOpShiftRightArithmetic
@ SpvOpAtomicCompareExchange
@ SpvOpGroupNonUniformBroadcast
@ SpvOpGroupNonUniformAll
@ SpvOpDemoteToHelperInvocationEXT
@ SpvOpGroupNonUniformBroadcastFirst
@ SpvOpGroupNonUniformUMin
@ SpvOpGroupNonUniformBitwiseAnd
@ SpvOpGroupNonUniformSMin
@ SpvOpGroupNonUniformSMax
@ SpvOpEndInvocationInterlockEXT
@ SpvOpGroupNonUniformAllEqual
@ SpvOpGroupNonUniformQuadSwap
@ SpvOpGroupNonUniformBitwiseOr
@ SpvOpImageSampleImplicitLod
@ SpvOpGroupNonUniformBitwiseXor
wchar_t const *const size_t const buffer_size
struct signature_element * elements
unsigned int element_count
const char * semantic_name
enum vkd3d_shader_component_type component_type
unsigned int target_location
unsigned int register_index
enum vkd3d_shader_sysval_semantic sysval_semantic
unsigned int semantic_index
enum vkd3d_shader_interpolation_mode interpolation_mode
unsigned int stream_index
unsigned int register_count
uint32_t array_element_mask
enum vkd3d_shader_component_type component_type
enum vkd3d_shader_compile_option_feature_flags features
bool uav_read_without_format
struct vkd3d_spirv_builder spirv_builder
struct rb_tree symbol_table
struct vkd3d_shader_phase control_point_phase
const struct vkd3d_shader_transform_feedback_info * xfb_info
struct shader_signature output_signature
uint32_t discard_function_id
unsigned int ssa_register_count
size_t spec_constants_size
SpvExecutionMode fragment_coordinate_origin
unsigned int output_control_point_count
bool emit_default_control_point_phase
struct spirv_compiler::@6014 * spirv_parameter_info
const char ** block_names
const struct vsir_program * program
unsigned int spec_constant_count
struct shader_signature patch_constant_signature
struct vkd3d_hull_shader_variables hs
enum vkd3d_shader_api_version api_version
struct vkd3d_push_constant_buffer_binding * push_constants
struct shader_signature input_signature
uint32_t sample_positions_id
struct spirv_compiler::vkd3d_shader_output_info * output_info
struct vkd3d_shader_phase patch_constant_phase
unsigned int input_control_point_count
uint32_t descriptor_offsets_member_id
uint32_t * block_label_ids
uint32_t epilogue_function_id
struct vkd3d_shader_spec_constant * spec_constants
struct vkd3d_shader_descriptor_offset_info offset_info
struct ssa_register_info * ssa_register_info
uint32_t * descriptor_offset_ids
enum vkd3d_shader_compile_option_formatting_flags formatting
bool use_invocation_interlock
const struct vkd3d_shader_scan_descriptor_info1 * scan_descriptor_info
struct vkd3d_shader_location location
struct vkd3d_shader_message_context * message_context
enum vkd3d_shader_opcode phase
struct vkd3d_shader_interface_info shader_interface
enum vkd3d_shader_type shader_type
const struct vkd3d_shader_spirv_target_info * spirv_target_info
bool write_tess_geom_point_size
struct vkd3d_string_buffer_cache string_buffers
uint32_t current_spec_constant_id
uint32_t private_output_variable[MAX_REG_OUTPUT+1]
uint32_t private_output_variable_write_mask[MAX_REG_OUTPUT+1]
uint32_t push_constants_var_id
enum vkd3d_data_type data_type
unsigned int push_constant_index
unsigned int binding_base_idx
const struct vkd3d_symbol * array_symbol
unsigned int binding_base_idx
uint32_t patch_constants_id
uint32_t tess_level_inner_id
uint32_t tess_level_outer_id
struct vkd3d_shader_register reg
struct vkd3d_shader_push_constant_buffer pc
unsigned int resource_index
unsigned int sampler_index
unsigned int sampler_space
unsigned int resource_space
enum vkd3d_shader_visibility shader_visibility
const struct vkd3d_shader_compile_option * options
unsigned int option_count
enum vkd3d_shader_target_type target_type
unsigned int structure_stride
enum vkd3d_shader_resource_type resource_type
struct vkd3d_shader_register reg
const struct vkd3d_spirv_resource_type * resource_type_info
enum vkd3d_shader_component_type sampled_type
unsigned int structure_stride
uint32_t sampled_image_id
struct vkd3d_shader_instruction * elements
unsigned int combined_sampler_count
const struct vkd3d_shader_resource_binding * bindings
const struct vkd3d_shader_push_constant_buffer * push_constant_buffers
const struct vkd3d_shader_uav_counter_binding * uav_counters
unsigned int binding_count
unsigned int push_constant_buffer_count
const struct vkd3d_shader_combined_resource_sampler * combined_samplers
unsigned int uav_counter_count
enum vkd3d_shader_parameter_type type
struct vkd3d_shader_parameter_immediate_constant1 immediate_constant
struct vkd3d_shader_parameter_specialization_constant specialization_constant
enum vkd3d_shader_parameter_data_type data_type
struct vkd3d_shader_parameter_buffer buffer
union vkd3d_shader_parameter1::@5986 u
struct vkd3d_shader_src_param * rel_addr
const struct vkd3d_symbol * descriptor_array
unsigned int binding_base_idx
unsigned int structure_stride
enum vkd3d_shader_component_type component_type
SpvStorageClass storage_class
enum vkd3d_shader_register_type type
struct vkd3d_shader_register_index idx[3]
struct vkd3d_shader_descriptor_info1 * descriptors
unsigned int descriptor_count
enum vkd3d_shader_parameter_name name
enum vkd3d_shader_tessellator_output_primitive output_primitive
enum vkd3d_shader_tessellator_partitioning partitioning
enum vkd3d_shader_spirv_environment environment
struct vkd3d_shader_register reg
struct vkd3d_shader_dst_param reg
struct vkd3d_shader_dst_param reg
unsigned int structure_count
enum vkd3d_shader_parameter_name name
SpvCapability * capabilities
uint32_t scope_subgroup_id
uint32_t main_function_id
SpvExecutionModel execution_model
size_t capabilities_count
uint32_t ext_instr_set_glsl_450
struct vkd3d_spirv_stream annotation_stream
size_t iface_element_count
size_t insertion_location
uint32_t numeric_type_ids[VKD3D_SHADER_COMPONENT_TYPE_COUNT][VKD3D_VEC4_SIZE]
struct vkd3d_spirv_stream global_stream
struct rb_tree declarations
uint32_t invocation_count
struct vkd3d_spirv_stream insertion_stream
struct vkd3d_spirv_stream debug_stream
struct vkd3d_spirv_stream execution_mode_stream
size_t main_function_location
struct vkd3d_spirv_stream original_function_stream
struct vkd3d_spirv_stream function_stream
unsigned int spirv_array_size
enum vkd3d_shader_component_type component_type
vkd3d_spirv_builtin_fixup_pfn fixup_pfn
unsigned int component_count
unsigned int parameter_count
uint32_t parameters[MAX_SPIRV_DECLARATION_PARAMETER_COUNT]
SpvCapability uav_capability
unsigned int coordinate_component_count
enum vkd3d_shader_resource_type resource_type
struct list inserted_chunks
enum vkd3d_shader_register_type resource_type
unsigned int sampler_space
unsigned int sampler_index
SpvStorageClass storage_class
uint32_t contained_type_id
unsigned int push_constant_index
unsigned int binding_base_idx
SpvStorageClass storage_class
enum vkd3d_shader_component_type component_type
unsigned int structure_stride
enum vkd3d_shader_register_type type
unsigned int binding_base_idx
const struct vkd3d_symbol * uav_counter_array
unsigned int structure_stride
enum vkd3d_shader_component_type sampled_type
unsigned int uav_counter_base_idx
const struct vkd3d_spirv_resource_type * resource_type_info
enum vkd3d_shader_register_type type
struct vkd3d_symbol_sampler sampler
enum vkd3d_symbol::@6011 type
union vkd3d_symbol::@6012 key
const struct vkd3d_symbol * descriptor_array
union vkd3d_symbol::@6013 info
struct vkd3d_symbol_descriptor_array descriptor_array
@ VKD3D_SYMBOL_COMBINED_SAMPLER
@ VKD3D_SYMBOL_DESCRIPTOR_ARRAY
struct vkd3d_symbol_resource resource
struct vkd3d_symbol_register reg
struct vkd3d_symbol_combined_sampler combined_sampler
static unsigned int vkd3d_popcount(unsigned int v)
const char * vkd3d_dbg_sprintf(const char *fmt,...) VKD3D_PRINTF_FUNC(1
#define VKD3D_PRINTF_FUNC(fmt, args)
#define vkd3d_unreachable()
#define VKD3D_ASSERT(cond)
static int ascii_strcasecmp(const char *a, const char *b)
static int vkd3d_u32_compare(uint32_t x, uint32_t y)
static void * vkd3d_calloc(size_t count, size_t size)
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_TYPED_UAV
@ VKD3D_SHADER_COMPILE_OPTION_API_VERSION
@ VKD3D_SHADER_COMPILE_OPTION_WRITE_TESS_GEOM_POINT_SIZE
@ VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV
@ VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN
@ VKD3D_SHADER_COMPILE_OPTION_FEATURE
@ VKD3D_SHADER_COMPILE_OPTION_STRIP_DEBUG
@ VKD3D_SHADER_COMPILE_OPTION_FORMATTING
vkd3d_shader_compile_option_formatting_flags
@ VKD3D_SHADER_COMPILE_OPTION_FORMATTING_OFFSETS
@ VKD3D_SHADER_COMPILE_OPTION_FORMATTING_HEADER
@ VKD3D_SHADER_COMPILE_OPTION_FORMATTING_COLOUR
@ VKD3D_SHADER_COMPILE_OPTION_FORMATTING_INDENT
@ VKD3D_SHADER_COMPILE_OPTION_FORMATTING_RAW_IDS
@ VKD3D_SHADER_PARAMETER_TYPE_BUFFER
@ VKD3D_SHADER_PARAMETER_TYPE_SPECIALIZATION_CONSTANT
@ VKD3D_SHADER_PARAMETER_TYPE_IMMEDIATE_CONSTANT
@ VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN_LOWER_LEFT
@ VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN_UPPER_LEFT
VKD3D_SHADER_API void vkd3d_shader_free_shader_code(struct vkd3d_shader_code *code)
@ VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32_VEC4
@ VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32
@ VKD3D_SHADER_PARAMETER_DATA_TYPE_FLOAT32
@ 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_sysval_semantic
@ VKD3D_SHADER_SV_VERTEX_ID
@ VKD3D_SHADER_SV_RENDER_TARGET_ARRAY_INDEX
@ VKD3D_SHADER_SV_DEPTH_LESS_EQUAL
@ VKD3D_SHADER_SV_PRIMITIVE_ID
@ VKD3D_SHADER_SV_COVERAGE
@ VKD3D_SHADER_SV_CULL_DISTANCE
@ VKD3D_SHADER_SV_TESS_FACTOR_TRIEDGE
@ VKD3D_SHADER_SV_TESS_FACTOR_LINEDET
@ VKD3D_SHADER_SV_TESS_FACTOR_QUADEDGE
@ VKD3D_SHADER_SV_IS_FRONT_FACE
@ VKD3D_SHADER_SV_VIEWPORT_ARRAY_INDEX
@ VKD3D_SHADER_SV_TESS_FACTOR_QUADINT
@ VKD3D_SHADER_SV_TESS_FACTOR_TRIINT
@ VKD3D_SHADER_SV_TESS_FACTOR_LINEDEN
@ VKD3D_SHADER_SV_DEPTH_GREATER_EQUAL
@ VKD3D_SHADER_SV_INSTANCE_ID
@ VKD3D_SHADER_SV_CLIP_DISTANCE
@ VKD3D_SHADER_SV_SAMPLE_INDEX
@ VKD3D_SHADER_SV_STENCIL_REF
@ VKD3D_SHADER_SV_POSITION
#define VKD3D_SHADER_DUMMY_SAMPLER_INDEX
@ VKD3D_SHADER_VISIBILITY_DOMAIN
@ VKD3D_SHADER_VISIBILITY_COMPUTE
@ VKD3D_SHADER_VISIBILITY_PIXEL
@ VKD3D_SHADER_VISIBILITY_ALL
@ VKD3D_SHADER_VISIBILITY_GEOMETRY
@ VKD3D_SHADER_VISIBILITY_VERTEX
@ VKD3D_SHADER_VISIBILITY_HULL
vkd3d_shader_spirv_extension
@ VKD3D_SHADER_SPIRV_EXTENSION_EXT_DEMOTE_TO_HELPER_INVOCATION
@ VKD3D_SHADER_SPIRV_EXTENSION_EXT_FRAGMENT_SHADER_INTERLOCK
@ VKD3D_SHADER_SPIRV_EXTENSION_EXT_STENCIL_EXPORT
@ VKD3D_SHADER_SPIRV_EXTENSION_EXT_VIEWPORT_INDEX_LAYER
@ VKD3D_SHADER_SPIRV_EXTENSION_EXT_DESCRIPTOR_INDEXING
vkd3d_shader_tessellator_output_primitive
@ VKD3D_SHADER_TESSELLATOR_OUTPUT_TRIANGLE_CW
@ VKD3D_SHADER_TESSELLATOR_OUTPUT_POINT
@ VKD3D_SHADER_TESSELLATOR_OUTPUT_TRIANGLE_CCW
@ VKD3D_SHADER_TESSELLATOR_OUTPUT_LINE
@ VKD3D_SHADER_API_VERSION_1_10
vkd3d_shader_component_type
@ VKD3D_SHADER_COMPONENT_INT
@ VKD3D_SHADER_COMPONENT_UINT
@ VKD3D_SHADER_COMPONENT_DOUBLE
@ VKD3D_SHADER_COMPONENT_UINT64
@ VKD3D_SHADER_COMPONENT_FLOAT
@ VKD3D_SHADER_COMPONENT_VOID
@ VKD3D_SHADER_COMPONENT_BOOL
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_TEXTURE_2DARRAY
@ VKD3D_SHADER_RESOURCE_TEXTURE_2DMS
@ VKD3D_SHADER_RESOURCE_TEXTURE_3D
@ VKD3D_SHADER_RESOURCE_TEXTURE_1DARRAY
@ VKD3D_SHADER_RESOURCE_BUFFER
@ VKD3D_SHADER_RESOURCE_TEXTURE_CUBE
@ VKD3D_SHADER_RESOURCE_TEXTURE_1D
@ VKD3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY
@ VKD3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY
@ VKD3D_SHADER_RESOURCE_TEXTURE_2D
vkd3d_shader_binding_flag
@ VKD3D_SHADER_BINDING_FLAG_IMAGE
@ VKD3D_SHADER_BINDING_FLAG_BUFFER
vkd3d_shader_tessellator_partitioning
@ VKD3D_SHADER_TESSELLATOR_PARTITIONING_INTEGER
@ VKD3D_SHADER_TESSELLATOR_PARTITIONING_POW2
@ VKD3D_SHADER_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD
@ VKD3D_SHADER_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN
@ VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV_READ_FORMAT_UNKNOWN
@ VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV_READ_FORMAT_R32
#define VKD3D_SHADER_NO_SWIZZLE
@ VKD3D_SHADER_TARGET_SPIRV_TEXT
vkd3d_shader_spirv_environment
@ VKD3D_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_0
@ VKD3D_SHADER_SPIRV_ENVIRONMENT_OPENGL_4_5
@ VKD3D_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_1
vkd3d_shader_compile_option_feature_flags
@ VKD3D_SHADER_COMPILE_OPTION_FEATURE_WAVE_OPS
@ VKD3D_SHADER_COMPILE_OPTION_FEATURE_INT64
@ VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64
vkd3d_shader_parameter_name
@ VKD3D_SHADER_PARAMETER_NAME_RASTERIZER_SAMPLE_COUNT
@ VKD3D_SHADER_PARAMETER_NAME_ALPHA_TEST_REF
@ VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV_STORAGE_TEXEL_BUFFER
@ VKD3D_SHADER_COMPILE_OPTION_BUFFER_UAV_STORAGE_BUFFER
void vkd3d_string_buffer_init(struct vkd3d_string_buffer *buffer)
struct vkd3d_string_buffer * vkd3d_string_buffer_get(struct vkd3d_string_buffer_cache *cache)
void vkd3d_shader_code_from_string_buffer(struct vkd3d_shader_code *code, struct vkd3d_string_buffer *buffer)
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)
void vkd3d_string_buffer_release(struct vkd3d_string_buffer_cache *cache, struct vkd3d_string_buffer *buffer)
void vkd3d_string_buffer_cleanup(struct vkd3d_string_buffer *buffer)
void shader_instruction_array_destroy(struct vkd3d_shader_instruction_array *instructions)
void vkd3d_string_buffer_cache_init(struct vkd3d_string_buffer_cache *cache)
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)
void shader_signature_cleanup(struct shader_signature *signature)
void vkd3d_string_buffer_cache_cleanup(struct vkd3d_string_buffer_cache *cache)
int vkd3d_string_buffer_printf(struct vkd3d_string_buffer *buffer, const char *format,...)
#define vkd3d_find_struct(c, t)
#define VKD3DSI_PRECISE_XYZW
static enum vkd3d_shader_component_type vkd3d_component_type_from_resource_data_type(enum vkd3d_shader_resource_data_type data_type)
vkd3d_shader_src_modifier
#define vkd3d_shader_trace_text(text, size)
static bool vkd3d_shader_instruction_has_texel_offset(const struct vkd3d_shader_instruction *ins)
@ VKD3DSGF_ENABLE_WAVE_INTRINSICS
@ VKD3DSGF_REFACTORING_ALLOWED
@ VKD3DSGF_ENABLE_RAW_AND_STRUCTURED_BUFFERS
@ VKD3DSGF_FORCE_EARLY_DEPTH_STENCIL
@ VKD3DSGF_ENABLE_DOUBLE_PRECISION_FLOAT_OPS
@ VKD3DSGF_ENABLE_11_1_DOUBLE_EXTENSIONS
static bool data_type_is_64_bit(enum vkd3d_data_type data_type)
static bool vsir_register_is_descriptor(const struct vkd3d_shader_register *reg)
@ VKD3D_SHADER_TYPE_VERTEX
@ VKD3D_SHADER_TYPE_GEOMETRY
@ VKD3D_SHADER_TYPE_COMPUTE
@ VKD3D_SHADER_TYPE_PIXEL
@ VKD3D_SHADER_TYPE_DOMAIN
vkd3d_shader_interpolation_mode
@ VKD3DSIM_LINEAR_NOPERSPECTIVE_SAMPLE
@ VKD3DSIM_LINEAR_CENTROID
@ VKD3DSIM_LINEAR_NOPERSPECTIVE
#define VKD3DSP_WRITEMASK_3
static unsigned int vsir_write_mask_component_count(uint32_t write_mask)
vkd3d_shader_register_type
@ VKD3DSPR_GROUPSHAREDMEM
@ VKD3DSPR_LOCALTHREADINDEX
@ VKD3DSPR_IMMCONSTBUFFER
@ VKD3DSUF_GLOBALLY_COHERENT
@ VKD3DSUF_RASTERISER_ORDERED_VIEW
static bool data_type_is_floating_point(enum vkd3d_data_type data_type)
#define VKD3DSI_WAVE_PREFIX
#define VKD3D_SHADER_COMPONENT_TYPE_COUNT
static bool component_type_is_64_bit(enum vkd3d_shader_component_type component_type)
@ VKD3D_SHADER_ERROR_SPV_INVALID_REGISTER_TYPE
@ VKD3D_SHADER_WARNING_SPV_INVALID_SWIZZLE
@ VKD3D_SHADER_ERROR_SPV_DESCRIPTOR_IDX_UNSUPPORTED
@ VKD3D_SHADER_ERROR_SPV_INVALID_SHADER
@ VKD3D_SHADER_ERROR_SPV_NOT_IMPLEMENTED
@ VKD3D_SHADER_ERROR_SPV_OUT_OF_MEMORY
@ VKD3D_SHADER_ERROR_SPV_DESCRIPTOR_BINDING_NOT_FOUND
@ VKD3D_SHADER_ERROR_SPV_UNSUPPORTED_FEATURE
@ VKD3D_SHADER_ERROR_SPV_INVALID_HANDLER
@ VKD3D_SHADER_ERROR_SPV_INVALID_TYPE
@ VKD3D_SHADER_WARNING_SPV_IGNORING_FLAG
@ VKD3D_SHADER_ERROR_SPV_INVALID_DESCRIPTOR_BINDING
@ VKD3D_SHADER_WARNING_SPV_INVALID_UAV_FLAGS
static unsigned int vkd3d_write_mask_from_component_count(unsigned int component_count)
#define VKD3DSP_WRITEMASK_ALL
#define SPIRV_MAX_SRC_COUNT
@ VSIR_FULLY_NORMALISED_IO
static bool register_is_constant_or_undef(const struct vkd3d_shader_register *reg)
static bool data_type_is_integer(enum vkd3d_data_type data_type)
vkd3d_shader_input_sysval_semantic
@ VKD3D_SIV_TRIANGLE_U_TESS_FACTOR
@ VKD3D_SIV_CULL_DISTANCE
@ VKD3D_SIV_IS_FRONT_FACE
@ VKD3D_SIV_LINE_DETAIL_TESS_FACTOR
@ VKD3D_SIV_QUAD_U0_TESS_FACTOR
@ VKD3D_SIV_QUAD_U_INNER_TESS_FACTOR
@ VKD3D_SIV_TRIANGLE_INNER_TESS_FACTOR
@ VKD3D_SIV_RENDER_TARGET_ARRAY_INDEX
@ VKD3D_SIV_LINE_DENSITY_TESS_FACTOR
@ VKD3D_SIV_CLIP_DISTANCE
@ VKD3D_SIV_VIEWPORT_ARRAY_INDEX
static unsigned int vsir_write_mask_get_component_idx(uint32_t write_mask)
@ VSIR_RASTOUT_POINT_SIZE
static enum vkd3d_shader_component_type vkd3d_component_type_from_data_type(enum vkd3d_data_type data_type)
static unsigned int vsir_swizzle_get_component(uint32_t swizzle, unsigned int idx)
@ VKD3DSIH_DCL_IMMEDIATE_CONSTANT_BUFFER
@ VKD3DSIH_QUAD_READ_LANE_AT
@ VKD3DSIH_IMM_ATOMIC_UMAX
@ VKD3DSIH_DCL_TESSELLATOR_OUTPUT_PRIMITIVE
@ VKD3DSIH_WAVE_READ_LANE_AT
@ VKD3DSIH_DCL_INPUT_CONTROL_POINT_COUNT
@ VKD3DSIH_WAVE_PREFIX_BIT_COUNT
@ VKD3DSIH_WAVE_ACTIVE_ALL_EQUAL
@ VKD3DSIH_IMM_ATOMIC_XOR
@ VKD3DSIH_DCL_INPUT_PRIMITIVE
@ VKD3DSIH_STORE_UAV_TYPED
@ VKD3DSIH_WAVE_IS_FIRST_LANE
@ VKD3DSIH_WAVE_ACTIVE_BIT_OR
@ VKD3DSIH_DCL_GS_INSTANCES
@ VKD3DSIH_QUAD_READ_ACROSS_X
@ VKD3DSIH_DCL_OUTPUT_SIV
@ VKD3DSIH_QUAD_READ_ACROSS_D
@ VKD3DSIH_DCL_RESOURCE_RAW
@ VKD3DSIH_DCL_VERTICES_OUT
@ VKD3DSIH_DCL_OUTPUT_TOPOLOGY
@ VKD3DSIH_IMM_ATOMIC_CONSUME
@ VKD3DSIH_EVAL_SAMPLE_INDEX
@ VKD3DSIH_DCL_HS_MAX_TESSFACTOR
@ VKD3DSIH_DCL_UAV_STRUCTURED
@ VKD3DSIH_HS_CONTROL_POINT_PHASE
@ VKD3DSIH_DCL_INPUT_PS_SIV
@ VKD3DSIH_IMM_ATOMIC_IADD
@ VKD3DSIH_IMM_ATOMIC_EXCH
@ VKD3DSIH_ATOMIC_CMP_STORE
@ VKD3DSIH_WAVE_ACTIVE_BIT_XOR
@ VKD3DSIH_IMM_ATOMIC_IMIN
@ VKD3DSIH_QUAD_READ_ACROSS_Y
@ VKD3DSIH_WAVE_ACTIVE_BIT_AND
@ VKD3DSIH_IMM_ATOMIC_IMAX
@ VKD3DSIH_IMM_ATOMIC_ALLOC
@ VKD3DSIH_IMM_ATOMIC_AND
@ VKD3DSIH_WAVE_ACTIVE_BALLOT
@ VKD3DSIH_DCL_TGSM_STRUCTURED
@ VKD3DSIH_DCL_RESOURCE_STRUCTURED
@ VKD3DSIH_WAVE_READ_LANE_FIRST
@ VKD3DSIH_SWITCH_MONOLITHIC
@ VKD3DSIH_DCL_TESSELLATOR_DOMAIN
@ VKD3DSIH_DCL_OUTPUT_CONTROL_POINT_COUNT
@ VKD3DSIH_STORE_STRUCTURED
@ VKD3DSIH_IMM_ATOMIC_UMIN
@ VKD3DSIH_DCL_INPUT_PS_SGV
@ VKD3DSIH_DCL_INDEXABLE_TEMP
@ VKD3DSIH_IMM_ATOMIC_CMP_EXCH
@ VKD3DSIH_WAVE_ALL_BIT_COUNT
@ VKD3DSIH_DCL_TESSELLATOR_PARTITIONING
#define VKD3DSI_RESINFO_UINT
@ VKD3DSSF_GROUP_SHARED_MEMORY
@ VKD3DSSF_THREAD_GROUP_UAV
static bool vsir_sysval_semantic_is_clip_cull(enum vkd3d_shader_sysval_semantic sysval_semantic)
#define VKD3DSI_SAMPLE_INFO_UINT
static uint32_t vsir_write_mask_32_from_64(uint32_t write_mask64)
@ VKD3D_TESSELLATOR_DOMAIN_TRIANGLE
@ VKD3D_TESSELLATOR_DOMAIN_LINE
@ VKD3D_TESSELLATOR_DOMAIN_QUAD
static bool register_is_ssa(const struct vkd3d_shader_register *reg)
static enum vkd3d_data_type vkd3d_data_type_from_component_type(enum vkd3d_shader_component_type component_type)
@ VKD3D_SHADER_CONFIG_FLAG_FORCE_VALIDATION
static uint32_t vsir_write_mask_64_from_32(uint32_t write_mask32)
static bool vsir_sysval_semantic_is_tess_factor(enum vkd3d_shader_sysval_semantic sysval_semantic)
@ VKD3D_PT_TRIANGLELIST_ADJ
vkd3d_shader_conditional_op
@ VKD3D_SHADER_CONDITIONAL_OP_NZ
@ VKD3D_SHADER_CONDITIONAL_OP_Z
@ VKD3DSPDM_MSAMPCENTROID
static unsigned int vkd3d_compact_swizzle(uint32_t swizzle, uint32_t write_mask)
static bool vsir_register_is_label(const struct vkd3d_shader_register *reg)
#define VKD3DSP_WRITEMASK_0
#define VKD3DSP_WRITEMASK_1
#define SIGNATURE_TARGET_LOCATION_UNUSED
#define VKD3DSP_WRITEMASK_2
static uint32_t vsir_swizzle_32_from_64(uint32_t swizzle64)
#define VKD3DSI_SHIFT_UNMASKED
@ VKD3D_ERROR_INVALID_SHADER
@ VKD3D_ERROR_OUT_OF_MEMORY
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
static size_t align(size_t addr, size_t alignment)