diff options
author | Hans-Kristian Arntzen <post@arntzen-software.no> | 2022-09-15 14:02:23 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2022-09-15 14:48:01 +0300 |
commit | 6c133a265d3b043cb408fc7a75acbc43b1006d89 (patch) | |
tree | 3677de7ed3b7c3d749b3d048a5c2a03d14c62ff5 | |
parent | a782d7be499efc52e944e3247b5174543cc4ad8d (diff) |
vkd3d: Enable promoted VK_EXT_mutable_descriptor_type.
Trivial alias, support both variants for now.
Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | libs/vkd3d/device.c | 5 | ||||
-rw-r--r-- | libs/vkd3d/resource.c | 8 | ||||
-rw-r--r-- | libs/vkd3d/state.c | 25 | ||||
-rw-r--r-- | libs/vkd3d/vkd3d_private.h | 3 | ||||
m--------- | subprojects/Vulkan-Headers | 0 |
6 files changed, 23 insertions, 20 deletions
@@ -37,7 +37,7 @@ These extensions will likely become mandatory later. - `VK_KHR_buffer_device_address` - `VK_EXT_image_view_min_lod` -`VK_VALVE_mutable_descriptor_type` is also highly recommended, but not mandatory. +`VK_EXT_mutable_descriptor_type` (or the vendor `VALVE` alias) is also highly recommended, but not mandatory. ### AMD (RADV) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index a890fdf2..d8569b4f 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -120,6 +120,7 @@ static const struct vkd3d_optional_extension_info optional_device_extensions[] = VK_EXTENSION(EXT_SCALAR_BLOCK_LAYOUT, EXT_scalar_block_layout), VK_EXTENSION(EXT_PIPELINE_CREATION_FEEDBACK, EXT_pipeline_creation_feedback), VK_EXTENSION(EXT_MESH_SHADER, EXT_mesh_shader), + VK_EXTENSION(EXT_MUTABLE_DESCRIPTOR_TYPE, EXT_mutable_descriptor_type), /* AMD extensions */ VK_EXTENSION(AMD_BUFFER_MARKER, AMD_buffer_marker), VK_EXTENSION(AMD_DEVICE_COHERENT_MEMORY, AMD_device_coherent_memory), @@ -1380,9 +1381,9 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i vk_prepend_struct(&info->properties2, &info->shader_sm_builtins_properties); } - if (vulkan_info->VALVE_mutable_descriptor_type) + if (vulkan_info->VALVE_mutable_descriptor_type || vulkan_info->EXT_mutable_descriptor_type) { - info->mutable_descriptor_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE; + info->mutable_descriptor_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT; vk_prepend_struct(&info->features2, &info->mutable_descriptor_features); } diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index 06e3c292..b7e86d9f 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -3907,7 +3907,7 @@ static void d3d12_descriptor_heap_write_null_descriptor_template(vkd3d_cpu_descr for (i = 0; i < num_writes; i++) { writes[i] = desc.heap->null_descriptor_template.writes[i]; - if (writes[i].descriptorType == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE) + if (writes[i].descriptorType == VK_DESCRIPTOR_TYPE_MUTABLE_EXT) writes[i].descriptorType = vk_mutable_descriptor_type; writes[i].dstArrayElement = offset; } @@ -5520,7 +5520,7 @@ static HRESULT d3d12_descriptor_heap_create_descriptor_pool(struct d3d12_descrip vk_pool_info.flags = VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT; if (!(descriptor_heap->desc.Flags & D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE) && (descriptor_heap->device->bindless_state.flags & VKD3D_BINDLESS_MUTABLE_TYPE)) - vk_pool_info.flags = VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE; + vk_pool_info.flags = VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT; vk_pool_info.maxSets = pool_count; vk_pool_info.poolSizeCount = pool_count; @@ -5550,7 +5550,7 @@ static void d3d12_descriptor_heap_zero_initialize(struct d3d12_descriptor_heap * /* Clear out descriptor heap with the largest possible descriptor type we know of when using mutable descriptor type. * Purely for defensive purposes. */ - if (vk_descriptor_type == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE) + if (vk_descriptor_type == VK_DESCRIPTOR_TYPE_MUTABLE_EXT) vk_descriptor_type = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE; write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; @@ -5890,7 +5890,7 @@ static void d3d12_descriptor_heap_add_null_descriptor_template( descriptor_heap->null_descriptor_template.image.imageView = VK_NULL_HANDLE; descriptor_heap->null_descriptor_template.buffer_view = VK_NULL_HANDLE; descriptor_heap->null_descriptor_template.has_mutable_descriptors = - descriptor_heap->device->vk_info.VALVE_mutable_descriptor_type; + descriptor_heap->device->device_info.mutable_descriptor_features.mutableDescriptorType; } descriptor_heap->null_descriptor_template.num_writes++; diff --git a/libs/vkd3d/state.c b/libs/vkd3d/state.c index 354268eb..222b4d7b 100644 --- a/libs/vkd3d/state.c +++ b/libs/vkd3d/state.c @@ -4730,7 +4730,7 @@ static pfn_vkd3d_host_mapping_copy_template_single vkd3d_bindless_find_copy_temp static HRESULT vkd3d_bindless_state_add_binding(struct vkd3d_bindless_state *bindless_state, struct d3d12_device *device, uint32_t flags, VkDescriptorType vk_descriptor_type) { - VkMutableDescriptorTypeListVALVE mutable_descriptor_list[VKD3D_BINDLESS_SET_MAX_EXTRA_BINDINGS + 1]; + VkMutableDescriptorTypeListEXT mutable_descriptor_list[VKD3D_BINDLESS_SET_MAX_EXTRA_BINDINGS + 1]; struct vkd3d_bindless_set_info *set_info = &bindless_state->set_info[bindless_state->set_count++]; VkDescriptorSetLayoutBinding vk_binding_info[VKD3D_BINDLESS_SET_MAX_EXTRA_BINDINGS + 1]; VkDescriptorBindingFlagsEXT vk_binding_flags[VKD3D_BINDLESS_SET_MAX_EXTRA_BINDINGS + 1]; @@ -4739,8 +4739,8 @@ static HRESULT vkd3d_bindless_state_add_binding(struct vkd3d_bindless_state *bin const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs; VkDescriptorSetLayoutHostMappingInfoVALVE mapping_info; VkDescriptorSetBindingReferenceVALVE binding_reference; - VkMutableDescriptorTypeCreateInfoVALVE mutable_info; VkDescriptorSetLayoutCreateInfo vk_set_layout_info; + VkMutableDescriptorTypeCreateInfoEXT mutable_info; VkDescriptorSetLayoutBinding *vk_binding; unsigned int i; VkResult vr; @@ -4792,11 +4792,11 @@ static HRESULT vkd3d_bindless_state_add_binding(struct vkd3d_bindless_state *bin vk_set_layout_info.bindingCount = set_info->binding_index + 1; vk_set_layout_info.pBindings = vk_binding_info; - if (vk_descriptor_type == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE) + if (vk_descriptor_type == VK_DESCRIPTOR_TYPE_MUTABLE_EXT) { vk_binding_flags_info.pNext = &mutable_info; - mutable_info.sType = VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE; + mutable_info.sType = VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT; mutable_info.pNext = NULL; mutable_info.pMutableDescriptorTypeLists = mutable_descriptor_list; mutable_info.mutableDescriptorTypeListCount = set_info->binding_index + 1; @@ -4852,7 +4852,7 @@ static HRESULT vkd3d_bindless_state_add_binding(struct vkd3d_bindless_state *bin /* If we have mutable descriptor extension, we will allocate these descriptors with * HOST_BIT and not UPDATE_AFTER_BIND, since that is enough to get threading guarantees. */ vk_binding_flags[set_info->binding_index] = VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT; - vk_set_layout_info.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE; + vk_set_layout_info.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT; } if ((vr = VK_CALL(vkCreateDescriptorSetLayout(device->vk_device, @@ -4867,7 +4867,7 @@ static bool vkd3d_bindless_supports_mutable_type(struct d3d12_device *device, ui VkDescriptorType descriptor_types[VKD3D_MAX_MUTABLE_DESCRIPTOR_TYPES]; const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs; VkDescriptorSetLayoutBindingFlagsCreateInfoEXT binding_flags; - VkMutableDescriptorTypeCreateInfoVALVE mutable_info; + VkMutableDescriptorTypeCreateInfoEXT mutable_info; VkDescriptorSetLayoutCreateInfo set_layout_info; VkMutableDescriptorTypeListVALVE mutable_list; VkDescriptorSetLayoutSupport supported; @@ -4882,7 +4882,7 @@ static bool vkd3d_bindless_supports_mutable_type(struct d3d12_device *device, ui if (!device->device_info.mutable_descriptor_features.mutableDescriptorType) return false; - mutable_info.sType = VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE; + mutable_info.sType = VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT; mutable_info.pNext = NULL; mutable_info.pMutableDescriptorTypeLists = &mutable_list; mutable_info.mutableDescriptorTypeListCount = 1; @@ -4891,7 +4891,7 @@ static bool vkd3d_bindless_supports_mutable_type(struct d3d12_device *device, ui mutable_list.pDescriptorTypes = descriptor_types; binding.binding = 0; - binding.descriptorType = VK_DESCRIPTOR_TYPE_MUTABLE_VALVE; + binding.descriptorType = VK_DESCRIPTOR_TYPE_MUTABLE_EXT; binding.descriptorCount = d3d12_max_descriptor_count_from_heap_type(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); binding.pImmutableSamplers = NULL; binding.stageFlags = VK_SHADER_STAGE_ALL; @@ -4913,7 +4913,7 @@ static bool vkd3d_bindless_supports_mutable_type(struct d3d12_device *device, ui if (!supported.supported) return false; - set_layout_info.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE; + set_layout_info.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT; binding_flag = VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT; VK_CALL(vkGetDescriptorSetLayoutSupport(device->vk_device, &set_layout_info, &supported)); return supported.supported == VK_TRUE; @@ -5008,12 +5008,13 @@ static uint32_t vkd3d_bindless_state_get_bindless_flags(struct d3d12_device *dev if (vkd3d_bindless_supports_mutable_type(device, flags)) { - INFO("Device supports VK_VALVE_mutable_descriptor_type.\n"); + INFO("Device supports VK_%s_mutable_descriptor_type.\n", + device->vk_info.EXT_mutable_descriptor_type ? "EXT" : "VALVE"); flags |= VKD3D_BINDLESS_MUTABLE_TYPE; } else { - INFO("Device does not support VK_VALVE_mutable_descriptor_type.\n"); + INFO("Device does not support VK_EXT_mutable_descriptor_type (or VALVE).\n"); flags &= ~VKD3D_BINDLESS_MUTABLE_TYPE_RAW_SSBO; } @@ -5067,7 +5068,7 @@ HRESULT vkd3d_bindless_state_init(struct vkd3d_bindless_state *bindless_state, VKD3D_BINDLESS_SET_BUFFER | VKD3D_BINDLESS_SET_IMAGE | (use_raw_ssbo_binding ? VKD3D_BINDLESS_SET_RAW_SSBO : 0) | VKD3D_BINDLESS_SET_MUTABLE | extra_bindings, - VK_DESCRIPTOR_TYPE_MUTABLE_VALVE))) + VK_DESCRIPTOR_TYPE_MUTABLE_EXT))) goto fail; use_raw_ssbo_binding = !use_raw_ssbo_binding && (bindless_state->flags & VKD3D_BINDLESS_RAW_SSBO); diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 34476967..db0163df 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -163,6 +163,7 @@ struct vkd3d_vulkan_info bool EXT_scalar_block_layout; bool EXT_pipeline_creation_feedback; bool EXT_mesh_shader; + bool EXT_mutable_descriptor_type; /* EXT promotion of VALVE one. */ /* AMD device extensions */ bool AMD_buffer_marker; bool AMD_device_coherent_memory; @@ -3363,7 +3364,7 @@ struct vkd3d_physical_device_info VkPhysicalDeviceRobustness2FeaturesEXT robustness2_features; VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extended_dynamic_state_features; VkPhysicalDeviceExtendedDynamicState2FeaturesEXT extended_dynamic_state2_features; - VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE mutable_descriptor_features; + VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT mutable_descriptor_features; VkPhysicalDeviceRayTracingPipelineFeaturesKHR ray_tracing_pipeline_features; VkPhysicalDeviceAccelerationStructureFeaturesKHR acceleration_structure_features; VkPhysicalDeviceFragmentShadingRateFeaturesKHR fragment_shading_rate_features; diff --git a/subprojects/Vulkan-Headers b/subprojects/Vulkan-Headers -Subproject 9f4c61a31435a7a90a314fc68aeb386c92a09c0 +Subproject 5177b119bbdf463b7b909855a83230253c2d8b6 |