summaryrefslogtreecommitdiff
path: root/src/shader_recompiler
diff options
context:
space:
mode:
Diffstat (limited to 'src/shader_recompiler')
-rw-r--r--src/shader_recompiler/frontend/ir/ir_emitter.cpp4
-rw-r--r--src/shader_recompiler/frontend/ir/ir_emitter.h1
-rw-r--r--src/shader_recompiler/frontend/maxwell/translate/impl/move_special_register.cpp7
3 files changed, 12 insertions, 0 deletions
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.cpp b/src/shader_recompiler/frontend/ir/ir_emitter.cpp
index b3c9fe72a..5913fdeff 100644
--- a/src/shader_recompiler/frontend/ir/ir_emitter.cpp
+++ b/src/shader_recompiler/frontend/ir/ir_emitter.cpp
@@ -355,6 +355,10 @@ U32 IREmitter::WorkgroupIdZ() {
355 return U32{CompositeExtract(Inst(Opcode::WorkgroupId), 2)}; 355 return U32{CompositeExtract(Inst(Opcode::WorkgroupId), 2)};
356} 356}
357 357
358Value IREmitter::LocalInvocationId() {
359 return Inst(Opcode::LocalInvocationId);
360}
361
358U32 IREmitter::LocalInvocationIdX() { 362U32 IREmitter::LocalInvocationIdX() {
359 return U32{CompositeExtract(Inst(Opcode::LocalInvocationId), 0)}; 363 return U32{CompositeExtract(Inst(Opcode::LocalInvocationId), 0)};
360} 364}
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.h b/src/shader_recompiler/frontend/ir/ir_emitter.h
index 4441c495d..a12919283 100644
--- a/src/shader_recompiler/frontend/ir/ir_emitter.h
+++ b/src/shader_recompiler/frontend/ir/ir_emitter.h
@@ -95,6 +95,7 @@ public:
95 [[nodiscard]] U32 WorkgroupIdY(); 95 [[nodiscard]] U32 WorkgroupIdY();
96 [[nodiscard]] U32 WorkgroupIdZ(); 96 [[nodiscard]] U32 WorkgroupIdZ();
97 97
98 [[nodiscard]] Value LocalInvocationId();
98 [[nodiscard]] U32 LocalInvocationIdX(); 99 [[nodiscard]] U32 LocalInvocationIdX();
99 [[nodiscard]] U32 LocalInvocationIdY(); 100 [[nodiscard]] U32 LocalInvocationIdY();
100 [[nodiscard]] U32 LocalInvocationIdZ(); 101 [[nodiscard]] U32 LocalInvocationIdZ();
diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/move_special_register.cpp b/src/shader_recompiler/frontend/maxwell/translate/impl/move_special_register.cpp
index b0baff74b..01fb6f5e5 100644
--- a/src/shader_recompiler/frontend/maxwell/translate/impl/move_special_register.cpp
+++ b/src/shader_recompiler/frontend/maxwell/translate/impl/move_special_register.cpp
@@ -120,6 +120,13 @@ enum class SpecialRegister : u64 {
120 case SpecialRegister::SR_INVOCATION_INFO: 120 case SpecialRegister::SR_INVOCATION_INFO:
121 // LOG_WARNING(..., "SR_INVOCATION_INFO is stubbed"); 121 // LOG_WARNING(..., "SR_INVOCATION_INFO is stubbed");
122 return ir.Imm32(0x00ff'0000); 122 return ir.Imm32(0x00ff'0000);
123 case SpecialRegister::SR_TID: {
124 const IR::Value tid{ir.LocalInvocationId()};
125 return ir.BitFieldInsert(ir.BitFieldInsert(IR::U32{ir.CompositeExtract(tid, 0)},
126 IR::U32{ir.CompositeExtract(tid, 1)},
127 ir.Imm32(16), ir.Imm32(8)),
128 IR::U32{ir.CompositeExtract(tid, 2)}, ir.Imm32(26), ir.Imm32(6));
129 }
123 case SpecialRegister::SR_TID_X: 130 case SpecialRegister::SR_TID_X:
124 return ir.LocalInvocationIdX(); 131 return ir.LocalInvocationIdX();
125 case SpecialRegister::SR_TID_Y: 132 case SpecialRegister::SR_TID_Y: