refactor(recompiler): share the SPIR-V emission failure helper

Nine SPIR-V backend sources each defined an identical FailEmit in an
anonymous namespace. Declare it once in SpirvEmitterHelpers.hpp and
define it in SpirvEmitterHelpers.cpp; the message is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MBXJqzgohLeVAeHsn4Jpm7
This commit is contained in:
Claude committed 2026-10-07 06:05:14 +00:00
1 parent a9ec7be287
commit fb1ef4f404
10 files changed
+10 -39

No files matched your search

@@ -3,9 +3,11 @@
#include "SpirvBackend/SpirvEmitterState.hpp"
#include "Optimization/BindingAllocator.hpp"
#include <string>
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);
@@ -1,4 +1,5 @@
#include "SpirvBackend/SpirvMemory/SpirvBufferAccess.hpp"
#include "SpirvBackend/SpirvEmitterHelpers.hpp"
#include "SpirvBackend/SpirvMemory/SpirvTypes.hpp"
#include "SpirvBackend/SpirvMemory/SpirvDescriptors.hpp"
#include <spirv/unified1/spirv.hpp>
@@ -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:
@@ -1,4 +1,5 @@
#include "SpirvBackend/SpirvMemory/SpirvConstants.hpp"
#include "SpirvBackend/SpirvEmitterHelpers.hpp"
#include "SpirvBackend/SpirvMemory/SpirvTypes.hpp"
#include <spirv/unified1/spirv.hpp>
#include <stdexcept>
@@ -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);
@@ -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;
}
@@ -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");
@@ -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);
@@ -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;
}
@@ -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;
}
@@ -1,4 +1,5 @@
#include "SpirvBackend/SpirvEmitter.hpp"
#include "SpirvBackend/SpirvEmitterHelpers.hpp"
#include <spirv/unified1/spirv.hpp>
#include <stdexcept>
#include <string>
@@ -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");
@@ -1,4 +1,5 @@
#include "SpirvBackend/SpirvMemory/SpirvTypes.hpp"
#include "SpirvBackend/SpirvEmitterHelpers.hpp"
#include "SpirvBackend/SpirvMemory/SpirvConstants.hpp"
#include <spirv/unified1/spirv.hpp>
#include <stdexcept>
@@ -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,