glasm: Implement local memory for glasm
This commit is contained in:
		| @@ -306,6 +306,9 @@ std::string EmitGLASM(const Profile&, IR::Program& program, Bindings&) { | ||||
|     for (size_t index = 0; index < ctx.reg_alloc.NumUsedRegisters(); ++index) { | ||||
|         header += fmt::format("R{},", index); | ||||
|     } | ||||
|     if (program.local_memory_size > 0) { | ||||
|         header += fmt::format("lmem[{}],", program.local_memory_size); | ||||
|     } | ||||
|     header += "RC;" | ||||
|               "LONG TEMP "; | ||||
|     for (size_t index = 0; index < ctx.reg_alloc.NumUsedLongRegisters(); ++index) { | ||||
|   | ||||
| @@ -113,4 +113,12 @@ void EmitSetFragDepth([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] Scalar | ||||
|     throw NotImplementedException("GLASM instruction"); | ||||
| } | ||||
|  | ||||
| void EmitLoadLocal(EmitContext& ctx, IR::Inst& inst, ScalarU32 word_offset) { | ||||
|     ctx.Add("MOV.U {},lmem[{}].x;", inst, word_offset); | ||||
| } | ||||
|  | ||||
| void EmitWriteLocal(EmitContext& ctx, ScalarU32 word_offset, ScalarU32 value) { | ||||
|     ctx.Add("MOV.U lmem[{}].x,{};", word_offset, value); | ||||
| } | ||||
|  | ||||
| } // namespace Shader::Backend::GLASM | ||||
|   | ||||
| @@ -71,7 +71,7 @@ void EmitInvocationId(EmitContext& ctx); | ||||
| void EmitSampleId(EmitContext& ctx); | ||||
| void EmitIsHelperInvocation(EmitContext& ctx); | ||||
| void EmitYDirection(EmitContext& ctx); | ||||
| void EmitLoadLocal(EmitContext& ctx, ScalarU32 word_offset); | ||||
| void EmitLoadLocal(EmitContext& ctx, IR::Inst& inst, ScalarU32 word_offset); | ||||
| void EmitWriteLocal(EmitContext& ctx, ScalarU32 word_offset, ScalarU32 value); | ||||
| void EmitUndefU1(EmitContext& ctx); | ||||
| void EmitUndefU8(EmitContext& ctx); | ||||
|   | ||||
| @@ -168,14 +168,6 @@ void EmitYDirection(EmitContext& ctx) { | ||||
|     NotImplemented(); | ||||
| } | ||||
|  | ||||
| void EmitLoadLocal(EmitContext& ctx, ScalarU32 word_offset) { | ||||
|     NotImplemented(); | ||||
| } | ||||
|  | ||||
| void EmitWriteLocal(EmitContext& ctx, ScalarU32 word_offset, ScalarU32 value) { | ||||
|     NotImplemented(); | ||||
| } | ||||
|  | ||||
| void EmitUndefU1(EmitContext& ctx) { | ||||
|     NotImplemented(); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user