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