From 9b60a1c00e938bfeb4e3e2419960fa1c9e00c77a Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Thu, 16 Nov 2023 23:42:51 -0600 Subject: [PATCH] nvk: Advertise VK_KHR_shader_atomic_int64 Everything should be mostly wired up. Shared atomics don't seem to work, though, for some reason. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/9603 Part-of: --- docs/features.txt | 2 +- src/nouveau/vulkan/nvk_physical_device.c | 7 ++++++- src/nouveau/vulkan/nvk_shader.c | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index adfbcf99ed5..69bc7992920 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -458,7 +458,7 @@ Vulkan 1.2 -- all DONE: anv, tu, vn VK_KHR_imageless_framebuffer DONE (anv, dzn, hasvk, lvp, nvk, radv, tu, v3dv, vn) VK_KHR_sampler_mirror_clamp_to_edge DONE (anv, dzn, hasvk, lvp, nvk, radv, tu, v3dv, vn) VK_KHR_separate_depth_stencil_layouts DONE (anv, dzn, hasvk, lvp, nvk, radv, tu, v3dv, vn) - VK_KHR_shader_atomic_int64 DONE (anv/gen9+, lvp, radv, vn) + VK_KHR_shader_atomic_int64 DONE (anv/gen9+, lvp, nvk, radv, vn) VK_KHR_shader_float16_int8 DONE (anv/gen8+, dzn, hasvk, lvp, radv, tu, vn) VK_KHR_shader_float_controls DONE (anv/gen8+, dzn, hasvk, lvp, radv, tu, v3dv, vn) VK_KHR_shader_subgroup_extended_types DONE (anv/gen8+, hasvk, lvp, radv, tu, vn) diff --git a/src/nouveau/vulkan/nvk_physical_device.c b/src/nouveau/vulkan/nvk_physical_device.c index 796b6399a94..3a1733495ba 100644 --- a/src/nouveau/vulkan/nvk_physical_device.c +++ b/src/nouveau/vulkan/nvk_physical_device.c @@ -112,6 +112,8 @@ nvk_get_device_extensions(const struct nv_device_info *info, .KHR_sampler_mirror_clamp_to_edge = true, .KHR_sampler_ycbcr_conversion = true, .KHR_separate_depth_stencil_layouts = true, + .KHR_shader_atomic_int64 = info->cls_eng3d >= MAXWELL_A && + nvk_use_nak(info), .KHR_shader_clock = true, .KHR_shader_draw_parameters = true, .KHR_shader_float16_int8 = true, @@ -251,12 +253,15 @@ nvk_get_device_features(const struct nv_device_info *info, /* Vulkan 1.2 */ .samplerMirrorClampToEdge = true, - .descriptorIndexing = true, .drawIndirectCount = info->cls_eng3d >= TURING_A, .storageBuffer8BitAccess = true, .uniformAndStorageBuffer8BitAccess = true, .storagePushConstant8 = true, + .shaderBufferInt64Atomics = info->cls_eng3d >= MAXWELL_A && + nvk_use_nak(info), + .shaderSharedInt64Atomics = false, /* TODO */ .shaderInt8 = true, + .descriptorIndexing = true, .shaderInputAttachmentArrayDynamicIndexing = true, .shaderUniformTexelBufferArrayDynamicIndexing = true, .shaderStorageTexelBufferArrayDynamicIndexing = true, diff --git a/src/nouveau/vulkan/nvk_shader.c b/src/nouveau/vulkan/nvk_shader.c index f62db7905e1..5fb6387e94a 100644 --- a/src/nouveau/vulkan/nvk_shader.c +++ b/src/nouveau/vulkan/nvk_shader.c @@ -147,6 +147,7 @@ nvk_physical_device_spirv_options(const struct nvk_physical_device *pdev, .int8 = true, .int16 = true, .int64 = true, + .int64_atomics = true, .min_lod = true, .multiview = true, .physical_storage_buffer_address = true,