From 84e61014a19c9e7e64bd20546e3aa8bcaa17a03b Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 10 Oct 2023 11:54:32 +0100 Subject: [PATCH] Add a SPIR-V editor helper to insert a sequence of operations at once --- renderdoc/driver/shaders/spirv/spirv_editor.cpp | 11 +++++++++++ renderdoc/driver/shaders/spirv/spirv_editor.h | 1 + renderdoc/driver/vulkan/vk_shader_feedback.cpp | 8 +------- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/renderdoc/driver/shaders/spirv/spirv_editor.cpp b/renderdoc/driver/shaders/spirv/spirv_editor.cpp index 19b5367c6..9e7e9d3e6 100644 --- a/renderdoc/driver/shaders/spirv/spirv_editor.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_editor.cpp @@ -472,6 +472,17 @@ Id Editor::AddOperation(Iter iter, const Operation &op) return OpDecoder(iter).result; } +Iter Editor::AddOperations(Iter iter, const OperationList &ops) +{ + for(const rdcspv::Operation &op : ops) + { + AddOperation(iter, op); + ++iter; + } + + return iter; +} + void Editor::RegisterOp(Iter it) { Processor::RegisterOp(it); diff --git a/renderdoc/driver/shaders/spirv/spirv_editor.h b/renderdoc/driver/shaders/spirv/spirv_editor.h index 4246fc599..431c8e9a4 100644 --- a/renderdoc/driver/shaders/spirv/spirv_editor.h +++ b/renderdoc/driver/shaders/spirv/spirv_editor.h @@ -76,6 +76,7 @@ public: Id MakeId(); Id AddOperation(Iter iter, const Operation &op); + Iter AddOperations(Iter iter, const OperationList &ops); // callbacks to allow us to update our internal structures over changes diff --git a/renderdoc/driver/vulkan/vk_shader_feedback.cpp b/renderdoc/driver/vulkan/vk_shader_feedback.cpp index eef6cf266..efa1ce633 100644 --- a/renderdoc/driver/vulkan/vk_shader_feedback.cpp +++ b/renderdoc/driver/vulkan/vk_shader_feedback.cpp @@ -975,13 +975,7 @@ void AnnotateShader(const ShaderReflection &refl, const SPIRVPatchData &patchDat ++it; if(funcId == entryID) - { - for(const rdcspv::Operation &op : locationGather) - { - editor.AddOperation(it, op); - ++it; - } - } + editor.AddOperations(it, locationGather); // now patch accesses in the function body for(; it; ++it)