From 82d21b016283346d8afde10f30381cc25107be53 Mon Sep 17 00:00:00 2001 From: Sascha Willems Date: Fri, 26 Jan 2024 15:41:24 +0100 Subject: [PATCH] Updated to Vulkan headers 1.3.276 Adds support for: - VK_KHR_dynamic_rendering_local_read - VK_KHR_shader_quad_control - VK_KHR_shader_subgroup_rotate - VK_KHR_shader_maximal_reconvergence - VK_KHR_shader_float_controls2 - VK_KHR_index_type_uint8 - VK_KHR_line_rasterization - VK_KHR_shader_expect_assume --- Vulkan-Headers | 2 +- VulkanDeviceInfoExtensions.cpp | 87 ++++++++++++++++++++++++++++++++++ VulkanDeviceInfoExtensions.h | 2 +- extensionlist.txt | 8 ++++ 4 files changed, 97 insertions(+), 2 deletions(-) diff --git a/Vulkan-Headers b/Vulkan-Headers index 80207f9..ea45703 160000 --- a/Vulkan-Headers +++ b/Vulkan-Headers @@ -1 +1 @@ -Subproject commit 80207f9da86423ce33aff8328a792fd715f3c08f +Subproject commit ea45703effcb01df0856628286f8a890dd313ecd diff --git a/VulkanDeviceInfoExtensions.cpp b/VulkanDeviceInfoExtensions.cpp index 903b280..3e35e72 100644 --- a/VulkanDeviceInfoExtensions.cpp +++ b/VulkanDeviceInfoExtensions.cpp @@ -920,6 +920,15 @@ void VulkanDeviceInfoExtensions::readPhysicalProperties_KHR() { pushProperty2(extension, "supportsNonZeroFirstInstance", QVariant(bool(extProps->supportsNonZeroFirstInstance))); delete extProps; } + if (extensionSupported("VK_KHR_line_rasterization")) { + const char* extension("VK_KHR_line_rasterization"); + VkPhysicalDeviceLineRasterizationPropertiesKHR* extProps = new VkPhysicalDeviceLineRasterizationPropertiesKHR{}; + extProps->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_KHR; + deviceProps2 = initDeviceProperties2(extProps); + vulkanContext.vkGetPhysicalDeviceProperties2KHR(device, &deviceProps2); + pushProperty2(extension, "lineSubPixelPrecisionBits", QVariant(extProps->lineSubPixelPrecisionBits)); + delete extProps; + } if (extensionSupported("VK_KHR_maintenance6")) { const char* extension("VK_KHR_maintenance6"); VkPhysicalDeviceMaintenance6PropertiesKHR* extProps = new VkPhysicalDeviceMaintenance6PropertiesKHR{}; @@ -2403,6 +2412,24 @@ void VulkanDeviceInfoExtensions::readPhysicalFeatures_KHR() { pushFeature2(extension, "attachmentFragmentShadingRate", extFeatures->attachmentFragmentShadingRate); delete extFeatures; } + if (extensionSupported("VK_KHR_dynamic_rendering_local_read")) { + const char* extension("VK_KHR_dynamic_rendering_local_read"); + VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR* extFeatures = new VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR{}; + extFeatures->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES_KHR; + deviceFeatures2 = initDeviceFeatures2(extFeatures); + vulkanContext.vkGetPhysicalDeviceFeatures2KHR(device, &deviceFeatures2); + pushFeature2(extension, "dynamicRenderingLocalRead", extFeatures->dynamicRenderingLocalRead); + delete extFeatures; + } + if (extensionSupported("VK_KHR_shader_quad_control")) { + const char* extension("VK_KHR_shader_quad_control"); + VkPhysicalDeviceShaderQuadControlFeaturesKHR* extFeatures = new VkPhysicalDeviceShaderQuadControlFeaturesKHR{}; + extFeatures->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR; + deviceFeatures2 = initDeviceFeatures2(extFeatures); + vulkanContext.vkGetPhysicalDeviceFeatures2KHR(device, &deviceFeatures2); + pushFeature2(extension, "shaderQuadControl", extFeatures->shaderQuadControl); + delete extFeatures; + } if (extensionSupported("VK_KHR_separate_depth_stencil_layouts")) { const char* extension("VK_KHR_separate_depth_stencil_layouts"); VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* extFeatures = new VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures{}; @@ -2535,6 +2562,25 @@ void VulkanDeviceInfoExtensions::readPhysicalFeatures_KHR() { pushFeature2(extension, "maintenance4", extFeatures->maintenance4); delete extFeatures; } + if (extensionSupported("VK_KHR_shader_subgroup_rotate")) { + const char* extension("VK_KHR_shader_subgroup_rotate"); + VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR* extFeatures = new VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR{}; + extFeatures->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES_KHR; + deviceFeatures2 = initDeviceFeatures2(extFeatures); + vulkanContext.vkGetPhysicalDeviceFeatures2KHR(device, &deviceFeatures2); + pushFeature2(extension, "shaderSubgroupRotate", extFeatures->shaderSubgroupRotate); + pushFeature2(extension, "shaderSubgroupRotateClustered", extFeatures->shaderSubgroupRotateClustered); + delete extFeatures; + } + if (extensionSupported("VK_KHR_shader_maximal_reconvergence")) { + const char* extension("VK_KHR_shader_maximal_reconvergence"); + VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* extFeatures = new VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR{}; + extFeatures->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR; + deviceFeatures2 = initDeviceFeatures2(extFeatures); + vulkanContext.vkGetPhysicalDeviceFeatures2KHR(device, &deviceFeatures2); + pushFeature2(extension, "shaderMaximalReconvergence", extFeatures->shaderMaximalReconvergence); + delete extFeatures; + } if (extensionSupported("VK_KHR_maintenance5")) { const char* extension("VK_KHR_maintenance5"); VkPhysicalDeviceMaintenance5FeaturesKHR* extFeatures = new VkPhysicalDeviceMaintenance5FeaturesKHR{}; @@ -2582,6 +2628,47 @@ void VulkanDeviceInfoExtensions::readPhysicalFeatures_KHR() { pushFeature2(extension, "vertexAttributeInstanceRateZeroDivisor", extFeatures->vertexAttributeInstanceRateZeroDivisor); delete extFeatures; } + if (extensionSupported("VK_KHR_shader_float_controls2")) { + const char* extension("VK_KHR_shader_float_controls2"); + VkPhysicalDeviceShaderFloatControls2FeaturesKHR* extFeatures = new VkPhysicalDeviceShaderFloatControls2FeaturesKHR{}; + extFeatures->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES_KHR; + deviceFeatures2 = initDeviceFeatures2(extFeatures); + vulkanContext.vkGetPhysicalDeviceFeatures2KHR(device, &deviceFeatures2); + pushFeature2(extension, "shaderFloatControls2", extFeatures->shaderFloatControls2); + delete extFeatures; + } + if (extensionSupported("VK_KHR_index_type_uint8")) { + const char* extension("VK_KHR_index_type_uint8"); + VkPhysicalDeviceIndexTypeUint8FeaturesKHR* extFeatures = new VkPhysicalDeviceIndexTypeUint8FeaturesKHR{}; + extFeatures->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_KHR; + deviceFeatures2 = initDeviceFeatures2(extFeatures); + vulkanContext.vkGetPhysicalDeviceFeatures2KHR(device, &deviceFeatures2); + pushFeature2(extension, "indexTypeUint8", extFeatures->indexTypeUint8); + delete extFeatures; + } + if (extensionSupported("VK_KHR_line_rasterization")) { + const char* extension("VK_KHR_line_rasterization"); + VkPhysicalDeviceLineRasterizationFeaturesKHR* extFeatures = new VkPhysicalDeviceLineRasterizationFeaturesKHR{}; + extFeatures->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_KHR; + deviceFeatures2 = initDeviceFeatures2(extFeatures); + vulkanContext.vkGetPhysicalDeviceFeatures2KHR(device, &deviceFeatures2); + pushFeature2(extension, "rectangularLines", extFeatures->rectangularLines); + pushFeature2(extension, "bresenhamLines", extFeatures->bresenhamLines); + pushFeature2(extension, "smoothLines", extFeatures->smoothLines); + pushFeature2(extension, "stippledRectangularLines", extFeatures->stippledRectangularLines); + pushFeature2(extension, "stippledBresenhamLines", extFeatures->stippledBresenhamLines); + pushFeature2(extension, "stippledSmoothLines", extFeatures->stippledSmoothLines); + delete extFeatures; + } + if (extensionSupported("VK_KHR_shader_expect_assume")) { + const char* extension("VK_KHR_shader_expect_assume"); + VkPhysicalDeviceShaderExpectAssumeFeaturesKHR* extFeatures = new VkPhysicalDeviceShaderExpectAssumeFeaturesKHR{}; + extFeatures->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES_KHR; + deviceFeatures2 = initDeviceFeatures2(extFeatures); + vulkanContext.vkGetPhysicalDeviceFeatures2KHR(device, &deviceFeatures2); + pushFeature2(extension, "shaderExpectAssume", extFeatures->shaderExpectAssume); + delete extFeatures; + } if (extensionSupported("VK_KHR_maintenance6")) { const char* extension("VK_KHR_maintenance6"); VkPhysicalDeviceMaintenance6FeaturesKHR* extFeatures = new VkPhysicalDeviceMaintenance6FeaturesKHR{}; diff --git a/VulkanDeviceInfoExtensions.h b/VulkanDeviceInfoExtensions.h index ec8b579..aafed40 100644 --- a/VulkanDeviceInfoExtensions.h +++ b/VulkanDeviceInfoExtensions.h @@ -95,7 +95,7 @@ class VulkanDeviceInfoExtensions void readPhysicalFeatures_VALVE(); public: - const uint32_t vkHeaderVersion = 274; + const uint32_t vkHeaderVersion = 276; std::vector features2; std::vector properties2; std::vector extensions; diff --git a/extensionlist.txt b/extensionlist.txt index 0f70747..300966e 100644 --- a/extensionlist.txt +++ b/extensionlist.txt @@ -140,6 +140,8 @@ VK_KHR_timeline_semaphore VK_KHR_vulkan_memory_model VK_KHR_shader_terminate_invocation VK_KHR_fragment_shading_rate +VK_KHR_dynamic_rendering_local_read +VK_KHR_shader_quad_control VK_KHR_separate_depth_stencil_layouts VK_KHR_present_wait VK_KHR_uniform_buffer_standard_layout @@ -154,11 +156,17 @@ VK_KHR_zero_initialize_workgroup_memory VK_KHR_workgroup_memory_explicit_layout VK_KHR_ray_tracing_maintenance1 VK_KHR_maintenance4 +VK_KHR_shader_subgroup_rotate +VK_KHR_shader_maximal_reconvergence VK_KHR_maintenance5 VK_KHR_ray_tracing_position_fetch VK_KHR_cooperative_matrix VK_KHR_video_maintenance1 VK_KHR_vertex_attribute_divisor +VK_KHR_shader_float_controls2 +VK_KHR_index_type_uint8 +VK_KHR_line_rasterization +VK_KHR_shader_expect_assume VK_KHR_maintenance6 MSFT VK_MSFT_layered_driver