panvk: Advertise VK_EXT_shader_atomic_float
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

Expose float32 atomic exchange support for buffer, shared, and image
operations on all architectures. The existing axchg instruction is
type-agnostic, so no compiler changes are needed. Image atomics are
already lowered to global atomics via nir_lower_image_atomics_to_global.

Also add R32_FLOAT to the STORAGE_IMAGE_ATOMIC format feature flag so
image atomic operations are accepted for r32f images.

Signed-off-by: Christian Gmeiner <cgmeiner@igalia.com>
Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40506>
This commit is contained in:
Christian Gmeiner 2026-03-19 00:56:57 +01:00 committed by Marge Bot
parent 245d54397d
commit 32ca98a26e
4 changed files with 19 additions and 2 deletions

View file

@ -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)

View file

@ -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

View file

@ -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;
}

View file

@ -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,