diff options
| author | 2021-05-23 04:28:34 -0300 | |
|---|---|---|
| committer | 2021-07-22 21:51:30 -0400 | |
| commit | d621e96d0de212cc16897eadf71e8a1b2e1eb5dc (patch) | |
| tree | 8695f2f4dddf2564b63e4574d6616ccb0e79568c /src/shader_recompiler/frontend | |
| parent | spirv: Be aware of NAN unaware drivers (diff) | |
| download | yuzu-d621e96d0de212cc16897eadf71e8a1b2e1eb5dc.tar.gz yuzu-d621e96d0de212cc16897eadf71e8a1b2e1eb5dc.tar.xz yuzu-d621e96d0de212cc16897eadf71e8a1b2e1eb5dc.zip | |
shader: Initial OpenGL implementation
Diffstat (limited to 'src/shader_recompiler/frontend')
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 | ||
| 358 | Value IREmitter::LocalInvocationId() { | ||
| 359 | return Inst(Opcode::LocalInvocationId); | ||
| 360 | } | ||
| 361 | |||
| 358 | U32 IREmitter::LocalInvocationIdX() { | 362 | U32 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: |