From fdfd316d5b5e67b7c3e2dbff93c803e1f648385e Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Sat, 19 Sep 2020 14:00:05 +0200 Subject: [PATCH] radv: Implement VK_KHR_zero_initialize_workgroup_memory. Reuses the pass that was implemented for ANV. Reviewed-by: Samuel Pitoiset Part-of: --- docs/relnotes/new_features.txt | 2 +- src/amd/vulkan/radv_device.c | 6 ++++++ src/amd/vulkan/radv_extensions.py | 1 + src/amd/vulkan/radv_shader.c | 8 ++++++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index b17db63c782..8d594a1dbec 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -15,4 +15,4 @@ Sparse memory support on RADV Rapid packed math (16bit-vectorization) on RADV VK_KHR_workgroup_memory_explicit_layout on Intel, RADV DRM format modifiers for AMD. -VK_KHR_zero_initialize_workgroup_memory on Intel +VK_KHR_zero_initialize_workgroup_memory on Intel, RADV diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index fad1f46695d..73e1797ea29 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -1444,6 +1444,12 @@ void radv_GetPhysicalDeviceFeatures2( features->workgroupMemoryExplicitLayout16BitAccess = true; break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR: { + VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR *features = + (VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR*)ext; + features->shaderZeroInitializeWorkgroupMemory = true; + break; + } default: break; } diff --git a/src/amd/vulkan/radv_extensions.py b/src/amd/vulkan/radv_extensions.py index f618dd9e2d7..3f637346909 100644 --- a/src/amd/vulkan/radv_extensions.py +++ b/src/amd/vulkan/radv_extensions.py @@ -119,6 +119,7 @@ EXTENSIONS = [ Extension('VK_KHR_workgroup_memory_explicit_layout', 1, True), Extension('VK_KHR_xcb_surface', 6, 'VK_USE_PLATFORM_XCB_KHR'), Extension('VK_KHR_xlib_surface', 6, 'VK_USE_PLATFORM_XLIB_KHR'), + Extension('VK_KHR_zero_initialize_workgroup_memory', 1, True), Extension('VK_EXT_4444_formats', 1, True), Extension('VK_EXT_acquire_xlib_display', 1, 'VK_USE_PLATFORM_XLIB_XRANDR_EXT'), Extension('VK_EXT_buffer_device_address', 2, True), diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index e0660f88631..c25af07df93 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -681,6 +681,14 @@ radv_shader_compile_to_nir(struct radv_device *device, } NIR_PASS_V(nir, nir_lower_explicit_io, nir_var_mem_shared, nir_address_format_32bit_offset); + + if (nir->info.cs.zero_initialize_shared_memory && + nir->info.cs.shared_size > 0) { + const unsigned chunk_size = 16; /* max single store size */ + const unsigned shared_size = ALIGN(nir->info.cs.shared_size, chunk_size); + NIR_PASS_V(nir, nir_zero_initialize_shared_memory, + shared_size, chunk_size); + } } nir_lower_explicit_io(nir, nir_var_mem_global,