From cbc1c6a16f5ed367bdfff7a33ecc0f6dc3e66d00 Mon Sep 17 00:00:00 2001 From: Connor Abbott Date: Fri, 25 Nov 2022 14:12:58 +0100 Subject: [PATCH] tu: Expose VK_EXT_fragment_density_map Part-of: --- src/freedreno/vulkan/tu_device.cc | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/freedreno/vulkan/tu_device.cc b/src/freedreno/vulkan/tu_device.cc index 11a1070ceee..efbcf7c51f1 100644 --- a/src/freedreno/vulkan/tu_device.cc +++ b/src/freedreno/vulkan/tu_device.cc @@ -223,6 +223,7 @@ get_device_extensions(const struct tu_physical_device *device, .EXT_extended_dynamic_state3 = true, .EXT_external_memory_dma_buf = true, .EXT_filter_cubic = device->info->a6xx.has_tex_filter_cubic, + .EXT_fragment_density_map = true, .EXT_global_priority = true, .EXT_global_priority_query = true, .EXT_graphics_pipeline_library = true, @@ -1000,6 +1001,14 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, features->descriptorBufferPushDescriptors = true; break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: { + VkPhysicalDeviceFragmentDensityMapFeaturesEXT *features = + (VkPhysicalDeviceFragmentDensityMapFeaturesEXT *)ext; + features->fragmentDensityMap = true; + features->fragmentDensityMapDynamic = false; + features->fragmentDensityMapNonSubsampledImages = true; + break; + } default: break; @@ -1518,6 +1527,20 @@ tu_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, properties->descriptorBufferAddressSpaceSize = ~0ull; break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT: { + VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT *properties = + (VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT *)ext; + properties->combinedImageSamplerDensityMapDescriptorSize = 2 * A6XX_TEX_CONST_DWORDS * 4; + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT: { + VkPhysicalDeviceFragmentDensityMapPropertiesEXT *properties = + (VkPhysicalDeviceFragmentDensityMapPropertiesEXT *)ext; + properties->minFragmentDensityTexelSize = (VkExtent2D) { MIN_FDM_TEXEL_SIZE, MIN_FDM_TEXEL_SIZE }; + properties->maxFragmentDensityTexelSize = (VkExtent2D) { MAX_FDM_TEXEL_SIZE, MAX_FDM_TEXEL_SIZE }; + properties->fragmentDensityInvocations = false; + break; + } default: break; }