diff --git a/docs/features.txt b/docs/features.txt index 8cc90db937e..3808286f6cc 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -672,7 +672,7 @@ Khronos extensions that are not part of any Vulkan version: VK_EXT_rasterization_order_attachment_access DONE (lvp, tu, vn) VK_EXT_robustness2 DONE (anv, hasvk, hk, lvp, nvk, panvk/v10+, pvr, radv, tu, v3dv, vn) VK_EXT_sample_locations DONE (anv, hasvk, hk, nvk, radv, tu/a650+, vn, lavapipe) - VK_EXT_shader_atomic_float DONE (anv, hasvk, lvp, radv, tu, vn) + VK_EXT_shader_atomic_float DONE (anv, hasvk, lvp, panvk, radv, tu, vn) VK_EXT_shader_atomic_float2 DONE (anv, lvp, radv, vn) VK_EXT_shader_float8 DONE (radv/gfx12+, vn) VK_EXT_shader_image_atomic_int64 DONE (anv, lvp, nvk, radv, vn) diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index cf1d406f4b6..10582a9855d 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -36,3 +36,4 @@ VK_EXT_shader_stencil_export on panvk VK_EXT_map_memory_placed on panvk VK_EXT_conditional_rendering on panvk VK_{KHR,EXT}_{surface,swapchain}_maintenance1 on panvk +VK_EXT_shader_atomic_float on panvk diff --git a/src/panfrost/vulkan/panvk_physical_device.c b/src/panfrost/vulkan/panvk_physical_device.c index 7b676fd851a..2d348601714 100644 --- a/src/panfrost/vulkan/panvk_physical_device.c +++ b/src/panfrost/vulkan/panvk_physical_device.c @@ -798,7 +798,8 @@ get_image_plane_format_features(struct panvk_physical_device *physical_device, features |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_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) + if (pfmt == PIPE_FORMAT_R32_UINT || pfmt == PIPE_FORMAT_R32_SINT || + pfmt == PIPE_FORMAT_R32_FLOAT) features |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT; } diff --git a/src/panfrost/vulkan/panvk_vX_physical_device.c b/src/panfrost/vulkan/panvk_vX_physical_device.c index 95e390a2e9b..c422ccd5439 100644 --- a/src/panfrost/vulkan/panvk_vX_physical_device.c +++ b/src/panfrost/vulkan/panvk_vX_physical_device.c @@ -188,6 +188,7 @@ panvk_per_arch(get_physical_device_extensions)( .EXT_sampler_filter_minmax = PAN_ARCH >= 10, .EXT_scalar_block_layout = true, .EXT_separate_stencil_usage = true, + .EXT_shader_atomic_float = true, .EXT_shader_demote_to_helper_invocation = true, .EXT_shader_module_identifier = true, .EXT_shader_replicated_composites = true, @@ -561,6 +562,20 @@ panvk_per_arch(get_physical_device_features)( /* VK_EXT_shader_replicated_composites */ .shaderReplicatedComposites = true, + /* VK_EXT_shader_atomic_float */ + .shaderBufferFloat32Atomics = true, + .shaderBufferFloat32AtomicAdd = false, + .shaderBufferFloat64Atomics = false, + .shaderBufferFloat64AtomicAdd = false, + .shaderSharedFloat32Atomics = true, + .shaderSharedFloat32AtomicAdd = false, + .shaderSharedFloat64Atomics = false, + .shaderSharedFloat64AtomicAdd = false, + .shaderImageFloat32Atomics = true, + .shaderImageFloat32AtomicAdd = false, + .sparseImageFloat32Atomics = has_sparse, + .sparseImageFloat32AtomicAdd = false, + /* VK_EXT_texel_buffer_alignment */ .texelBufferAlignment = true,