glasm: Implement Y direction
This commit is contained in:
		| @@ -70,6 +70,8 @@ public: | ||||
|     Stage stage{}; | ||||
|     std::string_view stage_name = "invalid"; | ||||
|     std::string_view attrib_name = "invalid"; | ||||
|  | ||||
|     bool uses_y_direction{}; | ||||
| }; | ||||
|  | ||||
| } // namespace Shader::Backend::GLASM | ||||
|   | ||||
| @@ -439,6 +439,9 @@ std::string EmitGLASM(const Profile& profile, const RuntimeInfo& runtime_info, I | ||||
|                   "MOV.F FSWZB[2],1;" | ||||
|                   "MOV.F FSWZB[3],-1;"; | ||||
|     } | ||||
|     if (ctx.uses_y_direction) { | ||||
|         header += "PARAM y_direction[1]={state.material.front.ambient};"; | ||||
|     } | ||||
|     ctx.code.insert(0, header); | ||||
|     ctx.code += "END"; | ||||
|     return ctx.code; | ||||
|   | ||||
| @@ -71,7 +71,7 @@ void EmitLocalInvocationId(EmitContext& ctx, IR::Inst& inst); | ||||
| void EmitInvocationId(EmitContext& ctx, IR::Inst& inst); | ||||
| void EmitSampleId(EmitContext& ctx, IR::Inst& inst); | ||||
| void EmitIsHelperInvocation(EmitContext& ctx, IR::Inst& inst); | ||||
| void EmitYDirection(EmitContext& ctx); | ||||
| void EmitYDirection(EmitContext& ctx, IR::Inst& inst); | ||||
| void EmitLoadLocal(EmitContext& ctx, IR::Inst& inst, ScalarU32 word_offset); | ||||
| void EmitWriteLocal(EmitContext& ctx, ScalarU32 word_offset, ScalarU32 value); | ||||
| void EmitUndefU1(EmitContext& ctx, IR::Inst& inst); | ||||
|   | ||||
| @@ -207,8 +207,9 @@ void EmitIsHelperInvocation(EmitContext& ctx, IR::Inst& inst) { | ||||
|     ctx.Add("MOV.S {}.x,fragment.helperthread.x;", inst); | ||||
| } | ||||
|  | ||||
| void EmitYDirection(EmitContext& ctx) { | ||||
|     NotImplemented(); | ||||
| void EmitYDirection(EmitContext& ctx, IR::Inst& inst) { | ||||
|     ctx.uses_y_direction = true; | ||||
|     ctx.Add("MOV.F {}.x,y_direction[0].w;", inst); | ||||
| } | ||||
|  | ||||
| void EmitUndefU1(EmitContext& ctx, IR::Inst& inst) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user