From 804c90e256ef1e0051accd3741a926341941add4 Mon Sep 17 00:00:00 2001 From: Caio Marcelo de Oliveira Filho Date: Fri, 5 Jun 2020 10:23:35 -0700 Subject: [PATCH] anv: Implement VK_KHR_workgroup_memory_explicit_layout Reviewed-by: Jason Ekstrand Reviewed-by: Bas Nieuwenhuizen Part-of: --- docs/relnotes/new_features.txt | 1 + src/intel/vulkan/anv_device.c | 10 ++++++++++ src/intel/vulkan/anv_extensions.py | 1 + src/intel/vulkan/anv_pipeline.c | 8 ++++++-- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index b6bdd134346..9bb20c6e764 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -13,3 +13,4 @@ Panfrost g31/g52/g72 exposes ES 3.0 Panfrost t760+ exposes GL 3.1 (including on Bifrost) Sparse memory support on RADV Rapid packed math (16bit-vectorization) on RADV +VK_KHR_workgroup_memory_explicit_layout on Intel diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 5256c2c116c..e1d77ea8247 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -1452,6 +1452,16 @@ void anv_GetPhysicalDeviceFeatures2( break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR: { + VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *features = + (VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *)ext; + features->workgroupMemoryExplicitLayout = true; + features->workgroupMemoryExplicitLayoutScalarBlockLayout = true; + features->workgroupMemoryExplicitLayout8BitAccess = true; + features->workgroupMemoryExplicitLayout16BitAccess = true; + break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT: { VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *features = (VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *)ext; diff --git a/src/intel/vulkan/anv_extensions.py b/src/intel/vulkan/anv_extensions.py index 35744a4fd55..0510ee22e9e 100644 --- a/src/intel/vulkan/anv_extensions.py +++ b/src/intel/vulkan/anv_extensions.py @@ -119,6 +119,7 @@ EXTENSIONS = [ Extension('VK_KHR_variable_pointers', 1, True), Extension('VK_KHR_vulkan_memory_model', 3, True), Extension('VK_KHR_wayland_surface', 6, 'VK_USE_PLATFORM_WAYLAND_KHR'), + 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_EXT_4444_formats', 1, True), diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index 650d410c0fd..e008cc67c5b 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -217,6 +217,7 @@ anv_shader_compile_to_nir(struct anv_device *device, .variable_pointers = true, .vk_memory_model = true, .vk_memory_model_device_scope = true, + .workgroup_memory_explicit_layout = true, }, .ubo_addr_format = nir_address_format_32bit_index_offset, .ssbo_addr_format = @@ -1743,8 +1744,11 @@ anv_pipeline_compile_cs(struct anv_compute_pipeline *pipeline, anv_pipeline_lower_nir(&pipeline->base, mem_ctx, &stage, layout); - NIR_PASS_V(stage.nir, nir_lower_vars_to_explicit_types, - nir_var_mem_shared, shared_type_info); + if (!stage.nir->info.cs.shared_memory_explicit_layout) { + NIR_PASS_V(stage.nir, nir_lower_vars_to_explicit_types, + nir_var_mem_shared, shared_type_info); + } + NIR_PASS_V(stage.nir, nir_lower_explicit_io, nir_var_mem_shared, nir_address_format_32bit_offset); NIR_PASS_V(stage.nir, brw_nir_lower_cs_intrinsics);