diff options
Diffstat (limited to 'src/shader_recompiler/backend/glasm')
4 files changed, 12 insertions, 9 deletions
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm.cpp b/src/shader_recompiler/backend/glasm/emit_glasm.cpp index 775dd9e7e..0b70bf3f6 100644 --- a/src/shader_recompiler/backend/glasm/emit_glasm.cpp +++ b/src/shader_recompiler/backend/glasm/emit_glasm.cpp | |||
| @@ -306,6 +306,9 @@ std::string EmitGLASM(const Profile&, IR::Program& program, Bindings&) { | |||
| 306 | for (size_t index = 0; index < ctx.reg_alloc.NumUsedRegisters(); ++index) { | 306 | for (size_t index = 0; index < ctx.reg_alloc.NumUsedRegisters(); ++index) { |
| 307 | header += fmt::format("R{},", index); | 307 | header += fmt::format("R{},", index); |
| 308 | } | 308 | } |
| 309 | if (program.local_memory_size > 0) { | ||
| 310 | header += fmt::format("lmem[{}],", program.local_memory_size); | ||
| 311 | } | ||
| 309 | header += "RC;" | 312 | header += "RC;" |
| 310 | "LONG TEMP "; | 313 | "LONG TEMP "; |
| 311 | for (size_t index = 0; index < ctx.reg_alloc.NumUsedLongRegisters(); ++index) { | 314 | for (size_t index = 0; index < ctx.reg_alloc.NumUsedLongRegisters(); ++index) { |
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp b/src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp index fed79e381..de0be7aed 100644 --- a/src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp +++ b/src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp | |||
| @@ -113,4 +113,12 @@ void EmitSetFragDepth([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] Scalar | |||
| 113 | throw NotImplementedException("GLASM instruction"); | 113 | throw NotImplementedException("GLASM instruction"); |
| 114 | } | 114 | } |
| 115 | 115 | ||
| 116 | void EmitLoadLocal(EmitContext& ctx, IR::Inst& inst, ScalarU32 word_offset) { | ||
| 117 | ctx.Add("MOV.U {},lmem[{}].x;", inst, word_offset); | ||
| 118 | } | ||
| 119 | |||
| 120 | void EmitWriteLocal(EmitContext& ctx, ScalarU32 word_offset, ScalarU32 value) { | ||
| 121 | ctx.Add("MOV.U lmem[{}].x,{};", word_offset, value); | ||
| 122 | } | ||
| 123 | |||
| 116 | } // namespace Shader::Backend::GLASM | 124 | } // namespace Shader::Backend::GLASM |
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h b/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h index a74e422d6..e7af8fa88 100644 --- a/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h +++ b/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h | |||
| @@ -71,7 +71,7 @@ void EmitInvocationId(EmitContext& ctx); | |||
| 71 | void EmitSampleId(EmitContext& ctx); | 71 | void EmitSampleId(EmitContext& ctx); |
| 72 | void EmitIsHelperInvocation(EmitContext& ctx); | 72 | void EmitIsHelperInvocation(EmitContext& ctx); |
| 73 | void EmitYDirection(EmitContext& ctx); | 73 | void EmitYDirection(EmitContext& ctx); |
| 74 | void EmitLoadLocal(EmitContext& ctx, ScalarU32 word_offset); | 74 | void EmitLoadLocal(EmitContext& ctx, IR::Inst& inst, ScalarU32 word_offset); |
| 75 | void EmitWriteLocal(EmitContext& ctx, ScalarU32 word_offset, ScalarU32 value); | 75 | void EmitWriteLocal(EmitContext& ctx, ScalarU32 word_offset, ScalarU32 value); |
| 76 | void EmitUndefU1(EmitContext& ctx); | 76 | void EmitUndefU1(EmitContext& ctx); |
| 77 | void EmitUndefU8(EmitContext& ctx); | 77 | void EmitUndefU8(EmitContext& ctx); |
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_not_implemented.cpp b/src/shader_recompiler/backend/glasm/emit_glasm_not_implemented.cpp index 969b91a81..ae1735c8f 100644 --- a/src/shader_recompiler/backend/glasm/emit_glasm_not_implemented.cpp +++ b/src/shader_recompiler/backend/glasm/emit_glasm_not_implemented.cpp | |||
| @@ -168,14 +168,6 @@ void EmitYDirection(EmitContext& ctx) { | |||
| 168 | NotImplemented(); | 168 | NotImplemented(); |
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | void EmitLoadLocal(EmitContext& ctx, ScalarU32 word_offset) { | ||
| 172 | NotImplemented(); | ||
| 173 | } | ||
| 174 | |||
| 175 | void EmitWriteLocal(EmitContext& ctx, ScalarU32 word_offset, ScalarU32 value) { | ||
| 176 | NotImplemented(); | ||
| 177 | } | ||
| 178 | |||
| 179 | void EmitUndefU1(EmitContext& ctx) { | 171 | void EmitUndefU1(EmitContext& ctx) { |
| 180 | NotImplemented(); | 172 | NotImplemented(); |
| 181 | } | 173 | } |