mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	glsl: Fix GetAttribute return values
fixes font rendering issues as these were used to index into the ssbos
This commit is contained in:
		@@ -83,7 +83,7 @@ void Invoke(EmitContext& ctx, IR::Inst* inst) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EmitInst(EmitContext& ctx, IR::Inst* inst) {
 | 
			
		||||
    // ctx.Add("/* {} */", inst->GetOpcode());
 | 
			
		||||
    // ctx.Add("/* $ {} $ */", inst->GetOpcode());
 | 
			
		||||
    switch (inst->GetOpcode()) {
 | 
			
		||||
#define OPCODE(name, result_type, ...)                                                             \
 | 
			
		||||
    case IR::Opcode::name:                                                                         \
 | 
			
		||||
@@ -183,11 +183,13 @@ std::string EmitGLSL(const Profile& profile, const RuntimeInfo& runtime_info, IR
 | 
			
		||||
    for (size_t index = 0; index < ctx.reg_alloc.num_used_registers; ++index) {
 | 
			
		||||
        ctx.header += fmt::format("{} R{};", ctx.reg_alloc.reg_types[index], index);
 | 
			
		||||
    }
 | 
			
		||||
    // TODO: track usage
 | 
			
		||||
    ctx.header += "uint carry;";
 | 
			
		||||
    if (program.info.uses_subgroup_shuffles) {
 | 
			
		||||
        ctx.header += "bool shfl_in_bounds;\n";
 | 
			
		||||
    if (ctx.uses_cc_carry) {
 | 
			
		||||
        ctx.header += "uint carry;";
 | 
			
		||||
    }
 | 
			
		||||
    if (program.info.uses_subgroup_shuffles) {
 | 
			
		||||
        ctx.header += "bool shfl_in_bounds;";
 | 
			
		||||
    }
 | 
			
		||||
    ctx.header += "\n";
 | 
			
		||||
    ctx.code.insert(0, ctx.header);
 | 
			
		||||
    ctx.code += "}";
 | 
			
		||||
    // fmt::print("\n{}\n", ctx.code);
 | 
			
		||||
 
 | 
			
		||||
@@ -149,13 +149,13 @@ void EmitGetAttribute(EmitContext& ctx, IR::Inst& inst, IR::Attribute attr,
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case IR::Attribute::InstanceId:
 | 
			
		||||
        ctx.AddS32("{}=gl_InstanceID;", inst);
 | 
			
		||||
        ctx.AddF32("{}=intBitsToFloat(gl_InstanceID);", inst);
 | 
			
		||||
        break;
 | 
			
		||||
    case IR::Attribute::VertexId:
 | 
			
		||||
        ctx.AddS32("{}=gl_VertexID;", inst);
 | 
			
		||||
        ctx.AddF32("{}=intBitsToFloat(gl_VertexID);", inst);
 | 
			
		||||
        break;
 | 
			
		||||
    case IR::Attribute::FrontFace:
 | 
			
		||||
        ctx.AddS32("{}=gl_FrontFacing?-1:0;", inst);
 | 
			
		||||
        ctx.AddF32("{}=intBitsToFloat(gl_FrontFacing?-1:0);", inst);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        fmt::print("Get attribute {}", attr);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user