From 1efa53ac17f3f950ea015d74cccb0f079b14a6d4 Mon Sep 17 00:00:00 2001 From: Ryan Mckeever Date: Tue, 15 Apr 2025 13:00:47 -0700 Subject: [PATCH] panvk: shaderStorageImageWriteWithoutFormat 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 ca9b9c7bbb2..ff4c0821fc5 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -43,3 +43,4 @@ 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 +shaderStorageImageWriteWithoutFormat on panvk diff --git a/src/panfrost/vulkan/panvk_physical_device.c b/src/panfrost/vulkan/panvk_physical_device.c index 7b0268ebdd4..968180a9994 100644 --- a/src/panfrost/vulkan/panvk_physical_device.c +++ b/src/panfrost/vulkan/panvk_physical_device.c @@ -378,6 +378,7 @@ get_features(const struct panvk_physical_device *device, .shaderImageGatherExtended = true, .shaderStorageImageExtendedFormats = true, .shaderStorageImageReadWithoutFormat = true, + .shaderStorageImageWriteWithoutFormat = true, .shaderUniformBufferArrayDynamicIndexing = true, .shaderSampledImageArrayDynamicIndexing = true, .shaderStorageBufferArrayDynamicIndexing = true, @@ -1398,7 +1399,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 | - VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT; + VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT | + VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT; if (pfmt == PIPE_FORMAT_R32_UINT || pfmt == PIPE_FORMAT_R32_SINT) features |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT; @@ -1462,7 +1464,8 @@ get_image_format_features(struct panvk_physical_device *physical_device, 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_READ_WITHOUT_FORMAT_BIT); + VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT | + VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT); /* This is supported on all YCbCr formats */ features |= @@ -1518,7 +1521,8 @@ get_buffer_format_features(struct panvk_physical_device *physical_device, if (fmt.bind & PAN_BIND_STORAGE_IMAGE) features |= VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT | - VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT; + VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT | + VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT; if (pfmt == PIPE_FORMAT_R32_UINT || pfmt == PIPE_FORMAT_R32_SINT) features |= VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT;