From 54cd5e1963b399e6c6d3c5b70da45583d9f9fed8 Mon Sep 17 00:00:00 2001 From: Pankaj Mistry <63069047+pmistryNV@users.noreply.github.com> Date: Fri, 29 Jul 2022 12:28:27 -0700 Subject: [PATCH] spirv-opt : SPV_NV_bindless_texture related changes (#4870) --- source/opt/ir_loader.cpp | 2 ++ source/opt/module.cpp | 5 +++++ source/opt/module.h | 19 ++++++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/source/opt/ir_loader.cpp b/source/opt/ir_loader.cpp index 97db9d8f7..734ad554b 100644 --- a/source/opt/ir_loader.cpp +++ b/source/opt/ir_loader.cpp @@ -187,6 +187,8 @@ bool IrLoader::AddInstruction(const spv_parsed_instruction_t* inst) { module_->AddExtInstImport(std::move(spv_inst)); } else if (opcode == SpvOpMemoryModel) { module_->SetMemoryModel(std::move(spv_inst)); + } else if (opcode == SpvOpSamplerImageAddressingModeNV) { + module_->SetSampledImageAddressMode(std::move(spv_inst)); } else if (opcode == SpvOpEntryPoint) { module_->AddEntryPoint(std::move(spv_inst)); } else if (opcode == SpvOpExecutionMode || diff --git a/source/opt/module.cpp b/source/opt/module.cpp index 5983abb12..c98af8f51 100644 --- a/source/opt/module.cpp +++ b/source/opt/module.cpp @@ -90,6 +90,8 @@ void Module::ForEachInst(const std::function& f, DELEGATE(extensions_); DELEGATE(ext_inst_imports_); if (memory_model_) memory_model_->ForEachInst(f, run_on_debug_line_insts); + if (sampled_image_address_mode_) + sampled_image_address_mode_->ForEachInst(f, run_on_debug_line_insts); DELEGATE(entry_points_); DELEGATE(execution_modes_); DELEGATE(debugs1_); @@ -114,6 +116,9 @@ void Module::ForEachInst(const std::function& f, if (memory_model_) static_cast(memory_model_.get()) ->ForEachInst(f, run_on_debug_line_insts); + if (sampled_image_address_mode_) + static_cast(sampled_image_address_mode_.get()) + ->ForEachInst(f, run_on_debug_line_insts); for (auto& i : entry_points_) DELEGATE(i); for (auto& i : execution_modes_) DELEGATE(i); for (auto& i : debugs1_) DELEGATE(i); diff --git a/source/opt/module.h b/source/opt/module.h index 230be7095..7a6be460e 100644 --- a/source/opt/module.h +++ b/source/opt/module.h @@ -83,6 +83,9 @@ class Module { // Set the memory model for this module. inline void SetMemoryModel(std::unique_ptr m); + // Set the sampled image addressing mode for this module. + inline void SetSampledImageAddressMode(std::unique_ptr m); + // Appends an entry point instruction to this module. inline void AddEntryPoint(std::unique_ptr e); @@ -158,12 +161,20 @@ class Module { inline IteratorRange ext_inst_imports(); inline IteratorRange ext_inst_imports() const; - // Return the memory model instruction contained inthis module. + // Return the memory model instruction contained in this module. inline Instruction* GetMemoryModel() { return memory_model_.get(); } inline const Instruction* GetMemoryModel() const { return memory_model_.get(); } + // Return the sampled image address mode instruction contained in this module. + inline Instruction* GetSampledImageAddressMode() { + return sampled_image_address_mode_.get(); + } + inline const Instruction* GetSampledImageAddressMode() const { + return sampled_image_address_mode_.get(); + } + // There are several kinds of debug instructions, according to where they can // appear in the logical layout of a module: // - Section 7a: OpString, OpSourceExtension, OpSource, OpSourceContinued @@ -288,6 +299,8 @@ class Module { InstructionList ext_inst_imports_; // A module only has one memory model instruction. std::unique_ptr memory_model_; + // A module can only have one optional sampled image addressing mode + std::unique_ptr sampled_image_address_mode_; InstructionList entry_points_; InstructionList execution_modes_; InstructionList debugs1_; @@ -326,6 +339,10 @@ inline void Module::SetMemoryModel(std::unique_ptr m) { memory_model_ = std::move(m); } +inline void Module::SetSampledImageAddressMode(std::unique_ptr m) { + sampled_image_address_mode_ = std::move(m); +} + inline void Module::AddEntryPoint(std::unique_ptr e) { entry_points_.push_back(std::move(e)); }