summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/shader_recompiler/backend/glsl/emit_glsl.cpp8
-rw-r--r--src/shader_recompiler/backend/glsl/emit_glsl_bitwise_conversion.cpp4
-rw-r--r--src/shader_recompiler/backend/glsl/emit_glsl_context_get_set.cpp4
-rw-r--r--src/shader_recompiler/backend/glsl/emit_glsl_instructions.h162
-rw-r--r--src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp88
-rw-r--r--src/shader_recompiler/backend/glsl/emit_glsl_not_implemented.cpp74
6 files changed, 169 insertions, 171 deletions
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl.cpp b/src/shader_recompiler/backend/glsl/emit_glsl.cpp
index 77c93146e..0f528b027 100644
--- a/src/shader_recompiler/backend/glsl/emit_glsl.cpp
+++ b/src/shader_recompiler/backend/glsl/emit_glsl.cpp
@@ -37,8 +37,6 @@ template <typename ArgType>
37ArgType Arg(EmitContext& ctx, const IR::Value& arg) { 37ArgType Arg(EmitContext& ctx, const IR::Value& arg) {
38 if constexpr (std::is_same_v<ArgType, std::string>) { 38 if constexpr (std::is_same_v<ArgType, std::string>) {
39 return ctx.reg_alloc.Consume(arg); 39 return ctx.reg_alloc.Consume(arg);
40 } else if constexpr (std::is_same_v<ArgType, IR::Inst&>) {
41 return *arg.Inst();
42 } else if constexpr (std::is_same_v<ArgType, const IR::Value&>) { 40 } else if constexpr (std::is_same_v<ArgType, const IR::Value&>) {
43 return arg; 41 return arg;
44 } else if constexpr (std::is_same_v<ArgType, u32>) { 42 } else if constexpr (std::is_same_v<ArgType, u32>) {
@@ -58,7 +56,7 @@ void Invoke(EmitContext& ctx, IR::Inst* inst, std::index_sequence<I...>) {
58 if constexpr (std::is_same_v<typename Traits::ReturnType, Id>) { 56 if constexpr (std::is_same_v<typename Traits::ReturnType, Id>) {
59 if constexpr (is_first_arg_inst) { 57 if constexpr (is_first_arg_inst) {
60 SetDefinition<func>( 58 SetDefinition<func>(
61 ctx, inst, inst, 59 ctx, inst, *inst,
62 Arg<typename Traits::template ArgType<I + 2>>(ctx, inst->Arg(I))...); 60 Arg<typename Traits::template ArgType<I + 2>>(ctx, inst->Arg(I))...);
63 } else { 61 } else {
64 SetDefinition<func>( 62 SetDefinition<func>(
@@ -66,7 +64,7 @@ void Invoke(EmitContext& ctx, IR::Inst* inst, std::index_sequence<I...>) {
66 } 64 }
67 } else { 65 } else {
68 if constexpr (is_first_arg_inst) { 66 if constexpr (is_first_arg_inst) {
69 func(ctx, inst, Arg<typename Traits::template ArgType<I + 2>>(ctx, inst->Arg(I))...); 67 func(ctx, *inst, Arg<typename Traits::template ArgType<I + 2>>(ctx, inst->Arg(I))...);
70 } else { 68 } else {
71 func(ctx, Arg<typename Traits::template ArgType<I + 1>>(ctx, inst->Arg(I))...); 69 func(ctx, Arg<typename Traits::template ArgType<I + 1>>(ctx, inst->Arg(I))...);
72 } 70 }
@@ -81,7 +79,7 @@ void Invoke(EmitContext& ctx, IR::Inst* inst) {
81 Invoke<func, false>(ctx, inst, std::make_index_sequence<0>{}); 79 Invoke<func, false>(ctx, inst, std::make_index_sequence<0>{});
82 } else { 80 } else {
83 using FirstArgType = typename Traits::template ArgType<1>; 81 using FirstArgType = typename Traits::template ArgType<1>;
84 static constexpr bool is_first_arg_inst = std::is_same_v<FirstArgType, IR::Inst*>; 82 static constexpr bool is_first_arg_inst = std::is_same_v<FirstArgType, IR::Inst&>;
85 using Indices = std::make_index_sequence<Traits::NUM_ARGS - (is_first_arg_inst ? 2 : 1)>; 83 using Indices = std::make_index_sequence<Traits::NUM_ARGS - (is_first_arg_inst ? 2 : 1)>;
86 Invoke<func, is_first_arg_inst>(ctx, inst, Indices{}); 84 Invoke<func, is_first_arg_inst>(ctx, inst, Indices{});
87 } 85 }
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_bitwise_conversion.cpp b/src/shader_recompiler/backend/glsl/emit_glsl_bitwise_conversion.cpp
index 7c654e4e7..f40f9900c 100644
--- a/src/shader_recompiler/backend/glsl/emit_glsl_bitwise_conversion.cpp
+++ b/src/shader_recompiler/backend/glsl/emit_glsl_bitwise_conversion.cpp
@@ -22,7 +22,7 @@ static void Alias(IR::Inst& inst, const IR::Value& value) {
22} 22}
23} // namespace 23} // namespace
24 24
25void EmitIdentity(EmitContext&, IR::Inst* inst, const IR::Value& value) { 25void EmitIdentity(EmitContext&, IR::Inst& inst, const IR::Value& value) {
26 Alias(*inst, value); 26 Alias(inst, value);
27} 27}
28} // namespace Shader::Backend::GLSL 28} // namespace Shader::Backend::GLSL
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_context_get_set.cpp b/src/shader_recompiler/backend/glsl/emit_glsl_context_get_set.cpp
index ff04cffd2..2f4ecd6a1 100644
--- a/src/shader_recompiler/backend/glsl/emit_glsl_context_get_set.cpp
+++ b/src/shader_recompiler/backend/glsl/emit_glsl_context_get_set.cpp
@@ -30,10 +30,10 @@ void EmitGetCbufS16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] const IR
30 throw NotImplementedException("GLSL"); 30 throw NotImplementedException("GLSL");
31} 31}
32 32
33void EmitGetCbufU32(EmitContext& ctx, IR::Inst* inst, const IR::Value& binding, 33void EmitGetCbufU32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
34 const IR::Value& offset) { 34 const IR::Value& offset) {
35 const auto u32_offset{offset.U32()}; 35 const auto u32_offset{offset.U32()};
36 ctx.AddU32("{}=floatBitsToUint(cbuf{}[{}][{}]);", *inst, binding.U32(), u32_offset / 16, 36 ctx.AddU32("{}=floatBitsToUint(cbuf{}[{}][{}]);", inst, binding.U32(), u32_offset / 16,
37 (u32_offset / 4) % 4); 37 (u32_offset / 4) % 4);
38} 38}
39 39
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_instructions.h b/src/shader_recompiler/backend/glsl/emit_glsl_instructions.h
index 550193dc3..681e0bdb9 100644
--- a/src/shader_recompiler/backend/glsl/emit_glsl_instructions.h
+++ b/src/shader_recompiler/backend/glsl/emit_glsl_instructions.h
@@ -25,9 +25,9 @@ inline void EmitSetLoopSafetyVariable(EmitContext&) {}
25inline void EmitGetLoopSafetyVariable(EmitContext&) {} 25inline void EmitGetLoopSafetyVariable(EmitContext&) {}
26 26
27// Microinstruction emitters 27// Microinstruction emitters
28void EmitPhi(EmitContext& ctx, IR::Inst* inst); 28void EmitPhi(EmitContext& ctx, IR::Inst& inst);
29void EmitVoid(EmitContext& ctx); 29void EmitVoid(EmitContext& ctx);
30void EmitIdentity(EmitContext& ctx, IR::Inst* inst, const IR::Value& value); 30void EmitIdentity(EmitContext& ctx, IR::Inst& inst, const IR::Value& value);
31void EmitConditionRef(EmitContext& ctx, IR::Inst& inst, const IR::Value& value); 31void EmitConditionRef(EmitContext& ctx, IR::Inst& inst, const IR::Value& value);
32void EmitReference(EmitContext&); 32void EmitReference(EmitContext&);
33void EmitPhiMove(EmitContext& ctx, const IR::Value& phi, const IR::Value& value); 33void EmitPhiMove(EmitContext& ctx, const IR::Value& phi, const IR::Value& value);
@@ -59,7 +59,7 @@ void EmitGetCbufU8(EmitContext& ctx, const IR::Value& binding, const IR::Value&
59void EmitGetCbufS8(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset); 59void EmitGetCbufS8(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
60void EmitGetCbufU16(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset); 60void EmitGetCbufU16(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
61void EmitGetCbufS16(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset); 61void EmitGetCbufS16(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
62void EmitGetCbufU32(EmitContext& ctx, IR::Inst* inst, const IR::Value& binding, 62void EmitGetCbufU32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding,
63 const IR::Value& offset); 63 const IR::Value& offset);
64void EmitGetCbufF32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset); 64void EmitGetCbufF32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
65void EmitGetCbufU32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset); 65void EmitGetCbufU32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
@@ -231,19 +231,19 @@ void EmitGetInBoundsFromOp(EmitContext& ctx);
231void EmitFPAbs16(EmitContext& ctx, std::string value); 231void EmitFPAbs16(EmitContext& ctx, std::string value);
232void EmitFPAbs32(EmitContext& ctx, std::string value); 232void EmitFPAbs32(EmitContext& ctx, std::string value);
233void EmitFPAbs64(EmitContext& ctx, std::string value); 233void EmitFPAbs64(EmitContext& ctx, std::string value);
234void EmitFPAdd16(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 234void EmitFPAdd16(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
235void EmitFPAdd32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 235void EmitFPAdd32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
236void EmitFPAdd64(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 236void EmitFPAdd64(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
237void EmitFPFma16(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b, std::string c); 237void EmitFPFma16(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b, std::string c);
238void EmitFPFma32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b, std::string c); 238void EmitFPFma32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b, std::string c);
239void EmitFPFma64(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b, std::string c); 239void EmitFPFma64(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b, std::string c);
240void EmitFPMax32(EmitContext& ctx, std::string a, std::string b); 240void EmitFPMax32(EmitContext& ctx, std::string a, std::string b);
241void EmitFPMax64(EmitContext& ctx, std::string a, std::string b); 241void EmitFPMax64(EmitContext& ctx, std::string a, std::string b);
242void EmitFPMin32(EmitContext& ctx, std::string a, std::string b); 242void EmitFPMin32(EmitContext& ctx, std::string a, std::string b);
243void EmitFPMin64(EmitContext& ctx, std::string a, std::string b); 243void EmitFPMin64(EmitContext& ctx, std::string a, std::string b);
244void EmitFPMul16(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 244void EmitFPMul16(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
245void EmitFPMul32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 245void EmitFPMul32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
246void EmitFPMul64(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 246void EmitFPMul64(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
247void EmitFPNeg16(EmitContext& ctx, std::string value); 247void EmitFPNeg16(EmitContext& ctx, std::string value);
248void EmitFPNeg32(EmitContext& ctx, std::string value); 248void EmitFPNeg32(EmitContext& ctx, std::string value);
249void EmitFPNeg64(EmitContext& ctx, std::string value); 249void EmitFPNeg64(EmitContext& ctx, std::string value);
@@ -316,55 +316,55 @@ void EmitFPUnordGreaterThanEqual64(EmitContext& ctx, std::string lhs, std::strin
316void EmitFPIsNan16(EmitContext& ctx, std::string value); 316void EmitFPIsNan16(EmitContext& ctx, std::string value);
317void EmitFPIsNan32(EmitContext& ctx, std::string value); 317void EmitFPIsNan32(EmitContext& ctx, std::string value);
318void EmitFPIsNan64(EmitContext& ctx, std::string value); 318void EmitFPIsNan64(EmitContext& ctx, std::string value);
319void EmitIAdd32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 319void EmitIAdd32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
320void EmitIAdd64(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 320void EmitIAdd64(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
321void EmitISub32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 321void EmitISub32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
322void EmitISub64(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 322void EmitISub64(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
323void EmitIMul32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 323void EmitIMul32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
324void EmitINeg32(EmitContext& ctx, IR::Inst* inst, std::string value); 324void EmitINeg32(EmitContext& ctx, IR::Inst& inst, std::string value);
325void EmitINeg64(EmitContext& ctx, IR::Inst* inst, std::string value); 325void EmitINeg64(EmitContext& ctx, IR::Inst& inst, std::string value);
326void EmitIAbs32(EmitContext& ctx, IR::Inst* inst, std::string value); 326void EmitIAbs32(EmitContext& ctx, IR::Inst& inst, std::string value);
327void EmitIAbs64(EmitContext& ctx, IR::Inst* inst, std::string value); 327void EmitIAbs64(EmitContext& ctx, IR::Inst& inst, std::string value);
328void EmitShiftLeftLogical32(EmitContext& ctx, IR::Inst* inst, std::string base, std::string shift); 328void EmitShiftLeftLogical32(EmitContext& ctx, IR::Inst& inst, std::string base, std::string shift);
329void EmitShiftLeftLogical64(EmitContext& ctx, IR::Inst* inst, std::string base, std::string shift); 329void EmitShiftLeftLogical64(EmitContext& ctx, IR::Inst& inst, std::string base, std::string shift);
330void EmitShiftRightLogical32(EmitContext& ctx, IR::Inst* inst, std::string base, std::string shift); 330void EmitShiftRightLogical32(EmitContext& ctx, IR::Inst& inst, std::string base, std::string shift);
331void EmitShiftRightLogical64(EmitContext& ctx, IR::Inst* inst, std::string base, std::string shift); 331void EmitShiftRightLogical64(EmitContext& ctx, IR::Inst& inst, std::string base, std::string shift);
332void EmitShiftRightArithmetic32(EmitContext& ctx, IR::Inst* inst, std::string base, 332void EmitShiftRightArithmetic32(EmitContext& ctx, IR::Inst& inst, std::string base,
333 std::string shift); 333 std::string shift);
334void EmitShiftRightArithmetic64(EmitContext& ctx, IR::Inst* inst, std::string base, 334void EmitShiftRightArithmetic64(EmitContext& ctx, IR::Inst& inst, std::string base,
335 std::string shift); 335 std::string shift);
336void EmitBitwiseAnd32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 336void EmitBitwiseAnd32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
337void EmitBitwiseOr32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 337void EmitBitwiseOr32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
338void EmitBitwiseXor32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 338void EmitBitwiseXor32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
339void EmitBitFieldInsert(EmitContext& ctx, IR::Inst* inst, std::string base, std::string insert, 339void EmitBitFieldInsert(EmitContext& ctx, IR::Inst& inst, std::string base, std::string insert,
340 std::string offset, std::string count); 340 std::string offset, std::string count);
341void EmitBitFieldSExtract(EmitContext& ctx, IR::Inst* inst, std::string base, std::string offset, 341void EmitBitFieldSExtract(EmitContext& ctx, IR::Inst& inst, std::string base, std::string offset,
342 std::string count); 342 std::string count);
343void EmitBitFieldUExtract(EmitContext& ctx, IR::Inst* inst, std::string base, std::string offset, 343void EmitBitFieldUExtract(EmitContext& ctx, IR::Inst& inst, std::string base, std::string offset,
344 std::string count); 344 std::string count);
345void EmitBitReverse32(EmitContext& ctx, IR::Inst* inst, std::string value); 345void EmitBitReverse32(EmitContext& ctx, IR::Inst& inst, std::string value);
346void EmitBitCount32(EmitContext& ctx, IR::Inst* inst, std::string value); 346void EmitBitCount32(EmitContext& ctx, IR::Inst& inst, std::string value);
347void EmitBitwiseNot32(EmitContext& ctx, IR::Inst* inst, std::string value); 347void EmitBitwiseNot32(EmitContext& ctx, IR::Inst& inst, std::string value);
348void EmitFindSMsb32(EmitContext& ctx, IR::Inst* inst, std::string value); 348void EmitFindSMsb32(EmitContext& ctx, IR::Inst& inst, std::string value);
349void EmitFindUMsb32(EmitContext& ctx, IR::Inst* inst, std::string value); 349void EmitFindUMsb32(EmitContext& ctx, IR::Inst& inst, std::string value);
350void EmitSMin32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 350void EmitSMin32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
351void EmitUMin32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 351void EmitUMin32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
352void EmitSMax32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 352void EmitSMax32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
353void EmitUMax32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b); 353void EmitUMax32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b);
354void EmitSClamp32(EmitContext& ctx, IR::Inst* inst, std::string value, std::string min, 354void EmitSClamp32(EmitContext& ctx, IR::Inst& inst, std::string value, std::string min,
355 std::string max); 355 std::string max);
356void EmitUClamp32(EmitContext& ctx, IR::Inst* inst, std::string value, std::string min, 356void EmitUClamp32(EmitContext& ctx, IR::Inst& inst, std::string value, std::string min,
357 std::string max); 357 std::string max);
358void EmitSLessThan(EmitContext& ctx, IR::Inst* inst, std::string lhs, std::string rhs); 358void EmitSLessThan(EmitContext& ctx, IR::Inst& inst, std::string lhs, std::string rhs);
359void EmitULessThan(EmitContext& ctx, IR::Inst* inst, std::string lhs, std::string rhs); 359void EmitULessThan(EmitContext& ctx, IR::Inst& inst, std::string lhs, std::string rhs);
360void EmitIEqual(EmitContext& ctx, IR::Inst* inst, std::string lhs, std::string rhs); 360void EmitIEqual(EmitContext& ctx, IR::Inst& inst, std::string lhs, std::string rhs);
361void EmitSLessThanEqual(EmitContext& ctx, IR::Inst* inst, std::string lhs, std::string rhs); 361void EmitSLessThanEqual(EmitContext& ctx, IR::Inst& inst, std::string lhs, std::string rhs);
362void EmitULessThanEqual(EmitContext& ctx, IR::Inst* inst, std::string lhs, std::string rhs); 362void EmitULessThanEqual(EmitContext& ctx, IR::Inst& inst, std::string lhs, std::string rhs);
363void EmitSGreaterThan(EmitContext& ctx, IR::Inst* inst, std::string lhs, std::string rhs); 363void EmitSGreaterThan(EmitContext& ctx, IR::Inst& inst, std::string lhs, std::string rhs);
364void EmitUGreaterThan(EmitContext& ctx, IR::Inst* inst, std::string lhs, std::string rhs); 364void EmitUGreaterThan(EmitContext& ctx, IR::Inst& inst, std::string lhs, std::string rhs);
365void EmitINotEqual(EmitContext& ctx, IR::Inst* inst, std::string lhs, std::string rhs); 365void EmitINotEqual(EmitContext& ctx, IR::Inst& inst, std::string lhs, std::string rhs);
366void EmitSGreaterThanEqual(EmitContext& ctx, IR::Inst* inst, std::string lhs, std::string rhs); 366void EmitSGreaterThanEqual(EmitContext& ctx, IR::Inst& inst, std::string lhs, std::string rhs);
367void EmitUGreaterThanEqual(EmitContext& ctx, IR::Inst* inst, std::string lhs, std::string rhs); 367void EmitUGreaterThanEqual(EmitContext& ctx, IR::Inst& inst, std::string lhs, std::string rhs);
368void EmitSharedAtomicIAdd32(EmitContext& ctx, std::string pointer_offset, std::string value); 368void EmitSharedAtomicIAdd32(EmitContext& ctx, std::string pointer_offset, std::string value);
369void EmitSharedAtomicSMin32(EmitContext& ctx, std::string pointer_offset, std::string value); 369void EmitSharedAtomicSMin32(EmitContext& ctx, std::string pointer_offset, std::string value);
370void EmitSharedAtomicUMin32(EmitContext& ctx, std::string pointer_offset, std::string value); 370void EmitSharedAtomicUMin32(EmitContext& ctx, std::string pointer_offset, std::string value);
@@ -536,31 +536,31 @@ void EmitBoundImageQueryLod(EmitContext&);
536void EmitBoundImageGradient(EmitContext&); 536void EmitBoundImageGradient(EmitContext&);
537void EmitBoundImageRead(EmitContext&); 537void EmitBoundImageRead(EmitContext&);
538void EmitBoundImageWrite(EmitContext&); 538void EmitBoundImageWrite(EmitContext&);
539void EmitImageSampleImplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 539void EmitImageSampleImplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
540 std::string coords, std::string bias_lc, const IR::Value& offset); 540 std::string coords, std::string bias_lc, const IR::Value& offset);
541void EmitImageSampleExplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 541void EmitImageSampleExplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
542 std::string coords, std::string lod_lc, const IR::Value& offset); 542 std::string coords, std::string lod_lc, const IR::Value& offset);
543void EmitImageSampleDrefImplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 543void EmitImageSampleDrefImplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
544 std::string coords, std::string dref, std::string bias_lc, 544 std::string coords, std::string dref, std::string bias_lc,
545 const IR::Value& offset); 545 const IR::Value& offset);
546void EmitImageSampleDrefExplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 546void EmitImageSampleDrefExplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
547 std::string coords, std::string dref, std::string lod_lc, 547 std::string coords, std::string dref, std::string lod_lc,
548 const IR::Value& offset); 548 const IR::Value& offset);
549void EmitImageGather(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, std::string coords, 549void EmitImageGather(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, std::string coords,
550 const IR::Value& offset, const IR::Value& offset2); 550 const IR::Value& offset, const IR::Value& offset2);
551void EmitImageGatherDref(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 551void EmitImageGatherDref(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
552 std::string coords, const IR::Value& offset, const IR::Value& offset2, 552 std::string coords, const IR::Value& offset, const IR::Value& offset2,
553 std::string dref); 553 std::string dref);
554void EmitImageFetch(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, std::string coords, 554void EmitImageFetch(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, std::string coords,
555 std::string offset, std::string lod, std::string ms); 555 std::string offset, std::string lod, std::string ms);
556void EmitImageQueryDimensions(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 556void EmitImageQueryDimensions(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
557 std::string lod); 557 std::string lod);
558void EmitImageQueryLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 558void EmitImageQueryLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
559 std::string coords); 559 std::string coords);
560void EmitImageGradient(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, std::string coords, 560void EmitImageGradient(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, std::string coords,
561 std::string derivates, std::string offset, std::string lod_clamp); 561 std::string derivates, std::string offset, std::string lod_clamp);
562void EmitImageRead(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, std::string coords); 562void EmitImageRead(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, std::string coords);
563void EmitImageWrite(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, std::string coords, 563void EmitImageWrite(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, std::string coords,
564 std::string color); 564 std::string color);
565void EmitBindlessImageAtomicIAdd32(EmitContext&); 565void EmitBindlessImageAtomicIAdd32(EmitContext&);
566void EmitBindlessImageAtomicSMin32(EmitContext&); 566void EmitBindlessImageAtomicSMin32(EmitContext&);
@@ -584,27 +584,27 @@ void EmitBoundImageAtomicAnd32(EmitContext&);
584void EmitBoundImageAtomicOr32(EmitContext&); 584void EmitBoundImageAtomicOr32(EmitContext&);
585void EmitBoundImageAtomicXor32(EmitContext&); 585void EmitBoundImageAtomicXor32(EmitContext&);
586void EmitBoundImageAtomicExchange32(EmitContext&); 586void EmitBoundImageAtomicExchange32(EmitContext&);
587void EmitImageAtomicIAdd32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 587void EmitImageAtomicIAdd32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
588 std::string coords, std::string value); 588 std::string coords, std::string value);
589void EmitImageAtomicSMin32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 589void EmitImageAtomicSMin32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
590 std::string coords, std::string value); 590 std::string coords, std::string value);
591void EmitImageAtomicUMin32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 591void EmitImageAtomicUMin32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
592 std::string coords, std::string value); 592 std::string coords, std::string value);
593void EmitImageAtomicSMax32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 593void EmitImageAtomicSMax32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
594 std::string coords, std::string value); 594 std::string coords, std::string value);
595void EmitImageAtomicUMax32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 595void EmitImageAtomicUMax32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
596 std::string coords, std::string value); 596 std::string coords, std::string value);
597void EmitImageAtomicInc32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 597void EmitImageAtomicInc32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
598 std::string coords, std::string value); 598 std::string coords, std::string value);
599void EmitImageAtomicDec32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 599void EmitImageAtomicDec32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
600 std::string coords, std::string value); 600 std::string coords, std::string value);
601void EmitImageAtomicAnd32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 601void EmitImageAtomicAnd32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
602 std::string coords, std::string value); 602 std::string coords, std::string value);
603void EmitImageAtomicOr32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 603void EmitImageAtomicOr32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
604 std::string coords, std::string value); 604 std::string coords, std::string value);
605void EmitImageAtomicXor32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 605void EmitImageAtomicXor32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
606 std::string coords, std::string value); 606 std::string coords, std::string value);
607void EmitImageAtomicExchange32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 607void EmitImageAtomicExchange32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
608 std::string coords, std::string value); 608 std::string coords, std::string value);
609void EmitLaneId(EmitContext& ctx); 609void EmitLaneId(EmitContext& ctx);
610void EmitVoteAll(EmitContext& ctx, std::string pred); 610void EmitVoteAll(EmitContext& ctx, std::string pred);
@@ -616,13 +616,13 @@ void EmitSubgroupLtMask(EmitContext& ctx);
616void EmitSubgroupLeMask(EmitContext& ctx); 616void EmitSubgroupLeMask(EmitContext& ctx);
617void EmitSubgroupGtMask(EmitContext& ctx); 617void EmitSubgroupGtMask(EmitContext& ctx);
618void EmitSubgroupGeMask(EmitContext& ctx); 618void EmitSubgroupGeMask(EmitContext& ctx);
619void EmitShuffleIndex(EmitContext& ctx, IR::Inst* inst, std::string value, std::string index, 619void EmitShuffleIndex(EmitContext& ctx, IR::Inst& inst, std::string value, std::string index,
620 std::string clamp, std::string segmentation_mask); 620 std::string clamp, std::string segmentation_mask);
621void EmitShuffleUp(EmitContext& ctx, IR::Inst* inst, std::string value, std::string index, 621void EmitShuffleUp(EmitContext& ctx, IR::Inst& inst, std::string value, std::string index,
622 std::string clamp, std::string segmentation_mask); 622 std::string clamp, std::string segmentation_mask);
623void EmitShuffleDown(EmitContext& ctx, IR::Inst* inst, std::string value, std::string index, 623void EmitShuffleDown(EmitContext& ctx, IR::Inst& inst, std::string value, std::string index,
624 std::string clamp, std::string segmentation_mask); 624 std::string clamp, std::string segmentation_mask);
625void EmitShuffleButterfly(EmitContext& ctx, IR::Inst* inst, std::string value, std::string index, 625void EmitShuffleButterfly(EmitContext& ctx, IR::Inst& inst, std::string value, std::string index,
626 std::string clamp, std::string segmentation_mask); 626 std::string clamp, std::string segmentation_mask);
627void EmitFSwizzleAdd(EmitContext& ctx, std::string op_a, std::string op_b, std::string swizzle); 627void EmitFSwizzleAdd(EmitContext& ctx, std::string op_a, std::string op_b, std::string swizzle);
628void EmitDPdxFine(EmitContext& ctx, std::string op_a); 628void EmitDPdxFine(EmitContext& ctx, std::string op_a);
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp b/src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp
index f03b2dba9..0dadf1d93 100644
--- a/src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp
+++ b/src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp
@@ -11,221 +11,221 @@
11#include "shader_recompiler/profile.h" 11#include "shader_recompiler/profile.h"
12 12
13namespace Shader::Backend::GLSL { 13namespace Shader::Backend::GLSL {
14void EmitIAdd32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 14void EmitIAdd32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
15 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) { 15 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) {
16 ctx.AddU32("{}={}+{};", *inst, a, b); 16 ctx.AddU32("{}={}+{};", inst, a, b);
17} 17}
18 18
19void EmitIAdd64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 19void EmitIAdd64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
20 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) { 20 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) {
21 throw NotImplementedException("GLSL Instruction"); 21 throw NotImplementedException("GLSL Instruction");
22} 22}
23 23
24void EmitISub32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 24void EmitISub32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
25 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) { 25 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) {
26 throw NotImplementedException("GLSL Instruction"); 26 throw NotImplementedException("GLSL Instruction");
27} 27}
28 28
29void EmitISub64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 29void EmitISub64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
30 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) { 30 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) {
31 throw NotImplementedException("GLSL Instruction"); 31 throw NotImplementedException("GLSL Instruction");
32} 32}
33 33
34void EmitIMul32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 34void EmitIMul32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
35 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) { 35 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) {
36 throw NotImplementedException("GLSL Instruction"); 36 throw NotImplementedException("GLSL Instruction");
37} 37}
38 38
39void EmitINeg32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 39void EmitINeg32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
40 [[maybe_unused]] std::string value) { 40 [[maybe_unused]] std::string value) {
41 ctx.AddU32("{}=-{};", *inst, value); 41 ctx.AddU32("{}=-{};", inst, value);
42} 42}
43 43
44void EmitINeg64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 44void EmitINeg64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
45 [[maybe_unused]] std::string value) { 45 [[maybe_unused]] std::string value) {
46 throw NotImplementedException("GLSL Instruction"); 46 throw NotImplementedException("GLSL Instruction");
47} 47}
48 48
49void EmitIAbs32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 49void EmitIAbs32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
50 [[maybe_unused]] std::string value) { 50 [[maybe_unused]] std::string value) {
51 throw NotImplementedException("GLSL Instruction"); 51 throw NotImplementedException("GLSL Instruction");
52} 52}
53 53
54void EmitIAbs64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 54void EmitIAbs64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
55 [[maybe_unused]] std::string value) { 55 [[maybe_unused]] std::string value) {
56 throw NotImplementedException("GLSL Instruction"); 56 throw NotImplementedException("GLSL Instruction");
57} 57}
58 58
59void EmitShiftLeftLogical32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 59void EmitShiftLeftLogical32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
60 [[maybe_unused]] std::string base, [[maybe_unused]] std::string shift) { 60 [[maybe_unused]] std::string base, [[maybe_unused]] std::string shift) {
61 throw NotImplementedException("GLSL Instruction"); 61 throw NotImplementedException("GLSL Instruction");
62} 62}
63 63
64void EmitShiftLeftLogical64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 64void EmitShiftLeftLogical64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
65 [[maybe_unused]] std::string base, [[maybe_unused]] std::string shift) { 65 [[maybe_unused]] std::string base, [[maybe_unused]] std::string shift) {
66 throw NotImplementedException("GLSL Instruction"); 66 throw NotImplementedException("GLSL Instruction");
67} 67}
68 68
69void EmitShiftRightLogical32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 69void EmitShiftRightLogical32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
70 [[maybe_unused]] std::string base, 70 [[maybe_unused]] std::string base,
71 [[maybe_unused]] std::string shift) { 71 [[maybe_unused]] std::string shift) {
72 throw NotImplementedException("GLSL Instruction"); 72 throw NotImplementedException("GLSL Instruction");
73} 73}
74 74
75void EmitShiftRightLogical64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 75void EmitShiftRightLogical64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
76 [[maybe_unused]] std::string base, 76 [[maybe_unused]] std::string base,
77 [[maybe_unused]] std::string shift) { 77 [[maybe_unused]] std::string shift) {
78 throw NotImplementedException("GLSL Instruction"); 78 throw NotImplementedException("GLSL Instruction");
79} 79}
80 80
81void EmitShiftRightArithmetic32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 81void EmitShiftRightArithmetic32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
82 [[maybe_unused]] std::string base, 82 [[maybe_unused]] std::string base,
83 [[maybe_unused]] std::string shift) { 83 [[maybe_unused]] std::string shift) {
84 throw NotImplementedException("GLSL Instruction"); 84 throw NotImplementedException("GLSL Instruction");
85} 85}
86 86
87void EmitShiftRightArithmetic64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 87void EmitShiftRightArithmetic64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
88 [[maybe_unused]] std::string base, 88 [[maybe_unused]] std::string base,
89 [[maybe_unused]] std::string shift) { 89 [[maybe_unused]] std::string shift) {
90 throw NotImplementedException("GLSL Instruction"); 90 throw NotImplementedException("GLSL Instruction");
91} 91}
92 92
93void EmitBitwiseAnd32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 93void EmitBitwiseAnd32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
94 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) { 94 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) {
95 throw NotImplementedException("GLSL Instruction"); 95 throw NotImplementedException("GLSL Instruction");
96} 96}
97 97
98void EmitBitwiseOr32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 98void EmitBitwiseOr32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
99 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) { 99 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) {
100 throw NotImplementedException("GLSL Instruction"); 100 throw NotImplementedException("GLSL Instruction");
101} 101}
102 102
103void EmitBitwiseXor32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 103void EmitBitwiseXor32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
104 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) { 104 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) {
105 throw NotImplementedException("GLSL Instruction"); 105 throw NotImplementedException("GLSL Instruction");
106} 106}
107 107
108void EmitBitFieldInsert([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 108void EmitBitFieldInsert([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
109 [[maybe_unused]] std::string base, [[maybe_unused]] std::string insert, 109 [[maybe_unused]] std::string base, [[maybe_unused]] std::string insert,
110 [[maybe_unused]] std::string offset, std::string count) { 110 [[maybe_unused]] std::string offset, std::string count) {
111 throw NotImplementedException("GLSL Instruction"); 111 throw NotImplementedException("GLSL Instruction");
112} 112}
113 113
114void EmitBitFieldSExtract([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 114void EmitBitFieldSExtract([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
115 [[maybe_unused]] std::string base, [[maybe_unused]] std::string offset, 115 [[maybe_unused]] std::string base, [[maybe_unused]] std::string offset,
116 std::string count) { 116 std::string count) {
117 throw NotImplementedException("GLSL Instruction"); 117 throw NotImplementedException("GLSL Instruction");
118} 118}
119 119
120void EmitBitFieldUExtract([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 120void EmitBitFieldUExtract([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
121 [[maybe_unused]] std::string base, [[maybe_unused]] std::string offset, 121 [[maybe_unused]] std::string base, [[maybe_unused]] std::string offset,
122 std::string count) { 122 std::string count) {
123 throw NotImplementedException("GLSL Instruction"); 123 throw NotImplementedException("GLSL Instruction");
124} 124}
125 125
126void EmitBitReverse32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 126void EmitBitReverse32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
127 [[maybe_unused]] std::string value) { 127 [[maybe_unused]] std::string value) {
128 throw NotImplementedException("GLSL Instruction"); 128 throw NotImplementedException("GLSL Instruction");
129} 129}
130 130
131void EmitBitCount32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 131void EmitBitCount32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
132 [[maybe_unused]] std::string value) { 132 [[maybe_unused]] std::string value) {
133 throw NotImplementedException("GLSL Instruction"); 133 throw NotImplementedException("GLSL Instruction");
134} 134}
135 135
136void EmitBitwiseNot32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 136void EmitBitwiseNot32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
137 [[maybe_unused]] std::string value) { 137 [[maybe_unused]] std::string value) {
138 throw NotImplementedException("GLSL Instruction"); 138 throw NotImplementedException("GLSL Instruction");
139} 139}
140 140
141void EmitFindSMsb32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 141void EmitFindSMsb32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
142 [[maybe_unused]] std::string value) { 142 [[maybe_unused]] std::string value) {
143 throw NotImplementedException("GLSL Instruction"); 143 throw NotImplementedException("GLSL Instruction");
144} 144}
145 145
146void EmitFindUMsb32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 146void EmitFindUMsb32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
147 [[maybe_unused]] std::string value) { 147 [[maybe_unused]] std::string value) {
148 throw NotImplementedException("GLSL Instruction"); 148 throw NotImplementedException("GLSL Instruction");
149} 149}
150 150
151void EmitSMin32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 151void EmitSMin32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
152 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) { 152 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) {
153 throw NotImplementedException("GLSL Instruction"); 153 throw NotImplementedException("GLSL Instruction");
154} 154}
155 155
156void EmitUMin32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 156void EmitUMin32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
157 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) { 157 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) {
158 throw NotImplementedException("GLSL Instruction"); 158 throw NotImplementedException("GLSL Instruction");
159} 159}
160 160
161void EmitSMax32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 161void EmitSMax32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
162 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) { 162 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) {
163 throw NotImplementedException("GLSL Instruction"); 163 throw NotImplementedException("GLSL Instruction");
164} 164}
165 165
166void EmitUMax32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 166void EmitUMax32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
167 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) { 167 [[maybe_unused]] std::string a, [[maybe_unused]] std::string b) {
168 throw NotImplementedException("GLSL Instruction"); 168 throw NotImplementedException("GLSL Instruction");
169} 169}
170 170
171void EmitSClamp32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 171void EmitSClamp32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
172 [[maybe_unused]] std::string value, [[maybe_unused]] std::string min, 172 [[maybe_unused]] std::string value, [[maybe_unused]] std::string min,
173 std::string max) { 173 std::string max) {
174 throw NotImplementedException("GLSL Instruction"); 174 throw NotImplementedException("GLSL Instruction");
175} 175}
176 176
177void EmitUClamp32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 177void EmitUClamp32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
178 [[maybe_unused]] std::string value, [[maybe_unused]] std::string min, 178 [[maybe_unused]] std::string value, [[maybe_unused]] std::string min,
179 std::string max) { 179 std::string max) {
180 throw NotImplementedException("GLSL Instruction"); 180 throw NotImplementedException("GLSL Instruction");
181} 181}
182 182
183void EmitSLessThan([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 183void EmitSLessThan([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
184 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) { 184 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) {
185 throw NotImplementedException("GLSL Instruction"); 185 throw NotImplementedException("GLSL Instruction");
186} 186}
187 187
188void EmitULessThan([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 188void EmitULessThan([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
189 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) { 189 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) {
190 throw NotImplementedException("GLSL Instruction"); 190 throw NotImplementedException("GLSL Instruction");
191} 191}
192 192
193void EmitIEqual([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 193void EmitIEqual([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
194 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) { 194 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) {
195 throw NotImplementedException("GLSL Instruction"); 195 throw NotImplementedException("GLSL Instruction");
196} 196}
197 197
198void EmitSLessThanEqual([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 198void EmitSLessThanEqual([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
199 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) { 199 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) {
200 throw NotImplementedException("GLSL Instruction"); 200 throw NotImplementedException("GLSL Instruction");
201} 201}
202 202
203void EmitULessThanEqual([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 203void EmitULessThanEqual([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
204 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) { 204 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) {
205 throw NotImplementedException("GLSL Instruction"); 205 throw NotImplementedException("GLSL Instruction");
206} 206}
207 207
208void EmitSGreaterThan([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 208void EmitSGreaterThan([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
209 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) { 209 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) {
210 throw NotImplementedException("GLSL Instruction"); 210 throw NotImplementedException("GLSL Instruction");
211} 211}
212 212
213void EmitUGreaterThan([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 213void EmitUGreaterThan([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
214 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) { 214 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) {
215 throw NotImplementedException("GLSL Instruction"); 215 throw NotImplementedException("GLSL Instruction");
216} 216}
217 217
218void EmitINotEqual([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 218void EmitINotEqual([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
219 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) { 219 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) {
220 throw NotImplementedException("GLSL Instruction"); 220 throw NotImplementedException("GLSL Instruction");
221} 221}
222 222
223void EmitSGreaterThanEqual([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 223void EmitSGreaterThanEqual([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
224 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) { 224 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) {
225 throw NotImplementedException("GLSL Instruction"); 225 throw NotImplementedException("GLSL Instruction");
226} 226}
227 227
228void EmitUGreaterThanEqual([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst* inst, 228void EmitUGreaterThanEqual([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst,
229 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) { 229 [[maybe_unused]] std::string lhs, [[maybe_unused]] std::string rhs) {
230 throw NotImplementedException("GLSL Instruction"); 230 throw NotImplementedException("GLSL Instruction");
231} 231}
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_not_implemented.cpp b/src/shader_recompiler/backend/glsl/emit_glsl_not_implemented.cpp
index f39c1fff0..0775d5c84 100644
--- a/src/shader_recompiler/backend/glsl/emit_glsl_not_implemented.cpp
+++ b/src/shader_recompiler/backend/glsl/emit_glsl_not_implemented.cpp
@@ -19,7 +19,7 @@ static void NotImplemented() {
19 throw NotImplementedException("GLSL instruction"); 19 throw NotImplementedException("GLSL instruction");
20} 20}
21 21
22void EmitPhi(EmitContext& ctx, IR::Inst* inst) { 22void EmitPhi(EmitContext& ctx, IR::Inst& inst) {
23 NotImplemented(); 23 NotImplemented();
24} 24}
25 25
@@ -648,27 +648,27 @@ void EmitFPAbs64(EmitContext& ctx, std::string value) {
648 NotImplemented(); 648 NotImplemented();
649} 649}
650 650
651void EmitFPAdd16(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b) { 651void EmitFPAdd16(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b) {
652 NotImplemented(); 652 NotImplemented();
653} 653}
654 654
655void EmitFPAdd32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b) { 655void EmitFPAdd32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b) {
656 NotImplemented(); 656 NotImplemented();
657} 657}
658 658
659void EmitFPAdd64(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b) { 659void EmitFPAdd64(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b) {
660 NotImplemented(); 660 NotImplemented();
661} 661}
662 662
663void EmitFPFma16(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b, std::string c) { 663void EmitFPFma16(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b, std::string c) {
664 NotImplemented(); 664 NotImplemented();
665} 665}
666 666
667void EmitFPFma32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b, std::string c) { 667void EmitFPFma32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b, std::string c) {
668 NotImplemented(); 668 NotImplemented();
669} 669}
670 670
671void EmitFPFma64(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b, std::string c) { 671void EmitFPFma64(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b, std::string c) {
672 NotImplemented(); 672 NotImplemented();
673} 673}
674 674
@@ -688,15 +688,15 @@ void EmitFPMin64(EmitContext& ctx, std::string a, std::string b) {
688 NotImplemented(); 688 NotImplemented();
689} 689}
690 690
691void EmitFPMul16(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b) { 691void EmitFPMul16(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b) {
692 NotImplemented(); 692 NotImplemented();
693} 693}
694 694
695void EmitFPMul32(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b) { 695void EmitFPMul32(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b) {
696 NotImplemented(); 696 NotImplemented();
697} 697}
698 698
699void EmitFPMul64(EmitContext& ctx, IR::Inst* inst, std::string a, std::string b) { 699void EmitFPMul64(EmitContext& ctx, IR::Inst& inst, std::string a, std::string b) {
700 NotImplemented(); 700 NotImplemented();
701} 701}
702 702
@@ -1582,64 +1582,64 @@ void EmitBoundImageWrite(EmitContext&) {
1582 NotImplemented(); 1582 NotImplemented();
1583} 1583}
1584 1584
1585void EmitImageSampleImplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1585void EmitImageSampleImplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1586 std::string coords, std::string bias_lc, const IR::Value& offset) { 1586 std::string coords, std::string bias_lc, const IR::Value& offset) {
1587 NotImplemented(); 1587 NotImplemented();
1588} 1588}
1589 1589
1590void EmitImageSampleExplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1590void EmitImageSampleExplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1591 std::string coords, std::string lod_lc, const IR::Value& offset) { 1591 std::string coords, std::string lod_lc, const IR::Value& offset) {
1592 NotImplemented(); 1592 NotImplemented();
1593} 1593}
1594 1594
1595void EmitImageSampleDrefImplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1595void EmitImageSampleDrefImplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1596 std::string coords, std::string dref, std::string bias_lc, 1596 std::string coords, std::string dref, std::string bias_lc,
1597 const IR::Value& offset) { 1597 const IR::Value& offset) {
1598 NotImplemented(); 1598 NotImplemented();
1599} 1599}
1600 1600
1601void EmitImageSampleDrefExplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1601void EmitImageSampleDrefExplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1602 std::string coords, std::string dref, std::string lod_lc, 1602 std::string coords, std::string dref, std::string lod_lc,
1603 const IR::Value& offset) { 1603 const IR::Value& offset) {
1604 NotImplemented(); 1604 NotImplemented();
1605} 1605}
1606 1606
1607void EmitImageGather(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, std::string coords, 1607void EmitImageGather(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, std::string coords,
1608 const IR::Value& offset, const IR::Value& offset2) { 1608 const IR::Value& offset, const IR::Value& offset2) {
1609 NotImplemented(); 1609 NotImplemented();
1610} 1610}
1611 1611
1612void EmitImageGatherDref(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1612void EmitImageGatherDref(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1613 std::string coords, const IR::Value& offset, const IR::Value& offset2, 1613 std::string coords, const IR::Value& offset, const IR::Value& offset2,
1614 std::string dref) { 1614 std::string dref) {
1615 NotImplemented(); 1615 NotImplemented();
1616} 1616}
1617 1617
1618void EmitImageFetch(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, std::string coords, 1618void EmitImageFetch(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, std::string coords,
1619 std::string offset, std::string lod, std::string ms) { 1619 std::string offset, std::string lod, std::string ms) {
1620 NotImplemented(); 1620 NotImplemented();
1621} 1621}
1622 1622
1623void EmitImageQueryDimensions(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1623void EmitImageQueryDimensions(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1624 std::string lod) { 1624 std::string lod) {
1625 NotImplemented(); 1625 NotImplemented();
1626} 1626}
1627 1627
1628void EmitImageQueryLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1628void EmitImageQueryLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1629 std::string coords) { 1629 std::string coords) {
1630 NotImplemented(); 1630 NotImplemented();
1631} 1631}
1632 1632
1633void EmitImageGradient(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, std::string coords, 1633void EmitImageGradient(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, std::string coords,
1634 std::string derivates, std::string offset, std::string lod_clamp) { 1634 std::string derivates, std::string offset, std::string lod_clamp) {
1635 NotImplemented(); 1635 NotImplemented();
1636} 1636}
1637 1637
1638void EmitImageRead(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, std::string coords) { 1638void EmitImageRead(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, std::string coords) {
1639 NotImplemented(); 1639 NotImplemented();
1640} 1640}
1641 1641
1642void EmitImageWrite(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, std::string coords, 1642void EmitImageWrite(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, std::string coords,
1643 std::string color) { 1643 std::string color) {
1644 NotImplemented(); 1644 NotImplemented();
1645} 1645}
@@ -1732,57 +1732,57 @@ void EmitBoundImageAtomicExchange32(EmitContext&) {
1732 NotImplemented(); 1732 NotImplemented();
1733} 1733}
1734 1734
1735void EmitImageAtomicIAdd32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1735void EmitImageAtomicIAdd32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1736 std::string coords, std::string value) { 1736 std::string coords, std::string value) {
1737 NotImplemented(); 1737 NotImplemented();
1738} 1738}
1739 1739
1740void EmitImageAtomicSMin32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1740void EmitImageAtomicSMin32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1741 std::string coords, std::string value) { 1741 std::string coords, std::string value) {
1742 NotImplemented(); 1742 NotImplemented();
1743} 1743}
1744 1744
1745void EmitImageAtomicUMin32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1745void EmitImageAtomicUMin32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1746 std::string coords, std::string value) { 1746 std::string coords, std::string value) {
1747 NotImplemented(); 1747 NotImplemented();
1748} 1748}
1749 1749
1750void EmitImageAtomicSMax32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1750void EmitImageAtomicSMax32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1751 std::string coords, std::string value) { 1751 std::string coords, std::string value) {
1752 NotImplemented(); 1752 NotImplemented();
1753} 1753}
1754 1754
1755void EmitImageAtomicUMax32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1755void EmitImageAtomicUMax32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1756 std::string coords, std::string value) { 1756 std::string coords, std::string value) {
1757 NotImplemented(); 1757 NotImplemented();
1758} 1758}
1759 1759
1760void EmitImageAtomicInc32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1760void EmitImageAtomicInc32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1761 std::string coords, std::string value) { 1761 std::string coords, std::string value) {
1762 NotImplemented(); 1762 NotImplemented();
1763} 1763}
1764 1764
1765void EmitImageAtomicDec32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1765void EmitImageAtomicDec32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1766 std::string coords, std::string value) { 1766 std::string coords, std::string value) {
1767 NotImplemented(); 1767 NotImplemented();
1768} 1768}
1769 1769
1770void EmitImageAtomicAnd32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1770void EmitImageAtomicAnd32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1771 std::string coords, std::string value) { 1771 std::string coords, std::string value) {
1772 NotImplemented(); 1772 NotImplemented();
1773} 1773}
1774 1774
1775void EmitImageAtomicOr32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1775void EmitImageAtomicOr32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1776 std::string coords, std::string value) { 1776 std::string coords, std::string value) {
1777 NotImplemented(); 1777 NotImplemented();
1778} 1778}
1779 1779
1780void EmitImageAtomicXor32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1780void EmitImageAtomicXor32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1781 std::string coords, std::string value) { 1781 std::string coords, std::string value) {
1782 NotImplemented(); 1782 NotImplemented();
1783} 1783}
1784 1784
1785void EmitImageAtomicExchange32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 1785void EmitImageAtomicExchange32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
1786 std::string coords, std::string value) { 1786 std::string coords, std::string value) {
1787 NotImplemented(); 1787 NotImplemented();
1788} 1788}
@@ -1827,22 +1827,22 @@ void EmitSubgroupGeMask(EmitContext& ctx) {
1827 NotImplemented(); 1827 NotImplemented();
1828} 1828}
1829 1829
1830void EmitShuffleIndex(EmitContext& ctx, IR::Inst* inst, std::string value, std::string index, 1830void EmitShuffleIndex(EmitContext& ctx, IR::Inst& inst, std::string value, std::string index,
1831 std::string clamp, std::string segmentation_mask) { 1831 std::string clamp, std::string segmentation_mask) {
1832 NotImplemented(); 1832 NotImplemented();
1833} 1833}
1834 1834
1835void EmitShuffleUp(EmitContext& ctx, IR::Inst* inst, std::string value, std::string index, 1835void EmitShuffleUp(EmitContext& ctx, IR::Inst& inst, std::string value, std::string index,
1836 std::string clamp, std::string segmentation_mask) { 1836 std::string clamp, std::string segmentation_mask) {
1837 NotImplemented(); 1837 NotImplemented();
1838} 1838}
1839 1839
1840void EmitShuffleDown(EmitContext& ctx, IR::Inst* inst, std::string value, std::string index, 1840void EmitShuffleDown(EmitContext& ctx, IR::Inst& inst, std::string value, std::string index,
1841 std::string clamp, std::string segmentation_mask) { 1841 std::string clamp, std::string segmentation_mask) {
1842 NotImplemented(); 1842 NotImplemented();
1843} 1843}
1844 1844
1845void EmitShuffleButterfly(EmitContext& ctx, IR::Inst* inst, std::string value, std::string index, 1845void EmitShuffleButterfly(EmitContext& ctx, IR::Inst& inst, std::string value, std::string index,
1846 std::string clamp, std::string segmentation_mask) { 1846 std::string clamp, std::string segmentation_mask) {
1847 NotImplemented(); 1847 NotImplemented();
1848} 1848}