Explorar o código

glsl: Fix GetAttribute return values

fixes font rendering issues as these were used to index into the ssbos
ameerj %!s(int64=5) %!d(string=hai) anos
pai
achega
80eec85867

+ 6 - 4
src/shader_recompiler/backend/glsl/emit_glsl.cpp

@@ -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 (ctx.uses_cc_carry) {
+        ctx.header += "uint carry;";
+    }
     if (program.info.uses_subgroup_shuffles) {
-        ctx.header += "bool shfl_in_bounds;\n";
+        ctx.header += "bool shfl_in_bounds;";
     }
+    ctx.header += "\n";
     ctx.code.insert(0, ctx.header);
     ctx.code += "}";
     // fmt::print("\n{}\n", ctx.code);

+ 3 - 3
src/shader_recompiler/backend/glsl/emit_glsl_context_get_set.cpp

@@ -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);