From 765c3b85a53abd031d241b9a824d36661e16c69a Mon Sep 17 00:00:00 2001 From: Connor Abbott Date: Thu, 3 Dec 2020 11:46:48 +0100 Subject: [PATCH] tu: Expose VK_KHR_spirv_1_4 and VK_EXT_scalar_block_layout VK_KHR_spirv_1_4 is trivial because vtn already supports all the added SPIR-V features that aren't gated behind Vulkan extensions. I've observed some robustness2 CTS tests requiring this. However there are a few tests currently failing due to lacking spilling. VK_EXT_scalar_block_layout should also be trivial, since support for "straddling" UBO loads was added recently for other reasons. This is used by every robustness2 CTS test. Part-of: --- docs/features.txt | 4 ++-- src/freedreno/ci/deqp-freedreno-a630-fails.txt | 1 + src/freedreno/vulkan/tu_device.c | 8 +++++++- src/freedreno/vulkan/tu_extensions.py | 2 ++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index 7b80cee0292..5fd8cd43ced 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -461,14 +461,14 @@ Vulkan 1.2 -- all DONE: anv VK_KHR_shader_float16_int8 DONE (anv/gen8+, radv, tu) VK_KHR_shader_float_controls DONE (anv/gen8+, radv, tu) VK_KHR_shader_subgroup_extended_types DONE (anv/gen8+, radv) - VK_KHR_spirv_1_4 DONE (anv, radv) + VK_KHR_spirv_1_4 DONE (anv, radv, tu) VK_KHR_timeline_semaphore DONE (anv, radv) VK_KHR_uniform_buffer_standard_layout DONE (anv, lvp, radv) VK_KHR_vulkan_memory_model DONE (anv, radv) VK_EXT_descriptor_indexing DONE (anv/gen9+, radv, tu) VK_EXT_host_query_reset DONE (anv, lvp, radv, tu) VK_EXT_sampler_filter_minmax DONE (anv/gen9+, lvp, radv, tu) - VK_EXT_scalar_block_layout DONE (anv, lvp, radv/gfx7+) + VK_EXT_scalar_block_layout DONE (anv, lvp, radv/gfx7+, tu) VK_EXT_separate_stencil_usage DONE (anv) VK_EXT_shader_viewport_index_layer DONE (anv, lvp, radv, tu) diff --git a/src/freedreno/ci/deqp-freedreno-a630-fails.txt b/src/freedreno/ci/deqp-freedreno-a630-fails.txt index b28f66b161d..26e827a2fd8 100644 --- a/src/freedreno/ci/deqp-freedreno-a630-fails.txt +++ b/src/freedreno/ci/deqp-freedreno-a630-fails.txt @@ -183,6 +183,7 @@ dEQP-VK.spirv_assembly.instruction.graphics.opquantize.too_small_geom,Fail dEQP-VK.spirv_assembly.instruction.graphics.opquantize.too_small_tessc,Fail dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_single_buffer_geom,Fail dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_two_buffers_geom,Fail +dEQP-VK.spirv_assembly.instruction.spirv1p4.opcopylogical.nested_arrays_different_inner_stride,Fail dEQP-VK.subgroups.basic.compute.subgroupelect,Crash dEQP-VK.subgroups.basic.compute.subgroupmemorybarrier,Crash dEQP-VK.subgroups.basic.compute.subgroupmemorybarriershared,Crash diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c index 04e74982af2..19229294315 100644 --- a/src/freedreno/vulkan/tu_device.c +++ b/src/freedreno/vulkan/tu_device.c @@ -444,7 +444,7 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, features->runtimeDescriptorArray = true; features->samplerFilterMinmax = true; - features->scalarBlockLayout = false; + features->scalarBlockLayout = true; features->imagelessFramebuffer = false; features->uniformBufferStandardLayout = false; features->shaderSubgroupExtendedTypes = false; @@ -610,6 +610,12 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, features->shaderInt8 = false; break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT: { + VkPhysicalDeviceScalarBlockLayoutFeaturesEXT *features = (void *)ext; + features->scalarBlockLayout = true; + break; + } + default: break; } diff --git a/src/freedreno/vulkan/tu_extensions.py b/src/freedreno/vulkan/tu_extensions.py index ad83b8d2704..2fe52912eaf 100644 --- a/src/freedreno/vulkan/tu_extensions.py +++ b/src/freedreno/vulkan/tu_extensions.py @@ -113,6 +113,8 @@ EXTENSIONS = [ Extension('VK_KHR_shader_float_controls', 1, True), Extension('VK_KHR_shader_float16_int8', 1, True), Extension('VK_KHR_16bit_storage', 1, 'device->gpu_id >= 650'), + Extension('VK_EXT_scalar_block_layout', 1, True), + Extension('VK_KHR_spirv_1_4', 1, True), ] MAX_API_VERSION = VkVersion(MAX_API_VERSION)