From 926f2033a9a999687db24337acafa3a485a02a0f Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Wed, 24 Jun 2020 11:33:57 +0200 Subject: [PATCH] vkd3d: Enable VK_EXT_extended_dynamic_state. Signed-off-by: Hans-Kristian Arntzen --- libs/vkd3d/device.c | 9 +++++++++ libs/vkd3d/vkd3d_private.h | 2 ++ libs/vkd3d/vulkan_procs.h | 6 ++++++ 3 files changed, 17 insertions(+) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 00bf157e..51ee1dec 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -90,6 +90,7 @@ static const struct vkd3d_optional_extension_info optional_device_extensions[] = VK_EXTENSION(EXT_TEXEL_BUFFER_ALIGNMENT, EXT_texel_buffer_alignment), VK_EXTENSION(EXT_TRANSFORM_FEEDBACK, EXT_transform_feedback), VK_EXTENSION(EXT_VERTEX_ATTRIBUTE_DIVISOR, EXT_vertex_attribute_divisor), + VK_EXTENSION(EXT_EXTENDED_DYNAMIC_STATE, EXT_extended_dynamic_state), /* AMD extensions */ VK_EXTENSION(AMD_SHADER_CORE_PROPERTIES, AMD_shader_core_properties), VK_EXTENSION(AMD_SHADER_CORE_PROPERTIES_2, AMD_shader_core_properties2), @@ -642,6 +643,7 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i const struct vkd3d_vk_instance_procs *vk_procs = &device->vkd3d_instance->vk_procs; VkPhysicalDeviceSubgroupSizeControlPropertiesEXT *subgroup_size_control_properties; VkPhysicalDeviceInlineUniformBlockPropertiesEXT *inline_uniform_block_properties; + VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *extended_dynamic_state_features; VkPhysicalDeviceBufferDeviceAddressFeaturesKHR *buffer_device_address_features; VkPhysicalDeviceCustomBorderColorPropertiesEXT *custom_border_color_properties; VkPhysicalDeviceConditionalRenderingFeaturesEXT *conditional_rendering_features; @@ -703,6 +705,7 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i shader_subgroup_extended_types_features = &info->subgroup_extended_types_features; robustness2_properties = &info->robustness2_properties; robustness2_features = &info->robustness2_features; + extended_dynamic_state_features = &info->extended_dynamic_state_features; info->features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; info->properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; @@ -832,6 +835,12 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i vk_prepend_struct(&info->properties2, vertex_divisor_properties); } + if (vulkan_info->EXT_extended_dynamic_state) + { + extended_dynamic_state_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT; + vk_prepend_struct(&info->features2, extended_dynamic_state_features); + } + if (vulkan_info->AMD_shader_core_properties) { shader_core_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD; diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 6959c6ba..b331ef04 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -133,6 +133,7 @@ struct vkd3d_vulkan_info bool EXT_texel_buffer_alignment; bool EXT_transform_feedback; bool EXT_vertex_attribute_divisor; + bool EXT_extended_dynamic_state; /* AMD device extensions */ bool AMD_shader_core_properties; bool AMD_shader_core_properties2; @@ -1636,6 +1637,7 @@ struct vkd3d_physical_device_info VkPhysicalDeviceFloat16Int8FeaturesKHR float16_int8_features; VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR subgroup_extended_types_features; VkPhysicalDeviceRobustness2FeaturesEXT robustness2_features; + VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extended_dynamic_state_features; VkPhysicalDeviceFeatures2 features2; }; diff --git a/libs/vkd3d/vulkan_procs.h b/libs/vkd3d/vulkan_procs.h index f54531ec..145dc765 100644 --- a/libs/vkd3d/vulkan_procs.h +++ b/libs/vkd3d/vulkan_procs.h @@ -213,6 +213,12 @@ VK_DEVICE_EXT_PFN(vkCmdBindTransformFeedbackBuffersEXT) VK_DEVICE_EXT_PFN(vkCmdEndQueryIndexedEXT) VK_DEVICE_EXT_PFN(vkCmdEndTransformFeedbackEXT) +/* VK_EXT_extended_dynamic_state */ +VK_DEVICE_EXT_PFN(vkCmdBindVertexBuffers2EXT) +VK_DEVICE_EXT_PFN(vkCmdSetPrimitiveTopologyEXT) +VK_DEVICE_EXT_PFN(vkCmdSetScissorWithCountEXT) +VK_DEVICE_EXT_PFN(vkCmdSetViewportWithCountEXT) + /* VK_KHR_surface */ VK_INSTANCE_EXT_PFN(vkGetPhysicalDeviceSurfacePresentModesKHR) VK_INSTANCE_EXT_PFN(vkGetPhysicalDeviceSurfaceSupportKHR)