From de711c910cf1d5d16e39911d18541862ce36c8e3 Mon Sep 17 00:00:00 2001 From: spencer-lunarg Date: Thu, 6 Jun 2024 19:47:36 -0500 Subject: [PATCH] layers: Fix VK_AMD_shader_fragment_mask --- layers/state_tracker/shader_module.cpp | 36 +++++++++++-------- .../vulkan/generated/spirv_grammar_helper.h | 2 ++ scripts/generators/spirv_grammar_generator.py | 3 ++ 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/layers/state_tracker/shader_module.cpp b/layers/state_tracker/shader_module.cpp index 954759c1a29..ef0ab76b2b3 100644 --- a/layers/state_tracker/shader_module.cpp +++ b/layers/state_tracker/shader_module.cpp @@ -372,6 +372,8 @@ static void FindPointersAndObjects(const Instruction& insn, vvl::unordered_setsecond) { const auto& image_access = *image_access_ptr; @@ -1982,6 +1988,8 @@ ResourceInterfaceVariable::ResourceInterfaceVariable(const Module& module_state, image_access_chain_indexes.insert(image_access.image_access_chain_index); } + const bool is_image_without_format = + ((is_sampled_without_sampler) && (base_type.Word(8) == spv::ImageFormatUnknown)); if (image_access.access_mask & AccessBit::image_write) { if (is_image_without_format) { info.is_write_without_format |= true; diff --git a/layers/vulkan/generated/spirv_grammar_helper.h b/layers/vulkan/generated/spirv_grammar_helper.h index dca766339a7..915512584ec 100644 --- a/layers/vulkan/generated/spirv_grammar_helper.h +++ b/layers/vulkan/generated/spirv_grammar_helper.h @@ -1102,6 +1102,8 @@ static constexpr uint32_t OpcodeImageAccessPosition(uint32_t opcode) { case spv::OpImageSparseGather: case spv::OpImageSparseDrefGather: case spv::OpImageSparseRead: + case spv::OpFragmentMaskFetchAMD: + case spv::OpFragmentFetchAMD: case spv::OpImageSampleFootprintNV: return 3; diff --git a/scripts/generators/spirv_grammar_generator.py b/scripts/generators/spirv_grammar_generator.py index 8334c57794b..f77c1e31ee6 100644 --- a/scripts/generators/spirv_grammar_generator.py +++ b/scripts/generators/spirv_grammar_generator.py @@ -234,6 +234,9 @@ def parseGrammar(self, grammar): self.imageAccessOperand[imageRef].append(opname) elif sampledImageRef != 0: self.imageAccessOperand[sampledImageRef].append(opname) + # exceptions that don't fit the OpImage naming + if opname == 'OpFragmentFetchAMD' or opname == 'OpFragmentMaskFetchAMD': + self.imageAccessOperand[3].append(opname) # We want to manually mark "Label" if an ID is used for Control Flow # It is easier to manage the few cases here then complex the operand logic above