From eb6aa25d166b994b87ca709cf38f8a4ad40a4c16 Mon Sep 17 00:00:00 2001 From: Caio Oliveira Date: Wed, 21 Sep 2022 13:43:56 -0700 Subject: [PATCH] spirv: Make a helper function to check glslang/shaderc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When deciding on workarounds that apply to GLSLang we should also check for ShaderC (when using glslang). Add a helper to do that and reuse in the three places we check for it. This patch will now consider shaderc for wa_glslang_cs_barrier workaround. Suggested by Timur Kristóf. Reviewed-by: Timur Kristóf Part-of: --- src/compiler/spirv/spirv_to_nir.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 680e19dcbc0..58de19695d6 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -6305,6 +6305,13 @@ vtn_handle_body_instruction(struct vtn_builder *b, SpvOp opcode, return true; } +static bool +is_glslang(const struct vtn_builder *b) +{ + return b->generator_id == vtn_generator_glslang_reference_front_end || + b->generator_id == vtn_generator_shaderc_over_glslang; +} + struct vtn_builder* vtn_create_builder(const uint32_t *words, size_t word_count, gl_shader_stage stage, const char *entry_point_name, @@ -6352,9 +6359,7 @@ vtn_create_builder(const uint32_t *words, size_t word_count, * commands. Prior to that, we need to fix them up ourselves. This * GLSLang fix caused them to bump to generator version 3. */ - b->wa_glslang_cs_barrier = - (b->generator_id == vtn_generator_glslang_reference_front_end && - generator_version < 3); + b->wa_glslang_cs_barrier = is_glslang(b) && generator_version < 3; /* Identifying the LLVM-SPIRV translator: * @@ -6386,9 +6391,7 @@ vtn_create_builder(const uint32_t *words, size_t word_count, * See https://github.com/KhronosGroup/glslang/issues/3020 for details. */ b->wa_ignore_return_after_emit_mesh_tasks = - (b->generator_id == vtn_generator_glslang_reference_front_end || - b->generator_id == vtn_generator_shaderc_over_glslang) && - generator_version < 11; + is_glslang(b) && generator_version < 11; /* words[2] == generator magic */ unsigned value_id_bound = words[3]; @@ -6531,11 +6534,9 @@ spirv_to_nir(const uint32_t *words, size_t word_count, * * Related glslang issue: https://github.com/KhronosGroup/glslang/issues/2416 */ - bool glslang = b->generator_id == vtn_generator_glslang_reference_front_end || - b->generator_id == vtn_generator_shaderc_over_glslang; bool dxsc = b->generator_id == vtn_generator_spiregg; b->convert_discard_to_demote = ((dxsc && !b->uses_demote_to_helper_invocation) || - (glslang && b->source_lang == SpvSourceLanguageHLSL)) && + (is_glslang(b) && b->source_lang == SpvSourceLanguageHLSL)) && options->caps.demote_to_helper_invocation; if (!options->create_library && b->entry_point == NULL) {