From e79a568442af022109eae93409954c9148cfedb2 Mon Sep 17 00:00:00 2001 From: Ryan Mckeever Date: Tue, 15 Apr 2025 12:59:04 -0700 Subject: [PATCH] panvk: shaderStorageImageReadWithoutFormat support Signed-off-by: Ryan Mckeever Reviewed-by: Boris Brezillon Acked-by: Erik Faye-Lund Part-of: --- docs/relnotes/new_features.txt | 1 + src/panfrost/vulkan/panvk_physical_device.c | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index bd0c2dd2fa8..ca9b9c7bbb2 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -42,3 +42,4 @@ dualSrcBlend on panvk VK_KHR_dynamic_rendering_local_read on panvk VK_EXT_subgroup_size_control on panvk/v10+ VK_KHR_format_feature_flags2 on panvk +shaderStorageImageReadWithoutFormat on panvk diff --git a/src/panfrost/vulkan/panvk_physical_device.c b/src/panfrost/vulkan/panvk_physical_device.c index 25961ba9b1e..7b0268ebdd4 100644 --- a/src/panfrost/vulkan/panvk_physical_device.c +++ b/src/panfrost/vulkan/panvk_physical_device.c @@ -377,6 +377,7 @@ get_features(const struct panvk_physical_device *device, .fragmentStoresAndAtomics = arch >= 10, .shaderImageGatherExtended = true, .shaderStorageImageExtendedFormats = true, + .shaderStorageImageReadWithoutFormat = true, .shaderUniformBufferArrayDynamicIndexing = true, .shaderSampledImageArrayDynamicIndexing = true, .shaderStorageBufferArrayDynamicIndexing = true, @@ -1396,7 +1397,8 @@ get_image_plane_format_features(struct panvk_physical_device *physical_device, } if (fmt.bind & PAN_BIND_STORAGE_IMAGE) - features |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT; + features |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT | + VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT; if (pfmt == PIPE_FORMAT_R32_UINT || pfmt == PIPE_FORMAT_R32_SINT) features |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT; @@ -1459,7 +1461,8 @@ get_image_format_features(struct panvk_physical_device *physical_device, VK_FORMAT_FEATURE_2_BLIT_DST_BIT | VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT | - VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT); + VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT | + VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT); /* This is supported on all YCbCr formats */ features |= @@ -1514,7 +1517,8 @@ get_buffer_format_features(struct panvk_physical_device *physical_device, features |= VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT; if (fmt.bind & PAN_BIND_STORAGE_IMAGE) - features |= VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT; + features |= VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT | + VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT; if (pfmt == PIPE_FORMAT_R32_UINT || pfmt == PIPE_FORMAT_R32_SINT) features |= VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT;