From 10c4a7cf59733ae2058a76b880ea0767a59dad4f Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 28 May 2020 10:21:27 +0200 Subject: [PATCH] spirv,radv,anv: implement no-op VK_GOOGLE_user_type This extension only allows HLSL shader compilers to optionally embed unambiguous type information which can be safely ignored by the driver. This fixes a crash with the recent Vulkan backend of Path Of Exile (it uses the extension without checking if it's supported). Cc: Signed-off-by: Samuel Pitoiset Tested-by: Edmondo Tommasina Reviewed-by: Jason Ekstrand Part-of: --- docs/relnotes/new_features.txt | 1 + src/amd/vulkan/radv_extensions.py | 1 + src/compiler/spirv/spirv_to_nir.c | 5 +++++ src/compiler/spirv/vtn_variables.c | 1 + src/intel/vulkan/anv_extensions.py | 1 + 5 files changed, 9 insertions(+) diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index 91b0a8d1b66..41557a4ac1e 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -3,3 +3,4 @@ VK_AMD_texture_gather_bias_lod on RADV. VK_EXT_private_data on ANV and RADV. VK_EXT_custom_border_color on RADV. VK_EXT_pipeline_creation_cache_control on RADV. +VK_GOOGLE_user_type on ANV and RADV. diff --git a/src/amd/vulkan/radv_extensions.py b/src/amd/vulkan/radv_extensions.py index 91c733f02ce..79ea1865403 100644 --- a/src/amd/vulkan/radv_extensions.py +++ b/src/amd/vulkan/radv_extensions.py @@ -182,6 +182,7 @@ EXTENSIONS = [ Extension('VK_AMD_texture_gather_bias_lod', 1, True), Extension('VK_GOOGLE_decorate_string', 1, True), Extension('VK_GOOGLE_hlsl_functionality1', 1, True), + Extension('VK_GOOGLE_user_type', 1, True), Extension('VK_NV_compute_shader_derivatives', 1, True), ] diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index aef1ecdbd00..425fbcbbe72 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -859,6 +859,7 @@ struct_member_decoration_cb(struct vtn_builder *b, break; case SpvDecorationUserSemantic: + case SpvDecorationUserTypeGOOGLE: /* User semantic decorations can safely be ignored by the driver. */ break; @@ -1040,6 +1041,10 @@ type_decoration_cb(struct vtn_builder *b, spirv_decoration_to_string(dec->decoration)); break; + case SpvDecorationUserTypeGOOGLE: + /* User semantic decorations can safely be ignored by the driver. */ + break; + default: vtn_fail_with_decoration("Unhandled decoration", dec->decoration); } diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c index 318df77669f..afe2aa89bbf 100644 --- a/src/compiler/spirv/vtn_variables.c +++ b/src/compiler/spirv/vtn_variables.c @@ -1677,6 +1677,7 @@ apply_var_decoration(struct vtn_builder *b, break; case SpvDecorationUserSemantic: + case SpvDecorationUserTypeGOOGLE: /* User semantic decorations can safely be ignored by the driver. */ break; diff --git a/src/intel/vulkan/anv_extensions.py b/src/intel/vulkan/anv_extensions.py index 251ca0f3495..82bdee9b90e 100644 --- a/src/intel/vulkan/anv_extensions.py +++ b/src/intel/vulkan/anv_extensions.py @@ -161,6 +161,7 @@ EXTENSIONS = [ Extension('VK_ANDROID_native_buffer', 7, 'ANDROID'), Extension('VK_GOOGLE_decorate_string', 1, True), Extension('VK_GOOGLE_hlsl_functionality1', 1, True), + Extension('VK_GOOGLE_user_type', 1, True), Extension('VK_INTEL_performance_query', 1, 'device->perf && device->perf->i915_perf_version >= 3'), Extension('VK_INTEL_shader_integer_functions2', 1, 'device->info.gen >= 8'), Extension('VK_NV_compute_shader_derivatives', 1, True), -- 2.30.2