41 ID3D12RootSignature_AddRef(iface);
57 TRACE(
"%p increasing refcount to %u.\n", root_signature,
refcount);
115 TRACE(
"%p decreasing refcount to %u.\n", root_signature,
refcount);
241 FIXME(
"Unhandled visibility %#x.\n", visibility);
263 FIXME(
"Unhandled visibility %#x.\n", visibility);
282 FIXME(
"Unhandled descriptor range type type %#x.\n",
type);
301 FIXME(
"Unhandled descriptor range type type %#x.\n",
type);
318 FIXME(
"Unhandled descriptor root parameter type %#x.\n",
type);
355 unsigned int space,
unsigned int base_idx,
unsigned int count)
357 struct d3d12_root_signature_info_range *
range;
360 sizeof(*
info->ranges)))
366 range->base_idx = base_idx;
368 range->visibility = visibility;
375 const struct d3d12_root_signature_info_range *range_a =
a, *range_b =
b;
390 const struct d3d12_root_signature_info_range *
range, *
next;
391 unsigned int i = 0,
j;
403 &&
range->visibility !=
next->visibility)
422 bool cbv_unbounded_range =
false, srv_unbounded_range =
false, uav_unbounded_range =
false;
424 bool sampler_unbounded_range =
false;
429 for (
i = 0;
i <
table->NumDescriptorRanges; ++
i)
432 unsigned int binding_count;
434 if (!
range->NumDescriptors)
436 WARN(
"A descriptor range is empty.\n");
443 WARN(
"A descriptor range overflows.\n");
449 WARN(
"A range with offset D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND occurs after "
450 "an unbounded range.\n");
467 binding_count = use_array ? 1 :
range->NumDescriptors;
469 switch (
range->RangeType)
476 info->binding_count += binding_count;
482 info->binding_count += binding_count;
485 ++
info->uav_range_count;
496 FIXME(
"Unhandled descriptor type %#x.\n",
range->RangeType);
500 info->binding_count += binding_count;
505 FIXME(
"The device does not support unbounded descriptor ranges.\n");
509 info->srv_unbounded_range_count += srv_unbounded_range * 2u;
510 info->uav_unbounded_range_count += uav_unbounded_range * 2u;
511 info->cbv_unbounded_range_count += cbv_unbounded_range;
512 info->sampler_unbounded_range_count += sampler_unbounded_range;
525 for (
i = 0;
i <
desc->NumParameters; ++
i)
529 switch (
p->ParameterType)
539 ++
info->root_descriptor_count;
541 ++
info->binding_count;
545 p->u.Descriptor.RegisterSpace,
p->u.Descriptor.ShaderRegister, 1)))
550 ++
info->root_descriptor_count;
552 ++
info->binding_count;
556 p->u.Descriptor.RegisterSpace,
p->u.Descriptor.ShaderRegister, 1)))
561 ++
info->root_descriptor_count;
563 ++
info->binding_count;
567 p->u.Descriptor.RegisterSpace,
p->u.Descriptor.ShaderRegister, 1)))
572 ++
info->root_constant_count;
573 info->cost +=
p->u.Constants.Num32BitValues;
576 p->u.Constants.RegisterSpace,
p->u.Constants.ShaderRegister, 1)))
581 FIXME(
"Unhandled type %#x for parameter %u.\n",
p->ParameterType,
i);
587 info->binding_count +=
desc->NumStaticSamplers;
588 info->sampler_count +=
desc->NumStaticSamplers;
590 for (
i = 0;
i <
desc->NumStaticSamplers; ++
i)
596 s->RegisterSpace,
s->ShaderRegister, 1)))
613 info->range_count = 0;
614 info->range_capacity = 0;
622 uint32_t *push_constant_range_count)
625 bool use_vk_heaps = root_signature->
device->use_vk_heaps;
626 unsigned int i,
j, push_constant_count;
630 memset(push_constants_offset, 0,
sizeof(push_constants_offset));
631 for (
i = 0;
i <
desc->NumParameters; ++
i)
643 push_constants[visibility].size +=
align(
p->u.Constants.Num32BitValues, 4) *
sizeof(
uint32_t);
654 push_constant_count = 1;
661 push_constants[
i].size = 0;
670 if (push_constants[
i].
size)
672 push_constants[
j] = push_constants[
i];
673 push_constants[
j].offset =
offset;
674 push_constants_offset[
i] =
offset;
675 offset += push_constants[
j].size;
679 push_constant_count =
j;
682 for (
i = 0,
j = 0;
i <
desc->NumParameters; ++
i)
691 idx = push_constant_count == 1 ? 0 :
p->ShaderVisibility;
693 push_constants_offset[
idx] +=
align(
p->u.Constants.Num32BitValues, 4) *
sizeof(
uint32_t);
695 root_signature->
parameters[
i].parameter_type =
p->ParameterType;
696 root_constant->
stage_flags = push_constant_count == 1
700 root_signature->
root_constants[
j].register_space =
p->u.Constants.RegisterSpace;
701 root_signature->
root_constants[
j].register_index =
p->u.Constants.ShaderRegister;
710 *push_constant_range_count = push_constant_count;
733 VkShaderStageFlags stage_flags,
const VkSampler *immutable_sampler,
unsigned int *binding_idx)
741 ERR(
"Failed to reallocate the Vulkan binding array.\n");
745 *binding_idx = binding_count;
747 binding->binding = binding_count;
748 binding->descriptorType = descriptor_type;
749 binding->descriptorCount = descriptor_count;
750 binding->stageFlags = stage_flags;
751 binding->pImmutableSamplers = immutable_sampler;
782 WARN(
"Required descriptor set count exceeds maximum allowed count of %u.\n",
max_count);
817 const VkSampler *immutable_sampler,
unsigned int *binding_idx)
832 mapping->type = descriptor_type;
833 mapping->register_space = register_space;
834 mapping->register_index = register_idx;
835 mapping->shader_visibility = shader_visibility;
839 mapping->binding.count = descriptor_count;
842 offset->static_offset = 0;
843 offset->dynamic_offset_index = ~0
u;
868 ERR(
"Invalid range type %#x.\n",
type);
879 return range->descriptor_count;
900 ERR(
"Unhandled type %#x.\n",
range->type);
906 WARN(
"Descriptor table exceeds type %#x limit of %u.\n",
range->type,
limit);
915 unsigned int vk_binding_array_count,
unsigned int bindings_per_range,
921 unsigned int i, register_space =
range->register_space;
927 for (
i = 0;
i < bindings_per_range; ++
i)
930 register_space,
range->base_register_idx +
i, is_buffer, shader_visibility,
941 for (
i = 0;
i < bindings_per_range; ++
i)
944 register_space,
range->base_register_idx +
i,
false, shader_visibility,
964 mapping->shader_visibility = shader_visibility;
970 offset->static_offset = descriptor_offset;
971 offset->dynamic_offset_index = ~0
u;
975 unsigned int descriptor_set_size)
979 if (descriptor_set_size <= range->
offset)
981 ERR(
"Descriptor range offset %u exceeds maximum available offset %u.\n",
range->offset, descriptor_set_size - 1);
992 ERR(
"Range size %u exceeds available descriptor count %u.\n",
range->descriptor_count,
max_count);
993 return range->descriptor_count;
1008 unsigned int descriptor_set_size;
1010 if (root_signature->
device->vk_info.EXT_mutable_descriptor_type)
1023 else switch (
range->type)
1042 FIXME(
"Unhandled descriptor range type type %#x.\n",
range->type);
1062 mapping->shader_visibility = shader_visibility;
1066 offset->dynamic_offset_index =
context->push_constant_index;
1078 mapping->shader_visibility = shader_visibility;
1082 root_signature->
device->vk_info.descriptor_limits.storage_image_max_descriptors);
1084 offset->dynamic_offset_index =
context->push_constant_index;
1111 descriptor_offset,
true, shader_visibility,
context);
1114 descriptor_offset, is_buffer, shader_visibility,
context);
1137 unsigned int i,
j, range_count, bindings_per_range, vk_binding_array_count;
1145 for (
i = 0;
i <
desc->NumParameters; ++
i)
1158 range_count =
p->u.DescriptorTable.NumDescriptorRanges;
1161 root_signature->
parameters[
i].parameter_type =
p->ParameterType;
1162 table->range_count = range_count;
1168 for (
j = 0;
j < range_count; ++
j)
1179 table->ranges[
j].descriptor_count =
range->NumDescriptors;
1182 table->ranges[
j].register_space =
range->RegisterSpace;
1183 table->ranges[
j].base_register_idx =
range->BaseShaderRegister;
1185 TRACE(
"Descriptor table %u, range %u, offset %u, type %#x, count %u.\n",
i,
j,
1194 for (
j = 0;
j < range_count; ++
j)
1205 range->vk_binding_count = 0;
1221 unsigned int rel_offset =
range->offset - base_range->
offset;
1225 ERR(
"Available binding size of %u is insufficient for an offset of %u.\n",
1234 rel_offset, shader_visibility,
context);
1244 vk_binding_array_count =
range->vk_binding_count;
1245 bindings_per_range = 1;
1249 range->vk_binding_count =
range->descriptor_count;
1250 vk_binding_array_count = 1;
1251 bindings_per_range =
range->descriptor_count;
1257 p->ShaderVisibility, vk_binding_array_count, bindings_per_range,
context)))
1260 ++
context->push_constant_index;
1274 for (
i = 0;
i <
desc->NumParameters; ++
i)
1286 p->u.Descriptor.RegisterSpace,
p->u.Descriptor.ShaderRegister,
true,
1290 root_signature->
parameters[
i].parameter_type =
p->ParameterType;
1305 for (
i = 0;
i <
desc->NumStaticSamplers; ++
i)
1319 if (
device->use_vk_heaps)
1337 if (
range->size > root_signature->
device->vk_info.device_limits.maxPushConstantsSize)
1338 FIXME(
"Push constants size %u exceeds maximum allowed size %u. Try VKD3D_CONFIG=virtual_heaps.\n",
1339 range->size, root_signature->
device->vk_info.device_limits.maxPushConstantsSize);
1351 if (
binding->descriptorCount == 1)
1354 switch (
binding->descriptorType)
1383 if (
device->vk_info.EXT_descriptor_indexing)
1387 for (
i = 0;
i < binding_count; ++
i)
1391 if (
i < binding_count)
1396 for (
i = 0;
i < binding_count; ++
i)
1409 set_desc.
pNext = &flags_info;
1417 WARN(
"Failed to create Vulkan descriptor set layout, vr %d.\n", vr);
1425 unsigned int set_layout_count,
const VkDescriptorSetLayout *set_layouts,
1427 VkPipelineLayout *pipeline_layout)
1438 pipeline_layout_info.
flags = 0;
1444 &pipeline_layout_info,
NULL, pipeline_layout))) < 0)
1446 WARN(
"Failed to create Vulkan pipeline layout, vr %d.\n", vr);
1482 VkDescriptorSetLayout *vk_set_layouts)
1486 VkDescriptorSetLayout vk_set_layout;
1497 vk_set_layout =
device->vk_descriptor_heap_layouts[
set].vk_set_layout;
1500 vk_set_layouts[
i++] = vk_set_layout;
1540 FIXME(
"Ignoring root signature flags %#x.\n",
desc->Flags);
1546 WARN(
"Root signature cost %zu exceeds maximum allowed cost.\n",
info.cost);
1557 use_vk_heaps =
device->use_vk_heaps;
1600 context.push_constant_index = 0;
1638 } root_signature_desc;
1645 WARN(
"Failed to parse root signature, vkd3d result %d.\n",
ret);
1663 TRACE(
"Created root signature %p.\n",
object);
1665 *root_signature =
object;
1686 unsigned int index, attachment_index;
1689 bool have_depth_stencil;
1690 unsigned int rt_count;
1694 cache->render_pass_count + 1,
sizeof(*
cache->render_passes)))
1704 have_depth_stencil =
key->depth_enable ||
key->stencil_enable;
1705 rt_count = have_depth_stencil ?
key->attachment_count - 1 :
key->attachment_count;
1717 attachments[attachment_index].
flags = 0;
1719 attachments[attachment_index].
samples =
key->sample_count;
1733 if (have_depth_stencil)
1739 attachments[attachment_index].
flags = 0;
1741 attachments[attachment_index].
samples =
key->sample_count;
1743 if (
key->depth_enable)
1753 if (
key->stencil_enable)
1764 attachments[attachment_index].
finalLayout = depth_layout;
1767 attachment_references[
index].
layout = depth_layout;
1772 sub_pass_desc.
flags = 0;
1779 if (have_depth_stencil)
1788 pass_info.
flags = 0;
1798 ++
cache->render_pass_count;
1802 WARN(
"Failed to create Vulkan render pass, vr %d.\n", vr);
1818 for (
i = 0;
i <
cache->render_pass_count; ++
i)
1841 cache->render_pass_count = 0;
1842 cache->render_passes_size = 0;
1851 for (
i = 0;
i <
cache->render_pass_count; ++
i)
1886 sample_desc->
Count = 1;
1909 desc->primitive_topology_type =
d3d12_desc->PrimitiveTopologyType;
1910 desc->rtv_formats.NumRenderTargets =
d3d12_desc->NumRenderTargets;
1948#define DCL_SUBOBJECT_INFO(type, field) {__alignof__(type), sizeof(type), offsetof(struct d3d12_pipeline_state_desc, field)}
1972#undef DCL_SUBOBJECT_INFO
1979 stream_ptr =
d3d12_desc->pPipelineStateSubobjectStream;
1986 WARN(
"Invalid pipeline state stream.\n");
1991 if (subobject_type >=
ARRAY_SIZE(subobject_info))
1993 FIXME(
"Unhandled pipeline subobject type %#x.\n", subobject_type);
1997 subobject_bit = 1ull << subobject_type;
1998 if (defined_subobjects & subobject_bit)
2000 WARN(
"Duplicate pipeline subobject type %u.\n", subobject_type);
2003 defined_subobjects |= subobject_bit;
2006 size = subobject_info[subobject_type].size;
2010 WARN(
"Invalid pipeline state stream.\n");
2014 memcpy(&desc_bytes[subobject_info[subobject_type].dst_offset], &stream_ptr[
i +
start],
size);
2020 if (
desc->vs.BytecodeLength &&
desc->vs.pShaderBytecode)
2024 else if (
desc->cs.BytecodeLength &&
desc->cs.pShaderBytecode)
2030 WARN(
"Cannot deduce pipeline type from shader stages.\n");
2034 if (
desc->vs.BytecodeLength &&
desc->vs.pShaderBytecode
2035 &&
desc->cs.BytecodeLength &&
desc->cs.pShaderBytecode)
2037 WARN(
"Invalid combination of shader stages VS and CS.\n");
2076 ID3D12PipelineState_AddRef(iface);
2151 if (
state->implicit_root_signature)
2220 FIXME(
"iface %p, blob %p stub!\n", iface,
blob);
2252 return device->vk_info.uav_read_without_format
2259 unsigned int flags = 0;
2261 if (
device->feature_options1.Int64ShaderOps)
2263 if (
device->feature_options.DoublePrecisionFloatShaderOps)
2265 if (
device->feature_options1.WaveOps)
2292 stage_desc->
flags = 0;
2293 stage_desc->
stage = stage;
2294 stage_desc->
pName =
"main";
2299 shader_desc.
flags = 0;
2302 compile_info.
next = shader_interface;
2303 compile_info.
source.code =
code->pShaderBytecode;
2304 compile_info.
source.size =
code->BytecodeLength;
2314 WARN(
"Failed to compile shader, vkd3d result %d.\n",
ret);
2324 WARN(
"Failed to create Vulkan shader module, vr %d.\n", vr);
2344 compile_info.
next = descriptor_info;
2345 compile_info.
source.code =
code->pShaderBytecode;
2346 compile_info.
source.size =
code->BytecodeLength;
2361 VkPipelineLayout vk_pipeline_layout, VkPipeline *vk_pipeline)
2370 pipeline_info.
flags = 0;
2374 pipeline_info.layout = vk_pipeline_layout;
2397 uint32_t set_index, descriptor_binding;
2398 unsigned int uav_counter_count = 0;
2410 ++uav_counter_count;
2413 if (!uav_counter_count)
2421 FIXME(
"Found a UAV counter for Vulkan shader stage %#x. UAV counters in a "
2422 "graphics pipeline are only supported in pixel shaders.\n", stage_flags);
2426 if (!(binding_desc =
vkd3d_calloc(uav_counter_count,
sizeof(*binding_desc))))
2428 if (!(
state->uav_counters.bindings =
vkd3d_calloc(uav_counter_count,
sizeof(*
state->uav_counters.bindings))))
2433 state->uav_counters.binding_count = uav_counter_count;
2435 descriptor_binding = 0;
2446 state->uav_counters.bindings[
j].register_space =
d->register_space;
2447 state->uav_counters.bindings[
j].register_index =
d->register_index;
2450 state->uav_counters.bindings[
j].binding.set = set_index;
2451 state->uav_counters.bindings[
j].binding.binding = descriptor_binding;
2452 state->uav_counters.bindings[
j].binding.count = 1;
2454 binding_desc[
j].
binding = descriptor_binding;
2460 ++descriptor_binding;
2466 false, binding_desc, &
state->uav_counters.vk_set_layout);
2477 state->uav_counters.set_index = set_index;
2478 set_layouts[set_index++] =
state->uav_counters.vk_set_layout;
2481 &
state->uav_counters.vk_pipeline_layout)))
2499 if (
device->use_vk_heaps)
2506 WARN(
"Failed to scan shader bytecode, stage %#x, vkd3d result %d.\n", stage_flags,
ret);
2530 state->refcount = 1;
2536 TRACE(
"Root signature is NULL, looking for an embedded signature.\n");
2538 desc->cs.pShaderBytecode,
desc->cs.BytecodeLength, &root_signature)))
2553 if (
state->implicit_root_signature)
2558 memset(&target_info, 0,
sizeof(target_info));
2576 shader_interface.
next = &target_info;
2601 if (
state->implicit_root_signature)
2610 if (
state->implicit_root_signature)
2639 TRACE(
"Created compute pipeline state %p.\n",
object);
2655 FIXME(
"Unhandled fill mode %#x.\n",
mode);
2671 FIXME(
"Unhandled cull mode %#x.\n",
mode);
2698 FIXME(
"Ignoring ForcedSampleCount %#x.\n",
d3d12_desc->ForcedSampleCount);
2700 FIXME(
"Ignoring ConservativeRaster %#x.\n",
d3d12_desc->ConservativeRaster);
2710 depth_clip_info->
flags = 0;
2726 FIXME(
"Rasterization stream select is not supported by Vulkan implementation.\n");
2759 FIXME(
"Unhandled stencil op %#x.\n",
op);
2785 FIXME(
"Unhandled compare op %#x.\n",
op);
2806 memset(vk_desc, 0,
sizeof(*vk_desc));
2900 FIXME(
"Unhandled blend op %#x.\n",
op);
2920 memset(vk_desc, 0,
sizeof(*vk_desc));
2941 return desc->BlendEnable
2958 FIXME(
"InputLayout.NumElements %u > %u, ignoring extra elements.\n",
2966 if (
e->InputSlot >=
ARRAY_SIZE(input_slot_offsets))
2968 WARN(
"Invalid input slot %#x.\n",
e->InputSlot);
2976 WARN(
"Invalid input element format %#x.\n",
e->Format);
3003 VkFormat dynamic_dsv_format, VkRenderPass *vk_render_pass)
3013 dsv_format = dynamic_dsv_format;
3022 key.vk_formats[
key.attachment_count++] = dsv_format;
3026 key.depth_enable =
false;
3027 key.stencil_enable =
false;
3028 key.depth_stencil_write =
false;
3079 FIXME(
"Unhandled logic op %#x.\n",
op);
3104 bool have_attachment, is_dsv_format_unknown;
3108 unsigned int instance_divisor;
3116 static const DWORD default_ps_code[] =
3122 0x43425844, 0x19cbf606, 0x18f562b9, 0xdaeed4db, 0xc324aa46, 0x00000001, 0x00000060, 0x00000003,
3123 0x0000002c, 0x0000003c, 0x0000004c, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f,
3124 0x00000008, 0x00000000, 0x00000008, 0x52444853, 0x0000000c, 0x00000040, 0x00000003, 0x0100003e,
3142 state->refcount = 1;
3147 memset(&input_signature, 0,
sizeof(input_signature));
3153 WARN(
"Format must be set to DXGI_FORMAT_UNKNOWN for inactive render targets.\n");
3160 WARN(
"Root signature is NULL.\n");
3165 if (
desc->sample_desc.Count != 1 &&
desc->sample_desc.Quality)
3166 WARN(
"Ignoring sample quality %u.\n",
desc->sample_desc.Quality);
3168 rt_count =
desc->rtv_formats.NumRenderTargets;
3171 FIXME(
"NumRenderTargets %zu > %zu, ignoring extra formats.\n",
3177 &&
device->feature_options.OutputMergerLogicOp;
3182 WARN(
"The device does not support output merger logic ops. Ignoring logic op %#x.\n",
3183 desc->blend_state.RenderTarget[0].LogicOp);
3186 for (
i = 0;
i < rt_count; ++
i)
3203 WARN(
"Invalid RTV format %#x.\n",
desc->rtv_formats.RTFormats[
i]);
3208 rt_desc = &
desc->blend_state.RenderTarget[
desc->blend_state.IndependentBlendEnable ?
i : 0];
3211 WARN(
"IndependentBlendEnable must be FALSE when logic operations are enabled.\n");
3217 WARN(
"Only one of BlendEnable or LogicOpEnable can be set to TRUE.\n");
3231 WARN(
"Depth bounds test not supported by device.\n");
3239 TRACE(
"Disabling depth test.\n");
3249 WARN(
"DSV format is DXGI_FORMAT_UNKNOWN.\n");
3256 FIXME(
"Format %#x is not depth/stencil format.\n",
format->dxgi_format);
3262 WARN(
"Invalid DSV format %#x.\n",
desc->dsv_format);
3267 if (!
desc->ps.pShaderBytecode)
3288 ps_target_info.
parameters = ps_shader_parameters;
3296 WARN(
"Only one render target is allowed when dual source blending is used.\n");
3304 if (
desc->blend_state.RenderTarget[
i].BlendEnable)
3306 WARN(
"Blend enable cannot be set for render target %u when dual source blending is used.\n",
i);
3313 memset(&target_info, 0,
sizeof(target_info));
3324 WARN(
"Stream output is used without D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT.\n");
3331 FIXME(
"Transform feedback is not supported by Vulkan implementation.\n");
3346 if (
desc->gs.pShaderBytecode)
3348 else if (
desc->ds.pShaderBytecode)
3378 if (!
b->pShaderBytecode)
3382 b, shader_stages[
i].stage)))
3387 stage_target_info = &target_info;
3388 switch (shader_stages[
i].stage)
3402 WARN(
"D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH must be used with tessellation shaders.\n");
3416 stage_target_info = &ps_target_info;
3429 if (shader_stages[
i].stage == xfb_stage)
3436 shader_stages[
i].
stage,
b, &shader_interface)))
3445 FIXME(
"InputLayout.NumElements %zu > %zu, ignoring extra elements.\n",
3453 WARN(
"Input layout is used without D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT.\n");
3471 WARN(
"Invalid input element format %#x.\n",
e->Format);
3479 WARN(
"Invalid input slot %#x.\n",
e->InputSlot);
3485 e->SemanticName,
e->SemanticIndex, 0)))
3487 WARN(
"Unused input element %u.\n",
i);
3500 switch (
e->InputSlotClass)
3504 instance_divisor = 1;
3509 instance_divisor =
e->InstanceDataStepRate;
3513 FIXME(
"Instance divisor %u not supported by Vulkan implementation.\n", instance_divisor);
3514 instance_divisor = 1;
3519 FIXME(
"Unhandled input slot class %#x on input element %u.\n",
e->InputSlotClass,
i);
3524 if (
mask & (1u <<
e->InputSlot) && (graphics->
input_rates[
e->InputSlot] != input_rate
3525 || instance_divisors[
e->InputSlot] != instance_divisor))
3527 FIXME(
"Input slot rate %#x, instance divisor %u on input element %u conflicts "
3528 "with earlier input slot rate %#x, instance divisor %u.\n",
3529 input_rate, instance_divisor,
e->InputSlot,
3530 graphics->
input_rates[
e->InputSlot], instance_divisors[
e->InputSlot]);
3536 instance_divisors[
e->InputSlot] = instance_divisor;
3537 if (instance_divisor != 1 && !(
mask & (1u <<
e->InputSlot)))
3540 binding_divisor->
binding =
e->InputSlot;
3541 binding_divisor->
divisor = instance_divisor;
3543 mask |= 1u <<
e->InputSlot;
3548 switch (
desc->strip_cut_value)
3556 WARN(
"Invalid index buffer strip cut value %#x.\n",
desc->strip_cut_value);
3564 have_attachment = graphics->
rt_count || graphics->
dsv_format || is_dsv_format_unknown;
3565 if ((!have_attachment && !(
desc->ps.pShaderBytecode &&
desc->ps.BytecodeLength))
3580 if (
desc->sample_mask != ~0
u)
3590 if (
desc->view_instancing_desc.ViewInstanceCount)
3592 FIXME(
"View instancing is not supported yet.\n");
3599 if (is_dsv_format_unknown)
3648 TRACE(
"Created graphics pipeline state %p.\n",
object);
3689 TRACE(
"Created pipeline state %p.\n",
object);
3745 FIXME(
"Unhandled primitive topology %#x.\n", topology);
3801 if (!(compiled_pipeline =
vkd3d_malloc(
sizeof(*compiled_pipeline))))
3804 compiled_pipeline->
key = *
key;
3815 compiled_pipeline =
NULL;
3820 if (compiled_pipeline)
3824 return compiled_pipeline;
3829 VkRenderPass *vk_render_pass)
3842 size_t binding_count = 0;
3843 VkPipeline vk_pipeline;
3872 .dynamicStateCount =
ARRAY_SIZE(dynamic_states),
3873 .pDynamicStates = dynamic_states,
3878 memset(&pipeline_key, 0,
sizeof(pipeline_key));
3892 FIXME(
"Maximum binding count exceeded.\n");
3897 b = &bindings[binding_count];
3914 input_desc.
flags = 0;
3922 input_desc.
pNext = &input_divisor_info;
3938 WARN(
"Primitive topology is undefined.\n");
3944 tessellation_info.
flags = 0;
3950 blend_desc.
flags = 0;
3962 pipeline_desc.
flags = 0;
3974 pipeline_desc.layout =
state->uav_counters.vk_pipeline_layout ?
state->uav_counters.vk_pipeline_layout
3981 if (!(pipeline_desc.renderPass = graphics->
render_pass))
3984 TRACE(
"Compiling %p with DSV format %#x.\n",
state, dsv_format);
3987 &pipeline_desc.renderPass)))
3991 *vk_render_pass = pipeline_desc.renderPass;
3994 1, &pipeline_desc,
NULL, &vk_pipeline))) < 0)
3996 WARN(
"Failed to create Vulkan graphics pipeline, vr %d.\n", vr);
4007 ERR(
"Could not get the pipeline compiled by other thread from the cache.\n");
4022 info.next = &hlsl_info;
4023 info.source = *hlsl;
4080 VkDescriptorSetLayout *set_layout;
4081 VkPipelineLayout *pipeline_layout;
4092 VkPipeline *pipeline;
4093 VkPipelineLayout *pipeline_layout;
4098#define SHADER_CODE(name) {name, sizeof(name)}
4099 {&
state->pipelines_float.buffer, &
state->vk_pipeline_layout_buffer,
4101 {&
state->pipelines_float.image_1d, &
state->vk_pipeline_layout_image,
4103 {&
state->pipelines_float.image_1d_array, &
state->vk_pipeline_layout_image,
4105 {&
state->pipelines_float.image_2d, &
state->vk_pipeline_layout_image,
4107 {&
state->pipelines_float.image_2d_array, &
state->vk_pipeline_layout_image,
4109 {&
state->pipelines_float.image_3d, &
state->vk_pipeline_layout_image,
4112 {&
state->pipelines_uint.buffer, &
state->vk_pipeline_layout_buffer,
4114 {&
state->pipelines_uint.image_1d, &
state->vk_pipeline_layout_image,
4116 {&
state->pipelines_uint.image_1d_array, &
state->vk_pipeline_layout_image,
4118 {&
state->pipelines_uint.image_2d, &
state->vk_pipeline_layout_image,
4120 {&
state->pipelines_uint.image_2d_array, &
state->vk_pipeline_layout_image,
4122 {&
state->pipelines_uint.image_3d, &
state->vk_pipeline_layout_image,
4129 set_binding.binding = 0;
4130 set_binding.descriptorCount = 1;
4132 set_binding.pImmutableSamplers =
NULL;
4143 push_constant_range.
offset = 0;
4149 push_constant.
offset = 0;
4154 set_binding.descriptorType = set_layouts[
i].descriptor_type;
4157 1,
false, &set_binding, set_layouts[
i].set_layout)))
4164 1, &push_constant_range, set_layouts[
i].pipeline_layout)))
4189 ERR(
"Failed to compile HLSL compute shader %u, ret %d.\n",
i,
ret);
4194 if (
pipelines[
i].pipeline_layout == &
state->vk_pipeline_layout_buffer)
_Check_return_ _Ret_maybenull_ _In_ size_t alignment
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
#define STDMETHODCALLTYPE
D3D12_DESCRIPTOR_RANGE_TYPE
@ D3D12_DESCRIPTOR_RANGE_TYPE_SRV
@ D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER
@ D3D12_DESCRIPTOR_RANGE_TYPE_CBV
@ D3D12_DESCRIPTOR_RANGE_TYPE_UAV
@ D3D12_FILL_MODE_WIREFRAME
@ D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA
@ D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA
const UINT D3D12_VS_INPUT_REGISTER_COUNT
const UINT D3D12_SO_NO_RASTERIZED_STREAM
@ D3D12_COLOR_WRITE_ENABLE_GREEN
@ D3D12_COLOR_WRITE_ENABLE_BLUE
@ D3D12_COLOR_WRITE_ENABLE_ALPHA
@ D3D12_COLOR_WRITE_ENABLE_ALL
@ D3D12_COLOR_WRITE_ENABLE_RED
const UINT D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND
D3D12_PRIMITIVE_TOPOLOGY_TYPE
@ D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH
const UINT D3D12_MAX_ROOT_COST
const UINT D3D12_DEFAULT_STENCIL_READ_MASK
@ D3D12_LOGIC_OP_OR_INVERTED
@ D3D12_LOGIC_OP_AND_REVERSE
@ D3D12_LOGIC_OP_OR_REVERSE
@ D3D12_LOGIC_OP_AND_INVERTED
@ D3D12_LOGIC_OP_COPY_INVERTED
@ D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF
@ D3D12_DEPTH_WRITE_MASK_ALL
const UINT D3D12_DEFAULT_SAMPLE_MASK
@ D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT
@ D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT
const UINT D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT
const UINT D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT
@ D3D12_STENCIL_OP_INVERT
@ D3D12_STENCIL_OP_REPLACE
@ D3D12_STENCIL_OP_INCR_SAT
@ D3D12_STENCIL_OP_DECR_SAT
@ D3D12_BLEND_OP_SUBTRACT
@ D3D12_BLEND_OP_REV_SUBTRACT
D3D12_ROOT_PARAMETER_TYPE
@ D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE
@ D3D12_ROOT_PARAMETER_TYPE_SRV
@ D3D12_ROOT_PARAMETER_TYPE_UAV
@ D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS
@ D3D12_ROOT_PARAMETER_TYPE_CBV
const UINT D3D12_DEFAULT_STENCIL_WRITE_MASK
D3D12_PIPELINE_STATE_SUBOBJECT_TYPE
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS
@ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO
@ D3D12_COMPARISON_FUNC_GREATER_EQUAL
@ D3D12_COMPARISON_FUNC_ALWAYS
@ D3D12_COMPARISON_FUNC_NOT_EQUAL
@ D3D12_COMPARISON_FUNC_LESS_EQUAL
@ D3D12_COMPARISON_FUNC_LESS
@ D3D12_COMPARISON_FUNC_NEVER
@ D3D12_COMPARISON_FUNC_EQUAL
@ D3D12_COMPARISON_FUNC_GREATER
@ D3D12_SHADER_VISIBILITY_DOMAIN
@ D3D12_SHADER_VISIBILITY_MESH
@ D3D12_SHADER_VISIBILITY_ALL
@ D3D12_SHADER_VISIBILITY_GEOMETRY
@ D3D12_SHADER_VISIBILITY_VERTEX
@ D3D12_SHADER_VISIBILITY_HULL
@ D3D12_SHADER_VISIBILITY_PIXEL
D3D12_INDEX_BUFFER_STRIP_CUT_VALUE
@ D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED
@ D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF
@ D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFFFFFF
@ D3D12_BLEND_INV_SRC_COLOR
@ D3D12_BLEND_INV_SRC1_ALPHA
@ D3D12_BLEND_INV_BLEND_FACTOR
@ D3D12_BLEND_BLEND_FACTOR
@ D3D12_BLEND_INV_DEST_COLOR
@ D3D12_BLEND_INV_SRC1_COLOR
@ D3D12_BLEND_INV_DEST_ALPHA
@ D3D12_BLEND_INV_SRC_ALPHA
@ D3D12_BLEND_SRC_ALPHA_SAT
const UINT D3D12_APPEND_ALIGNED_ELEMENT
D3D12_PIPELINE_STATE_FLAGS
@ D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST
@ D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP
@ D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_UNDEFINED
@ D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_LINESTRIP
@ D3D_PRIMITIVE_TOPOLOGY_LINELIST
@ D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_POINTLIST
@ D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST
@ D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST
static HRESULT hresult_from_vkd3d_result(int vkd3d_result)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP void __cdecl qsort(void *, size_t, size_t, int(__cdecl *)(const void *, const void *))
static HRESULT hresult_from_vk_result(VkResult vr)
static void blend(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
Character const *const size_t const max_count
static const FxOffsetAndName offsets[]
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLclampf GLclampf GLclampf alpha
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLboolean GLboolean GLboolean b
GLenum GLenum GLenum GLenum mapping
GLboolean GLboolean GLboolean GLboolean a
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean 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
#define memcpy(s1, s2, n)
struct task_struct * current
D3D11_SHADER_VARIABLE_DESC desc
static void stream_info(IStream *stream, HGLOBAL *hmem, int *size, int *pos)
static RPC_BINDING_HANDLE binding
#define IsEqualGUID(rguid1, rguid2)
static unsigned __int64 next
#define offsetof(TYPE, MEMBER)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
VkSampleCountFlagBits vk_samples_from_dxgi_sample_desc(const DXGI_SAMPLE_DESC *desc)
HRESULT vkd3d_create_static_sampler(struct d3d12_device *device, const D3D12_STATIC_SAMPLER_DESC *desc, VkSampler *vk_sampler)
void vkd3d_render_pass_cache_init(struct vkd3d_render_pass_cache *cache)
static bool vkd3d_validate_descriptor_set_count(struct d3d12_device *device, unsigned int set_count)
static void descriptor_set_context_cleanup(struct vkd3d_descriptor_set_context *context)
struct d3d12_root_signature * unsafe_impl_from_ID3D12RootSignature(ID3D12RootSignature *iface)
static void pipeline_state_desc_from_d3d12_compute_desc(struct d3d12_pipeline_state_desc *desc, const D3D12_COMPUTE_PIPELINE_STATE_DESC *d3d12_desc)
static void ds_desc_from_d3d12(struct VkPipelineDepthStencilStateCreateInfo *vk_desc, const D3D12_DEPTH_STENCIL_DESC1 *d3d12_desc)
static void d3d12_root_signature_append_vk_binding_array(struct d3d12_root_signature *root_signature, VkDescriptorSetLayoutCreateFlags flags, struct vkd3d_descriptor_set_context *context)
static unsigned int vkd3d_get_rt_format_swizzle(const struct vkd3d_format *format)
HRESULT d3d12_root_signature_create(struct d3d12_device *device, const void *bytecode, size_t bytecode_length, struct d3d12_root_signature **root_signature)
static HRESULT d3d12_root_signature_init_push_constants(struct d3d12_root_signature *root_signature, const D3D12_ROOT_SIGNATURE_DESC *desc, struct VkPushConstantRange push_constants[D3D12_SHADER_VISIBILITY_PIXEL+1], uint32_t *push_constant_range_count)
static ULONG STDMETHODCALLTYPE d3d12_root_signature_AddRef(ID3D12RootSignature *iface)
static void d3d12_pipeline_uav_counter_state_cleanup(struct d3d12_pipeline_uav_counter_state *uav_counters, struct d3d12_device *device)
static HRESULT d3d12_root_signature_info_from_desc(struct d3d12_root_signature_info *info, const D3D12_ROOT_SIGNATURE_DESC *desc, bool use_array)
static HRESULT STDMETHODCALLTYPE d3d12_root_signature_QueryInterface(ID3D12RootSignature *iface, REFIID riid, void **object)
HRESULT vkd3d_render_pass_cache_find(struct vkd3d_render_pass_cache *cache, struct d3d12_device *device, const struct vkd3d_render_pass_key *key, VkRenderPass *vk_render_pass)
static void d3d12_root_signature_map_descriptor_unbounded_binding(struct d3d12_root_signature *root_signature, const struct d3d12_root_descriptor_table_range *range, unsigned int descriptor_offset, enum vkd3d_shader_visibility shader_visibility, struct vkd3d_descriptor_set_context *context)
static HRESULT d3d12_pipeline_state_find_and_init_uav_counters(struct d3d12_pipeline_state *state, struct d3d12_device *device, const struct d3d12_root_signature *root_signature, const D3D12_SHADER_BYTECODE *code, VkShaderStageFlags stage_flags)
static struct d3d12_root_signature * impl_from_ID3D12RootSignature(ID3D12RootSignature *iface)
static void d3d12_root_signature_cleanup(struct d3d12_root_signature *root_signature, struct d3d12_device *device)
static HRESULT d3d12_graphics_pipeline_state_create_render_pass(struct d3d12_graphics_pipeline_state *graphics, struct d3d12_device *device, VkFormat dynamic_dsv_format, VkRenderPass *vk_render_pass)
static ULONG STDMETHODCALLTYPE d3d12_root_signature_Release(ID3D12RootSignature *iface)
static HRESULT pipeline_state_desc_from_d3d12_stream_desc(struct d3d12_pipeline_state_desc *desc, const D3D12_PIPELINE_STATE_STREAM_DESC *d3d12_desc, VkPipelineBindPoint *vk_bind_point)
static enum VkPrimitiveTopology vk_topology_from_d3d12_topology(D3D12_PRIMITIVE_TOPOLOGY topology)
static HRESULT d3d12_root_signature_info_count_descriptors(struct d3d12_root_signature_info *info, const D3D12_ROOT_PARAMETER *param, bool use_array)
static HRESULT vkd3d_create_pipeline_layout(struct d3d12_device *device, unsigned int set_layout_count, const VkDescriptorSetLayout *set_layouts, unsigned int push_constant_count, const VkPushConstantRange *push_constants, VkPipelineLayout *pipeline_layout)
static bool is_dual_source_blending(const D3D12_RENDER_TARGET_BLEND_DESC *desc)
static HRESULT STDMETHODCALLTYPE d3d12_pipeline_state_GetDevice(ID3D12PipelineState *iface, REFIID iid, void **device)
static HRESULT d3d12_root_signature_create_descriptor_set_layouts(struct d3d12_root_signature *root_signature, struct vkd3d_descriptor_set_context *context)
static HRESULT d3d12_root_signature_append_vk_binding(struct d3d12_root_signature *root_signature, enum vkd3d_shader_descriptor_type descriptor_type, unsigned int register_space, unsigned int register_idx, bool buffer_descriptor, enum vkd3d_shader_visibility shader_visibility, unsigned int descriptor_count, struct vkd3d_descriptor_set_context *context, const VkSampler *immutable_sampler, unsigned int *binding_idx)
static unsigned int d3d12_root_signature_copy_descriptor_set_layouts(const struct d3d12_root_signature *root_signature, VkDescriptorSetLayout *vk_set_layouts)
static VkShaderStageFlags stage_flags_from_visibility(D3D12_SHADER_VISIBILITY visibility)
#define SHADER_CODE(name)
static void d3d12_root_signature_map_vk_heap_binding(struct d3d12_root_signature *root_signature, const struct d3d12_root_descriptor_table_range *range, bool buffer_descriptor, enum vkd3d_shader_visibility shader_visibility, struct vkd3d_descriptor_set_context *context)
static enum VkCullModeFlagBits vk_cull_mode_from_d3d12(D3D12_CULL_MODE mode)
static bool vk_topology_can_restart(VkPrimitiveTopology topology)
static struct vk_binding_array * d3d12_root_signature_current_vk_binding_array(struct d3d12_root_signature *root_signature, struct vkd3d_descriptor_set_context *context)
static int vkd3d_scan_dxbc(const struct d3d12_device *device, const D3D12_SHADER_BYTECODE *code, struct vkd3d_shader_scan_descriptor_info *descriptor_info)
static HRESULT d3d12_pipeline_state_init_compute(struct d3d12_pipeline_state *state, struct d3d12_device *device, const struct d3d12_pipeline_state_desc *desc)
static HRESULT STDMETHODCALLTYPE d3d12_root_signature_GetDevice(ID3D12RootSignature *iface, REFIID iid, void **device)
static enum VkBlendFactor vk_blend_factor_from_d3d12(D3D12_BLEND blend, bool alpha)
HRESULT d3d12_pipeline_state_create_graphics(struct d3d12_device *device, const D3D12_GRAPHICS_PIPELINE_STATE_DESC *desc, struct d3d12_pipeline_state **state)
static VkShaderStageFlags stage_flags_from_vkd3d_shader_visibility(enum vkd3d_shader_visibility visibility)
static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *state, struct d3d12_device *device, const struct d3d12_pipeline_state_desc *desc)
static void d3d12_init_pipeline_state_desc(struct d3d12_pipeline_state_desc *desc)
static enum vkd3d_shader_visibility vkd3d_shader_visibility_from_d3d12(D3D12_SHADER_VISIBILITY visibility)
static void d3d12_root_signature_map_vk_heap_uav_counter(struct d3d12_root_signature *root_signature, const struct d3d12_root_descriptor_table_range *range, enum vkd3d_shader_visibility shader_visibility, struct vkd3d_descriptor_set_context *context)
static bool d3d12_pipeline_state_put_pipeline_to_cache(struct d3d12_pipeline_state *state, const struct vkd3d_pipeline_key *key, VkPipeline vk_pipeline, VkRenderPass vk_render_pass)
static const struct ID3D12RootSignatureVtbl d3d12_root_signature_vtbl
static const struct ID3D12PipelineStateVtbl d3d12_pipeline_state_vtbl
static enum VkBlendOp vk_blend_op_from_d3d12(D3D12_BLEND_OP op)
static HRESULT STDMETHODCALLTYPE d3d12_root_signature_GetPrivateData(ID3D12RootSignature *iface, REFGUID guid, UINT *data_size, void *data)
static void blend_attachment_from_d3d12(struct VkPipelineColorBlendAttachmentState *vk_desc, const D3D12_RENDER_TARGET_BLEND_DESC *d3d12_desc)
static int d3d12_root_signature_info_range_compare(const void *a, const void *b)
static unsigned int feature_flags_compile_option(const struct d3d12_device *device)
static HRESULT STDMETHODCALLTYPE d3d12_root_signature_SetPrivateDataInterface(ID3D12RootSignature *iface, REFGUID guid, const IUnknown *data)
static bool is_dual_source_blending_blend(D3D12_BLEND b)
static HRESULT STDMETHODCALLTYPE d3d12_pipeline_state_GetPrivateData(ID3D12PipelineState *iface, REFGUID guid, UINT *data_size, void *data)
static enum VkStencilOp vk_stencil_op_from_d3d12(D3D12_STENCIL_OP op)
HRESULT vkd3d_uav_clear_state_init(struct vkd3d_uav_clear_state *state, struct d3d12_device *device)
enum VkCompareOp vk_compare_op_from_d3d12(D3D12_COMPARISON_FUNC op)
static uint32_t vkd3d_descriptor_magic_from_d3d12(D3D12_DESCRIPTOR_RANGE_TYPE type)
VkPipeline d3d12_pipeline_state_get_or_create_pipeline(struct d3d12_pipeline_state *state, D3D12_PRIMITIVE_TOPOLOGY topology, const uint32_t *strides, VkFormat dsv_format, VkRenderPass *vk_render_pass)
static void rs_desc_from_d3d12(VkPipelineRasterizationStateCreateInfo *vk_desc, const D3D12_RASTERIZER_DESC *d3d12_desc)
static HRESULT d3d12_root_signature_init_static_samplers(struct d3d12_root_signature *root_signature, struct d3d12_device *device, const D3D12_ROOT_SIGNATURE_DESC *desc, struct vkd3d_descriptor_set_context *context)
static HRESULT d3d12_root_signature_info_add_range(struct d3d12_root_signature_info *info, enum vkd3d_shader_descriptor_type type, D3D12_SHADER_VISIBILITY visibility, unsigned int space, unsigned int base_idx, unsigned int count)
static HRESULT d3d12_root_signature_init_root_descriptor_tables(struct d3d12_root_signature *root_signature, const D3D12_ROOT_SIGNATURE_DESC *desc, const struct d3d12_root_signature_info *info, struct vkd3d_descriptor_set_context *context)
static enum VkPolygonMode vk_polygon_mode_from_d3d12(D3D12_FILL_MODE mode)
static HRESULT d3d12_pipeline_state_init_uav_counters(struct d3d12_pipeline_state *state, struct d3d12_device *device, const struct d3d12_root_signature *root_signature, const struct vkd3d_shader_scan_descriptor_info *shader_info, VkShaderStageFlags stage_flags)
static int compare_descriptor_range(const void *a, const void *b)
static unsigned int typed_uav_compile_option(const struct d3d12_device *device)
static HRESULT STDMETHODCALLTYPE d3d12_pipeline_state_SetPrivateData(ID3D12PipelineState *iface, REFGUID guid, UINT data_size, const void *data)
static void d3d12_pipeline_state_destroy_graphics(struct d3d12_pipeline_state *state, struct d3d12_device *device)
static ULONG STDMETHODCALLTYPE d3d12_pipeline_state_Release(ID3D12PipelineState *iface)
static VkPipeline d3d12_pipeline_state_find_compiled_pipeline(const struct d3d12_pipeline_state *state, const struct vkd3d_pipeline_key *key, VkRenderPass *vk_render_pass)
static VkDescriptorType vk_descriptor_type_from_vkd3d_descriptor_type(enum vkd3d_shader_descriptor_type type, bool is_buffer)
#define DCL_SUBOBJECT_INFO(type, field)
static HRESULT d3d12_root_signature_init_descriptor_table_binding(struct d3d12_root_signature *root_signature, const struct d3d12_root_descriptor_table_range *range, D3D12_SHADER_VISIBILITY visibility, unsigned int vk_binding_array_count, unsigned int bindings_per_range, struct vkd3d_descriptor_set_context *context)
static HRESULT vkd3d_render_pass_cache_create_pass_locked(struct vkd3d_render_pass_cache *cache, struct d3d12_device *device, const struct vkd3d_render_pass_key *key, VkRenderPass *vk_render_pass)
static enum vkd3d_shader_descriptor_type vkd3d_descriptor_type_from_d3d12_root_parameter_type(D3D12_ROOT_PARAMETER_TYPE type)
static HRESULT vkd3d_create_descriptor_set_layout(struct d3d12_device *device, VkDescriptorSetLayoutCreateFlags flags, unsigned int binding_count, bool unbounded, const VkDescriptorSetLayoutBinding *bindings, VkDescriptorSetLayout *set_layout)
static void vkd3d_uav_clear_pipelines_cleanup(struct vkd3d_uav_clear_pipelines *pipelines, struct d3d12_device *device)
static void vkd3d_descriptor_heap_binding_from_descriptor_range(const struct d3d12_root_descriptor_table_range *range, bool is_buffer, const struct d3d12_root_signature *root_signature, struct vkd3d_shader_descriptor_binding *binding)
void vkd3d_uav_clear_state_cleanup(struct vkd3d_uav_clear_state *state, struct d3d12_device *device)
static HRESULT STDMETHODCALLTYPE d3d12_root_signature_SetName(ID3D12RootSignature *iface, const WCHAR *name)
static HRESULT STDMETHODCALLTYPE d3d12_pipeline_state_SetName(ID3D12PipelineState *iface, const WCHAR *name)
static enum vkd3d_shader_descriptor_type vkd3d_descriptor_type_from_d3d12_range_type(D3D12_DESCRIPTOR_RANGE_TYPE type)
struct d3d12_pipeline_state * unsafe_impl_from_ID3D12PipelineState(ID3D12PipelineState *iface)
static HRESULT d3d12_root_signature_init_root_descriptors(struct d3d12_root_signature *root_signature, const D3D12_ROOT_SIGNATURE_DESC *desc, struct vkd3d_descriptor_set_context *context)
static void d3d12_descriptor_set_layout_cleanup(struct d3d12_descriptor_set_layout *layout, struct d3d12_device *device)
static HRESULT STDMETHODCALLTYPE d3d12_pipeline_state_QueryInterface(ID3D12PipelineState *iface, REFIID riid, void **object)
static bool vk_binding_uses_partial_binding(const VkDescriptorSetLayoutBinding *binding)
static HRESULT vkd3d_create_compute_pipeline(struct d3d12_device *device, const D3D12_SHADER_BYTECODE *code, const struct vkd3d_shader_interface_info *shader_interface, VkPipelineLayout vk_pipeline_layout, VkPipeline *vk_pipeline)
static HRESULT STDMETHODCALLTYPE d3d12_pipeline_state_SetPrivateDataInterface(ID3D12PipelineState *iface, REFGUID guid, const IUnknown *data)
static VkLogicOp vk_logic_op_from_d3d12(D3D12_LOGIC_OP op)
static void d3d12_root_signature_map_descriptor_heap_binding(struct d3d12_root_signature *root_signature, const struct d3d12_root_descriptor_table_range *range, enum vkd3d_shader_visibility shader_visibility, struct vkd3d_descriptor_set_context *context)
static HRESULT compute_input_layout_offsets(const struct d3d12_device *device, const D3D12_INPUT_LAYOUT_DESC *input_layout_desc, uint32_t *offsets)
static void rs_stream_info_from_d3d12(VkPipelineRasterizationStateStreamCreateInfoEXT *stream_info, VkPipelineRasterizationStateCreateInfo *vk_rs_desc, const D3D12_STREAM_OUTPUT_DESC *so_desc, const struct vkd3d_vulkan_info *vk_info)
static HRESULT create_shader_stage(struct d3d12_device *device, struct VkPipelineShaderStageCreateInfo *stage_desc, enum VkShaderStageFlagBits stage, const D3D12_SHADER_BYTECODE *code, const struct vkd3d_shader_interface_info *shader_interface)
static void vk_stencil_op_state_from_d3d12(struct VkStencilOpState *vk_desc, const D3D12_DEPTH_STENCILOP_DESC *d3d12_desc, uint32_t compare_mask, uint32_t write_mask)
static HRESULT STDMETHODCALLTYPE d3d12_pipeline_state_GetCachedBlob(ID3D12PipelineState *iface, ID3DBlob **blob)
static struct d3d12_pipeline_state * impl_from_ID3D12PipelineState(ID3D12PipelineState *iface)
static unsigned int vk_heap_binding_count_from_descriptor_range(const struct d3d12_root_descriptor_table_range *range, unsigned int descriptor_set_size)
static void d3d12_root_signature_map_vk_unbounded_binding(struct d3d12_root_signature *root_signature, const struct d3d12_root_descriptor_table_range *range, unsigned int descriptor_offset, bool buffer_descriptor, enum vkd3d_shader_visibility shader_visibility, struct vkd3d_descriptor_set_context *context)
HRESULT d3d12_pipeline_state_create_compute(struct d3d12_device *device, const D3D12_COMPUTE_PIPELINE_STATE_DESC *desc, struct d3d12_pipeline_state **state)
static unsigned int vk_binding_count_from_descriptor_range(const struct d3d12_root_descriptor_table_range *range, const struct d3d12_root_signature_info *info, const struct vkd3d_device_descriptor_limits *limits)
void vkd3d_render_pass_cache_cleanup(struct vkd3d_render_pass_cache *cache, struct d3d12_device *device)
static HRESULT d3d12_root_signature_info_range_validate(const struct d3d12_root_signature_info_range *ranges, unsigned int count, D3D12_SHADER_VISIBILITY visibility)
HRESULT d3d12_pipeline_state_create(struct d3d12_device *device, const D3D12_PIPELINE_STATE_STREAM_DESC *desc, struct d3d12_pipeline_state **state)
static int compile_hlsl_cs(const struct vkd3d_shader_code *hlsl, struct vkd3d_shader_code *dxbc)
static void pipeline_state_desc_from_d3d12_graphics_desc(struct d3d12_pipeline_state_desc *desc, const D3D12_GRAPHICS_PIPELINE_STATE_DESC *d3d12_desc)
static HRESULT STDMETHODCALLTYPE d3d12_root_signature_SetPrivateData(ID3D12RootSignature *iface, REFGUID guid, UINT data_size, const void *data)
static HRESULT d3d12_root_signature_init(struct d3d12_root_signature *root_signature, struct d3d12_device *device, const D3D12_ROOT_SIGNATURE_DESC *desc)
static void vk_binding_array_cleanup(struct vk_binding_array *array)
static bool vk_binding_array_add_binding(struct vk_binding_array *array, VkDescriptorType descriptor_type, unsigned int descriptor_count, VkShaderStageFlags stage_flags, const VkSampler *immutable_sampler, unsigned int *binding_idx)
static void d3d12_root_signature_init_descriptor_table_push_constants(struct d3d12_root_signature *root_signature, const struct vkd3d_descriptor_set_context *context)
static ULONG STDMETHODCALLTYPE d3d12_pipeline_state_AddRef(ID3D12PipelineState *iface)
static void rs_depth_clip_info_from_d3d12(VkPipelineRasterizationDepthClipStateCreateInfoEXT *depth_clip_info, VkPipelineRasterizationStateCreateInfo *vk_rs_desc, const D3D12_RASTERIZER_DESC *d3d12_desc)
HRESULT vkd3d_set_private_data(struct vkd3d_private_store *store, const GUID *tag, unsigned int data_size, const void *data)
HRESULT vkd3d_set_private_data_interface(struct vkd3d_private_store *store, const GUID *tag, const IUnknown *object)
const struct vkd3d_format * vkd3d_get_format(const struct d3d12_device *device, DXGI_FORMAT dxgi_format, bool depth_stencil)
HRESULT vkd3d_set_vk_object_name(struct d3d12_device *device, uint64_t vk_object, VkDebugReportObjectTypeEXT vk_object_type, const WCHAR *name)
HRESULT vkd3d_get_private_data(struct vkd3d_private_store *store, const GUID *tag, unsigned int *out_size, void *out)
D3D12_RENDER_TARGET_BLEND_DESC RenderTarget[D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT]
D3D12_STENCIL_OP StencilFailOp
D3D12_COMPARISON_FUNC StencilFunc
D3D12_STENCIL_OP StencilDepthFailOp
D3D12_STENCIL_OP StencilPassOp
D3D12_DEPTH_STENCILOP_DESC FrontFace
D3D12_DEPTH_WRITE_MASK DepthWriteMask
D3D12_DEPTH_STENCILOP_DESC BackFace
D3D12_COMPARISON_FUNC DepthFunc
UINT OffsetInDescriptorsFromTableStart
D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster
UINT8 RenderTargetWriteMask
const D3D12_SO_DECLARATION_ENTRY * pSODeclaration
const UINT * pBufferStrides
VkAttachmentLoadOp loadOp
VkAttachmentStoreOp stencilStoreOp
VkSampleCountFlagBits samples
VkAttachmentDescriptionFlags flags
VkAttachmentStoreOp storeOp
VkImageLayout initialLayout
VkImageLayout finalLayout
VkAttachmentLoadOp stencilLoadOp
int32_t basePipelineIndex
VkPipelineCreateFlags flags
const VkDescriptorBindingFlags * pBindingFlags
VkDescriptorType descriptorType
const VkSampler * pImmutableSamplers
VkShaderStageFlags stageFlags
const VkDescriptorSetLayoutBinding * pBindings
VkDescriptorSetLayoutCreateFlags flags
const VkPipelineTessellationStateCreateInfo * pTessellationState
const VkPipelineDepthStencilStateCreateInfo * pDepthStencilState
int32_t basePipelineIndex
const VkPipelineDynamicStateCreateInfo * pDynamicState
const VkPipelineColorBlendStateCreateInfo * pColorBlendState
VkPipelineCreateFlags flags
const VkPipelineInputAssemblyStateCreateInfo * pInputAssemblyState
const VkPipelineMultisampleStateCreateInfo * pMultisampleState
const VkPipelineVertexInputStateCreateInfo * pVertexInputState
const VkPipelineShaderStageCreateInfo * pStages
const VkPipelineRasterizationStateCreateInfo * pRasterizationState
const VkPipelineViewportStateCreateInfo * pViewportState
VkBlendFactor dstColorBlendFactor
VkBlendFactor dstAlphaBlendFactor
VkBlendFactor srcAlphaBlendFactor
VkBlendFactor srcColorBlendFactor
VkColorComponentFlags colorWriteMask
VkPipelineColorBlendStateCreateFlags flags
const VkPipelineColorBlendAttachmentState * pAttachments
VkPipelineDepthStencilStateCreateFlags flags
VkCompareOp depthCompareOp
VkBool32 depthWriteEnable
VkBool32 stencilTestEnable
VkBool32 depthBoundsTestEnable
VkPipelineLayoutCreateFlags flags
uint32_t pushConstantRangeCount
const VkPushConstantRange * pPushConstantRanges
const VkDescriptorSetLayout * pSetLayouts
VkPipelineMultisampleStateCreateFlags flags
VkBool32 sampleShadingEnable
VkSampleCountFlagBits rasterizationSamples
VkBool32 alphaToOneEnable
const VkSampleMask * pSampleMask
VkBool32 alphaToCoverageEnable
VkPipelineRasterizationDepthClipStateCreateFlagsEXT flags
VkBool32 rasterizerDiscardEnable
float depthBiasConstantFactor
VkBool32 depthClampEnable
VkPolygonMode polygonMode
float depthBiasSlopeFactor
VkPipelineRasterizationStateCreateFlags flags
VkPipelineShaderStageCreateFlags flags
const VkSpecializationInfo * pSpecializationInfo
VkShaderStageFlagBits stage
uint32_t patchControlPoints
VkPipelineTessellationStateCreateFlags flags
VkShaderStageFlags stageFlags
const VkSubpassDescription * pSubpasses
const VkSubpassDependency * pDependencies
const VkAttachmentDescription * pAttachments
VkRenderPassCreateFlags flags
VkShaderModuleCreateFlags flags
const VkAttachmentReference * pDepthStencilAttachment
VkSubpassDescriptionFlags flags
uint32_t inputAttachmentCount
const VkAttachmentReference * pResolveAttachments
const uint32_t * pPreserveAttachments
const VkAttachmentReference * pInputAttachments
uint32_t colorAttachmentCount
const VkAttachmentReference * pColorAttachments
VkPipelineBindPoint pipelineBindPoint
uint32_t preserveAttachmentCount
unsigned int unbounded_offset
VkDescriptorSetLayout vk_layout
VkFormat rtv_formats[D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT]
VkPipelineDepthStencilStateCreateInfo ds_desc
D3D12_INDEX_BUFFER_STRIP_CUT_VALUE index_buffer_strip_cut_value
unsigned int null_attachment_mask
VkPipelineMultisampleStateCreateInfo ms_desc
VkVertexInputAttributeDescription attributes[D3D12_VS_INPUT_REGISTER_COUNT]
VkPipelineRasterizationStateCreateInfo rs_desc
const struct d3d12_root_signature * root_signature
VkSampleMask sample_mask[2]
VkPipelineShaderStageCreateInfo stages[VKD3D_MAX_SHADER_STAGES]
VkVertexInputBindingDivisorDescriptionEXT instance_divisors[D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT]
struct list compiled_pipelines
size_t instance_divisor_count
VkPipelineRasterizationDepthClipStateCreateInfoEXT rs_depth_clip_info
VkVertexInputRate input_rates[D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT]
VkPipelineColorBlendAttachmentState blend_attachments[D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT]
VkPipelineRasterizationStateStreamCreateInfoEXT rs_stream_info
ID3D12PipelineState ID3D12PipelineState_iface
struct vkd3d_shader_uav_counter_binding * bindings
VkDescriptorSetLayout vk_set_layout
VkPipelineLayout vk_pipeline_layout
VkShaderStageFlags stage_flags
unsigned int descriptor_count
unsigned int vk_binding_count
enum vkd3d_shader_descriptor_type type
D3D12_SHADER_VISIBILITY visibility
enum vkd3d_shader_descriptor_type type
unsigned int sampler_unbounded_range_count
unsigned int srv_unbounded_range_count
unsigned int cbv_unbounded_range_count
size_t root_descriptor_count
size_t root_constant_count
unsigned int sampler_count
struct d3d12_root_signature_info::d3d12_root_signature_info_range * ranges
unsigned int uav_unbounded_range_count
VkPushConstantRange push_constant_ranges[D3D12_SHADER_VISIBILITY_PIXEL+1]
unsigned int static_sampler_count
unsigned int root_constant_count
uint64_t descriptor_table_mask
uint32_t push_descriptor_mask
unsigned int root_descriptor_count
unsigned int push_constant_range_count
struct d3d12_descriptor_set_layout descriptor_set_layouts[VKD3D_MAX_DESCRIPTOR_SETS]
ID3D12RootSignature ID3D12RootSignature_iface
unsigned int descriptor_table_offset
unsigned int uav_mapping_count
unsigned int binding_count
unsigned int parameter_count
struct vkd3d_shader_push_constant_buffer * root_constants
struct d3d12_root_parameter * parameters
struct vkd3d_shader_descriptor_offset * descriptor_offsets
bool use_descriptor_arrays
struct vkd3d_shader_descriptor_offset * uav_counter_offsets
VkSampler * static_samplers
unsigned int descriptor_table_count
struct vkd3d_private_store private_store
struct vkd3d_shader_uav_counter_binding * uav_counter_mapping
D3D12_ROOT_SIGNATURE_FLAGS flags
struct vkd3d_shader_resource_binding * descriptor_mapping
struct d3d12_device * device
VkPipelineLayout vk_pipeline_layout
unsigned int register_index
VkDescriptorSetLayoutCreateFlags flags
VkDescriptorSetLayoutBinding * bindings
unsigned int unbounded_offset
struct vkd3d_pipeline_key key
VkRenderPass vk_render_pass
unsigned int uav_counter_index
unsigned int descriptor_index
unsigned int unbounded_offset
struct vk_binding_array vk_bindings[VKD3D_MAX_DESCRIPTOR_SETS]
unsigned int push_constant_index
unsigned int storage_image_max_descriptors
unsigned int uniform_buffer_max_descriptors
unsigned int sampled_image_max_descriptors
unsigned int sampler_max_descriptors
D3D12_PRIMITIVE_TOPOLOGY topology
uint32_t strides[D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT]
struct vkd3d_render_pass_key key
VkRenderPass vk_render_pass
const struct vkd3d_shader_compile_option * options
struct vkd3d_shader_code source
enum vkd3d_shader_log_level log_level
enum vkd3d_shader_structure_type type
unsigned int option_count
enum vkd3d_shader_source_type source_type
enum vkd3d_shader_target_type target_type
const struct vkd3d_shader_descriptor_offset * uav_counter_offsets
enum vkd3d_shader_structure_type type
unsigned int descriptor_table_offset
unsigned int descriptor_table_count
const struct vkd3d_shader_descriptor_offset * binding_offsets
enum vkd3d_shader_structure_type type
struct vkd3d_shader_code secondary_code
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
enum vkd3d_shader_structure_type type
unsigned int uav_counter_count
struct vkd3d_shader_parameter_immediate_constant immediate_constant
enum vkd3d_shader_parameter_type type
enum vkd3d_shader_parameter_name name
union vkd3d_shader_parameter::@5985 u
enum vkd3d_shader_parameter_data_type data_type
unsigned int register_index
unsigned int register_space
enum vkd3d_shader_visibility shader_visibility
enum vkd3d_shader_structure_type type
unsigned int descriptor_count
struct vkd3d_shader_descriptor_info * descriptors
const struct vkd3d_shader_parameter * parameters
const unsigned int * output_swizzles
unsigned int output_swizzle_count
unsigned int parameter_count
bool dual_source_blending
unsigned int extension_count
enum vkd3d_shader_spirv_environment environment
enum vkd3d_shader_structure_type type
enum vkd3d_shader_spirv_extension * extensions
bool vertex_attrib_zero_divisor
bool EXT_transform_feedback
unsigned int shader_extension_count
bool rasterization_stream
enum vkd3d_shader_spirv_extension shader_extensions[VKD3D_MAX_SHADER_EXTENSIONS]
unsigned int max_vertex_attrib_divisor
bool EXT_depth_clip_enable
#define CONTAINING_RECORD(address, type, field)
static const char * debugstr_hresult(HRESULT hr)
static unsigned int vkd3d_popcount(unsigned int v)
static bool vkd3d_bound_range(size_t start, size_t count, size_t limit)
static void vkd3d_mutex_unlock(struct vkd3d_mutex *lock)
static void vkd3d_mutex_lock(struct vkd3d_mutex *lock)
static uint32_t vkd3d_atomic_decrement_u32(uint32_t volatile *x)
#define vkd3d_unreachable()
#define VKD3D_ASSERT(cond)
static uint32_t vkd3d_atomic_increment_u32(uint32_t volatile *x)
#define DIV_ROUND_UP(a, b)
static int vkd3d_u32_compare(uint32_t x, uint32_t y)
int vkd3d_parse_root_signature_v_1_0(const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_versioned_root_signature_desc *out_desc)
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)
#define VKD3D_DESCRIPTOR_MAGIC_SRV
#define VKD3D_MAX_DESCRIPTOR_SETS
vkd3d_vk_descriptor_set_index
@ VKD3D_SET_INDEX_MUTABLE
@ VKD3D_SET_INDEX_STORAGE_IMAGE
@ VKD3D_SET_INDEX_UNIFORM_TEXEL_BUFFER
@ VKD3D_SET_INDEX_SAMPLED_IMAGE
@ VKD3D_SET_INDEX_UNIFORM_BUFFER
@ VKD3D_SET_INDEX_STORAGE_TEXEL_BUFFER
@ VKD3D_SET_INDEX_SAMPLER
@ VKD3D_SET_INDEX_UAV_COUNTER
static void vk_prepend_struct(void *header, void *structure)
#define VKD3D_DESCRIPTOR_MAGIC_FREE
static void vkd3d_private_store_destroy(struct vkd3d_private_store *store)
static ULONG d3d12_device_release(struct d3d12_device *device)
#define VKD3D_MAX_VIRTUAL_HEAP_DESCRIPTORS_PER_TYPE
#define VKD3D_DESCRIPTOR_MAGIC_CBV
static ULONG d3d12_device_add_ref(struct d3d12_device *device)
static HRESULT d3d12_device_query_interface(struct d3d12_device *device, REFIID iid, void **object)
static bool d3d12_pipeline_state_is_graphics(const struct d3d12_pipeline_state *state)
static HRESULT vkd3d_private_store_init(struct vkd3d_private_store *store)
static unsigned int dsv_attachment_mask(const struct d3d12_graphics_pipeline_state *graphics)
static bool d3d12_pipeline_state_is_compute(const struct d3d12_pipeline_state *state)
#define VKD3D_DESCRIPTOR_MAGIC_UAV
static void vkd3d_prepend_struct(void *header, void *structure)
#define VKD3D_DESCRIPTOR_MAGIC_SAMPLER
VKD3D_SHADER_API struct vkd3d_shader_signature_element * vkd3d_shader_find_signature_element(const struct vkd3d_shader_signature *signature, const char *semantic_name, unsigned int semantic_index, unsigned int stream_index)
@ 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_FEATURE
@ VKD3D_SHADER_PARAMETER_TYPE_IMMEDIATE_CONSTANT
VKD3D_SHADER_API void vkd3d_shader_free_shader_code(struct vkd3d_shader_code *code)
@ VKD3D_SHADER_PARAMETER_DATA_TYPE_UINT32
@ VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_COUNTER
VKD3D_SHADER_API int vkd3d_shader_parse_input_signature(const struct vkd3d_shader_code *dxbc, struct vkd3d_shader_signature *signature, char **messages)
@ VKD3D_SHADER_SOURCE_HLSL
VKD3D_SHADER_API void vkd3d_shader_free_shader_signature(struct vkd3d_shader_signature *signature)
VKD3D_SHADER_API int vkd3d_shader_scan(const struct vkd3d_shader_compile_info *compile_info, char **messages)
@ VKD3D_SHADER_STRUCTURE_TYPE_TRANSFORM_FEEDBACK_INFO
@ VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO
@ VKD3D_SHADER_STRUCTURE_TYPE_SCAN_DESCRIPTOR_INFO
@ VKD3D_SHADER_STRUCTURE_TYPE_DESCRIPTOR_OFFSET_INFO
@ VKD3D_SHADER_STRUCTURE_TYPE_INTERFACE_INFO
@ VKD3D_SHADER_STRUCTURE_TYPE_SPIRV_TARGET_INFO
@ VKD3D_SHADER_STRUCTURE_TYPE_HLSL_SOURCE_INFO
@ 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_API_VERSION_1_14
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_BINDING_FLAG_IMAGE
@ VKD3D_SHADER_BINDING_FLAG_BUFFER
@ VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV_READ_FORMAT_UNKNOWN
@ VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV_READ_FORMAT_R32
VKD3D_SHADER_API int vkd3d_shader_compile(const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, char **messages)
VKD3D_SHADER_API void vkd3d_shader_free_scan_descriptor_info(struct vkd3d_shader_scan_descriptor_info *scan_descriptor_info)
#define VKD3D_SHADER_SWIZZLE(x, y, z, w)
#define VKD3D_SHADER_NO_SWIZZLE
@ VKD3D_SHADER_TARGET_SPIRV_BINARY
@ VKD3D_SHADER_TARGET_DXBC_TPF
@ VKD3D_SHADER_COMPILE_OPTION_FEATURE_WAVE_OPS
@ VKD3D_SHADER_COMPILE_OPTION_FEATURE_INT64
@ VKD3D_SHADER_COMPILE_OPTION_FEATURE_FLOAT64
@ VKD3D_SHADER_PARAMETER_NAME_RASTERIZER_SAMPLE_COUNT
VKD3D_SHADER_API void vkd3d_shader_free_root_signature(struct vkd3d_shader_versioned_root_signature_desc *root_signature)
static enum vkd3d_result vkd3d_shader_parse_dxbc_source_type(const struct vkd3d_shader_code *dxbc, enum vkd3d_shader_source_type *type, char **messages)
static const char cs_uav_clear_3d_uint_code[]
static const char cs_uav_clear_1d_array_float_code[]
static const char cs_uav_clear_2d_array_uint_code[]
static const char cs_uav_clear_1d_array_uint_code[]
static const char cs_uav_clear_1d_float_code[]
static const char cs_uav_clear_buffer_float_code[]
static const char cs_uav_clear_2d_uint_code[]
static const char cs_uav_clear_3d_float_code[]
static const char cs_uav_clear_buffer_uint_code[]
static const char cs_uav_clear_1d_uint_code[]
static const char cs_uav_clear_2d_array_float_code[]
static const char cs_uav_clear_2d_float_code[]
@ VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
@ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
@ VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
void VKAPI_CALL vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks *pAllocator)
@ VK_SHADER_STAGE_VERTEX_BIT
@ VK_SHADER_STAGE_COMPUTE_BIT
@ VK_SHADER_STAGE_GEOMETRY_BIT
@ VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT
@ VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
@ VK_SHADER_STAGE_FRAGMENT_BIT
VkResult VKAPI_CALL vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDescriptorSetLayout *pSetLayout)
VkFlags VkDescriptorSetLayoutCreateFlags
@ VK_DYNAMIC_STATE_BLEND_CONSTANTS
@ VK_DYNAMIC_STATE_VIEWPORT
@ VK_DYNAMIC_STATE_DEPTH_BOUNDS
@ VK_DYNAMIC_STATE_STENCIL_REFERENCE
@ VK_DYNAMIC_STATE_SCISSOR
VkResult VKAPI_CALL vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo *pCreateInfos, const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines)
void VKAPI_CALL vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks *pAllocator)
void VKAPI_CALL vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks *pAllocator)
VkResult VKAPI_CALL vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkPipelineLayout *pPipelineLayout)
@ VK_PIPELINE_BIND_POINT_GRAPHICS
@ VK_PIPELINE_BIND_POINT_COMPUTE
@ VK_STENCIL_OP_INCREMENT_AND_CLAMP
@ VK_STENCIL_OP_DECREMENT_AND_CLAMP
@ VK_STENCIL_OP_INCREMENT_AND_WRAP
@ VK_STENCIL_OP_DECREMENT_AND_WRAP
@ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT
@ VK_IMAGE_ASPECT_STENCIL_BIT
@ VK_IMAGE_ASPECT_DEPTH_BIT
#define VK_ATTACHMENT_UNUSED
void VKAPI_CALL vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks *pAllocator)
@ VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT
@ VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT
@ VK_COMPARE_OP_LESS_OR_EQUAL
@ VK_COMPARE_OP_NOT_EQUAL
@ VK_COMPARE_OP_GREATER_OR_EQUAL
@ VK_LOGIC_OP_AND_REVERSE
@ VK_LOGIC_OP_COPY_INVERTED
@ VK_LOGIC_OP_OR_INVERTED
@ VK_LOGIC_OP_AND_INVERTED
@ VK_BLEND_OP_REVERSE_SUBTRACT
VkFlags VkShaderStageFlags
void VKAPI_CALL vkDestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks *pAllocator)
@ VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR
@ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST
@ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP
@ VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
@ VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY
@ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY
@ VK_PRIMITIVE_TOPOLOGY_POINT_LIST
@ VK_PRIMITIVE_TOPOLOGY_MAX_ENUM
@ VK_PRIMITIVE_TOPOLOGY_LINE_STRIP
@ VK_PRIMITIVE_TOPOLOGY_LINE_LIST
VkResult VKAPI_CALL vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkRenderPass *pRenderPass)
@ VK_FRONT_FACE_CLOCKWISE
@ VK_FRONT_FACE_COUNTER_CLOCKWISE
@ VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
@ VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
@ VK_DESCRIPTOR_TYPE_SAMPLER
@ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
@ VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
@ VK_DESCRIPTOR_TYPE_STORAGE_IMAGE
VkResult VKAPI_CALL vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo *pCreateInfos, const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines)
VkDescriptorBindingFlags VkDescriptorBindingFlagsEXT
@ VK_VERTEX_INPUT_RATE_VERTEX
@ VK_VERTEX_INPUT_RATE_INSTANCE
@ VK_COLOR_COMPONENT_R_BIT
@ VK_COLOR_COMPONENT_A_BIT
@ VK_COLOR_COMPONENT_B_BIT
@ VK_COLOR_COMPONENT_G_BIT
@ VK_BLEND_FACTOR_SRC1_ALPHA
@ VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA
@ VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR
@ VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR
@ VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR
@ VK_BLEND_FACTOR_SRC_COLOR
@ VK_BLEND_FACTOR_CONSTANT_COLOR
@ VK_BLEND_FACTOR_SRC_ALPHA
@ VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
@ VK_BLEND_FACTOR_CONSTANT_ALPHA
@ VK_BLEND_FACTOR_DST_ALPHA
@ VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
@ VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA
@ VK_BLEND_FACTOR_DST_COLOR
@ VK_BLEND_FACTOR_SRC_ALPHA_SATURATE
@ VK_BLEND_FACTOR_SRC1_COLOR
@ VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR
@ VK_ATTACHMENT_LOAD_OP_LOAD
@ VK_ATTACHMENT_LOAD_OP_DONT_CARE
@ VK_ATTACHMENT_STORE_OP_DONT_CARE
@ VK_ATTACHMENT_STORE_OP_STORE
void VKAPI_CALL vkDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks *pAllocator)
VkResult VKAPI_CALL vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkShaderModule *pShaderModule)
@ VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO
@ VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
@ VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
@ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT
@ VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO
@ VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO
@ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT
@ VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
@ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO
@ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT
@ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
@ VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
@ VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
@ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
@ VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
@ VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT
@ VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
@ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
@ VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
@ VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO
static size_t align(size_t addr, size_t alignment)