Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/HansKristian-Work/vkd3d-proton.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <post@arntzen-software.no>2022-09-15 14:02:23 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2022-09-15 14:48:01 +0300
commit6c133a265d3b043cb408fc7a75acbc43b1006d89 (patch)
tree3677de7ed3b7c3d749b3d048a5c2a03d14c62ff5
parenta782d7be499efc52e944e3247b5174543cc4ad8d (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.md2
-rw-r--r--libs/vkd3d/device.c5
-rw-r--r--libs/vkd3d/resource.c8
-rw-r--r--libs/vkd3d/state.c25
-rw-r--r--libs/vkd3d/vkd3d_private.h3
m---------subprojects/Vulkan-Headers0
6 files changed, 23 insertions, 20 deletions
diff --git a/README.md b/README.md
index b94b0928..af3444f5 100644
--- a/README.md
+++ b/README.md
@@ -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