diff --git a/core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterHelpers.hpp b/core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterHelpers.hpp index 201f4f9ae0..caec0c7bb6 100644 --- a/core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterHelpers.hpp +++ b/core/shader/recompiler/SpirvBackend/include/SpirvBackend/SpirvEmitterHelpers.hpp @@ -3,9 +3,11 @@ #include "SpirvBackend/SpirvEmitterState.hpp" #include "Optimization/BindingAllocator.hpp" +#include namespace ShaderRecompiler { +[[noreturn]] void FailEmit(const std::string& reason); const RdnaImageDimensionInfo& RdnaImageDimensionInfoFor(RdnaImageDimension dimension); std::uint32_t TypeVoid(SpirvEmitterState& state); std::uint32_t TypeBool(SpirvEmitterState& state); diff --git a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvBufferAccess.cpp b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvBufferAccess.cpp index 9c7ee72285..b63540f834 100644 --- a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvBufferAccess.cpp +++ b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvBufferAccess.cpp @@ -1,4 +1,5 @@ #include "SpirvBackend/SpirvMemory/SpirvBufferAccess.hpp" +#include "SpirvBackend/SpirvEmitterHelpers.hpp" #include "SpirvBackend/SpirvMemory/SpirvTypes.hpp" #include "SpirvBackend/SpirvMemory/SpirvDescriptors.hpp" #include @@ -11,10 +12,6 @@ namespace ShaderRecompiler { namespace { - [[noreturn]] void FailEmit(const std::string& reason) { - throw std::runtime_error("SPIR-V module emission failed: " + reason); - } - const ShaderWorkgroupInputInfo* ShaderWorkgroupInput(const SpirvEmitterState& state) { switch (state.program.Resources().stage) { case IrShaderStage::Compute: diff --git a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvConstants.cpp b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvConstants.cpp index ab2d368b08..c4a0e26277 100644 --- a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvConstants.cpp +++ b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvConstants.cpp @@ -1,4 +1,5 @@ #include "SpirvBackend/SpirvMemory/SpirvConstants.hpp" +#include "SpirvBackend/SpirvEmitterHelpers.hpp" #include "SpirvBackend/SpirvMemory/SpirvTypes.hpp" #include #include @@ -6,14 +7,6 @@ namespace ShaderRecompiler { -namespace { - -[[noreturn]] void FailEmit(const std::string& reason) { - throw std::runtime_error("SPIR-V module emission failed: " + reason); -} - -} - std::uint32_t ConstantU32(SpirvEmitterState& state, std::uint32_t value) { return state.module.Constant(spv::OpConstant, TypeU32(state), value); diff --git a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvDescriptors.cpp b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvDescriptors.cpp index b0fee41fa6..0fe12f8efc 100644 --- a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvDescriptors.cpp +++ b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvDescriptors.cpp @@ -12,10 +12,6 @@ namespace ShaderRecompiler { namespace { -[[noreturn]] void FailEmit(const std::string& reason) { - throw std::runtime_error("SPIR-V module emission failed: " + reason); -} - IrShaderStage StageOf(const SpirvEmitterState& state) { return state.program.Resources().stage; } diff --git a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp index c7b0c1c01c..0edb9069a5 100644 --- a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp +++ b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvEmitterHelpers.cpp @@ -12,12 +12,12 @@ namespace ShaderRecompiler { -namespace { - -[[noreturn]] void FailEmit(const std::string& reason) { +void FailEmit(const std::string& reason) { throw std::runtime_error("SPIR-V module emission failed: " + reason); } +namespace { + const ShaderPixelInputInfo& PixelInfo(const SpirvEmitterState& state) { if (state.inputInfo.pixel == nullptr) { FailEmit("pixel input info is missing"); diff --git a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvFormatConvert.cpp b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvFormatConvert.cpp index 0a12e65f2f..c2497d5f54 100644 --- a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvFormatConvert.cpp +++ b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvFormatConvert.cpp @@ -15,10 +15,6 @@ namespace ShaderRecompiler { namespace { - [[noreturn]] void FailEmit(const std::string& reason) { - throw std::runtime_error("SPIR-V module emission failed: " + reason); - } - std::uint32_t UnormToF32Bits(SpirvEmitterState& state, std::uint32_t value, std::uint32_t bits) { const std::uint32_t maximum = (1u << bits) - 1u; const auto zero = EmitCompareU32Constant(state, spv::OpIEqual, value, 0u); diff --git a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvInputOutput.cpp b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvInputOutput.cpp index 6ee03acfa5..a4e5517358 100644 --- a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvInputOutput.cpp +++ b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvInputOutput.cpp @@ -1,4 +1,5 @@ #include "SpirvBackend/SpirvMemory/SpirvInputOutput.hpp" +#include "SpirvBackend/SpirvEmitterHelpers.hpp" #include "SpirvBackend/SpirvMemory/SpirvTypes.hpp" #include "SpirvBackend/SpirvMemory/SpirvSubgroup.hpp" #include "SpirvBackend/SpirvMemory/SpirvBufferAccess.hpp" @@ -18,10 +19,6 @@ namespace ShaderRecompiler constexpr std::uint32_t PsInputFlatShade = 0x00000400u; constexpr std::uint32_t PixelParameterLimit = 32u; - [[noreturn]] void FailEmit(const std::string& reason) { - throw std::runtime_error("SPIR-V module emission failed: " + reason); - } - IrShaderStage StageOf(const SpirvEmitterState& state) { return state.program.Resources().stage; } diff --git a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvModuleSetup.cpp b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvModuleSetup.cpp index 9100ce94ff..9b42dde319 100644 --- a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvModuleSetup.cpp +++ b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvModuleSetup.cpp @@ -12,10 +12,6 @@ namespace ShaderRecompiler { namespace { -[[noreturn]] void FailEmit(const std::string& reason) { - throw std::runtime_error("SPIR-V module emission failed: " + reason); -} - IrShaderStage StageOf(const SpirvEmitterState& state) { return state.program.Resources().stage; } diff --git a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvSubgroup.cpp b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvSubgroup.cpp index 6532d500d8..cde24c0baa 100644 --- a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvSubgroup.cpp +++ b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvSubgroup.cpp @@ -1,4 +1,5 @@ #include "SpirvBackend/SpirvEmitter.hpp" +#include "SpirvBackend/SpirvEmitterHelpers.hpp" #include #include #include @@ -13,10 +14,6 @@ namespace ShaderRecompiler namespace { - [[noreturn]] void FailEmit(const std::string& reason) { - throw std::runtime_error("SPIR-V module emission failed: " + reason); - } - std::uint32_t HostInvocationId(SpirvEmitterState& state) { if (state.subgroupLocalInvocationIdVariable == 0) { FailEmit("SubgroupLocalInvocationId was not declared before function emission"); diff --git a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvTypes.cpp b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvTypes.cpp index acefd6b607..bdc7ced720 100644 --- a/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvTypes.cpp +++ b/core/shader/recompiler/SpirvBackend/src/SpirvMemory/SpirvTypes.cpp @@ -1,4 +1,5 @@ #include "SpirvBackend/SpirvMemory/SpirvTypes.hpp" +#include "SpirvBackend/SpirvEmitterHelpers.hpp" #include "SpirvBackend/SpirvMemory/SpirvConstants.hpp" #include #include @@ -8,10 +9,6 @@ namespace ShaderRecompiler { namespace { -[[noreturn]] void FailEmit(const std::string& reason) { - throw std::runtime_error("SPIR-V module emission failed: " + reason); -} - std::uint32_t StorageBufferType(SpirvEmitterState& state) { const auto array = state.module.DecoratedType(spv::OpTypeRuntimeArray, {{spv::OpDecorate, {spv::DecorationArrayStride, 4u}}}, TypeU32(state)); return state.module.DecoratedType(spv::OpTypeStruct,