From 10c64ee63abbc05cb3cbf02c0fcddd22f15bf88d Mon Sep 17 00:00:00 2001 From: Valentine Burley Date: Sun, 24 Mar 2024 19:57:35 +0000 Subject: [PATCH] tu: Expose VK_KHR_workgroup_memory_explicit_layout It's all done for us in NIR. Signed-off-by: Valentine Burley Part-of: --- docs/features.txt | 2 +- src/freedreno/vulkan/tu_device.cc | 7 +++++++ src/freedreno/vulkan/tu_shader.cc | 6 ++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index a0a2fddccd9..2fa05b10c61 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -551,7 +551,7 @@ Khronos extensions that are not part of any Vulkan version: VK_KHR_swapchain_mutable_format DONE (anv, hasvk, lvp, nvk, radv, tu, v3dv, vn) VK_KHR_vertex_attribute_divisor DONE (anv, nvk, radv, tu, v3dv) VK_KHR_wayland_surface DONE (anv, dzn, lvp, nvk, panvk, radv, tu, v3dv, vn) - VK_KHR_workgroup_memory_explicit_layout DONE (anv, nvk, hasvk, radv, v3dv) + VK_KHR_workgroup_memory_explicit_layout DONE (anv, nvk, hasvk, radv, tu, v3dv) VK_KHR_win32_keyed_mutex not started VK_KHR_win32_surface DONE (dzn, lvp) VK_KHR_xcb_surface DONE (anv, dzn, hasvk, lvp, nvk, radv, tu, v3dv, vn) diff --git a/src/freedreno/vulkan/tu_device.cc b/src/freedreno/vulkan/tu_device.cc index 652f988d746..97a9c3a1e20 100644 --- a/src/freedreno/vulkan/tu_device.cc +++ b/src/freedreno/vulkan/tu_device.cc @@ -222,6 +222,7 @@ get_device_extensions(const struct tu_physical_device *device, .KHR_variable_pointers = true, .KHR_vertex_attribute_divisor = true, .KHR_vulkan_memory_model = true, + .KHR_workgroup_memory_explicit_layout = true, .KHR_zero_initialize_workgroup_memory = true, .EXT_4444_formats = true, @@ -493,6 +494,12 @@ tu_get_features(struct tu_physical_device *pdevice, features->vertexAttributeInstanceRateDivisor = true; features->vertexAttributeInstanceRateZeroDivisor = true; + /* VK_KHR_workgroup_memory_explicit_layout */ + features->workgroupMemoryExplicitLayout = true; + features->workgroupMemoryExplicitLayoutScalarBlockLayout = true; + features->workgroupMemoryExplicitLayout8BitAccess = true; + features->workgroupMemoryExplicitLayout16BitAccess = true; + /* VK_EXT_4444_formats */ features->formatA4R4G4B4 = true; features->formatA4B4G4R4 = true; diff --git a/src/freedreno/vulkan/tu_shader.cc b/src/freedreno/vulkan/tu_shader.cc index 8f178bfc358..b7befd13c3f 100644 --- a/src/freedreno/vulkan/tu_shader.cc +++ b/src/freedreno/vulkan/tu_shader.cc @@ -2409,8 +2409,10 @@ tu_shader_create(struct tu_device *dev, nir_address_format_64bit_global); if (nir->info.stage == MESA_SHADER_COMPUTE) { - NIR_PASS_V(nir, nir_lower_vars_to_explicit_types, - nir_var_mem_shared, shared_type_info); + if (!nir->info.shared_memory_explicit_layout) { + NIR_PASS_V(nir, nir_lower_vars_to_explicit_types, + nir_var_mem_shared, shared_type_info); + } NIR_PASS_V(nir, nir_lower_explicit_io, nir_var_mem_shared, nir_address_format_32bit_offset);