summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp8
-rw-r--r--src/shader_recompiler/backend/glsl/emit_glsl_context_get_set.cpp10
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp9
3 files changed, 23 insertions, 4 deletions
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp b/src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp
index c7d7d5fef..8d2b9d569 100644
--- a/src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp
+++ b/src/shader_recompiler/backend/glasm/emit_glasm_context_get_set.cpp
@@ -406,9 +406,15 @@ void EmitInvocationInfo(EmitContext& ctx, IR::Inst& inst) {
case Stage::TessellationEval:
ctx.Add("SHL.U {}.x,primitive.vertexcount,16;", inst);
break;
+ case Stage::Fragment:
+ // Return sample mask in upper 16 bits
+ ctx.Add("SHL.U {}.x,fragment.samplemask,16;", inst);
+ break;
+ case Stage::Compute:
default:
- LOG_WARNING(Shader, "(STUBBED) called");
+ // Return standard format (0x00ff0000)
ctx.Add("MOV.S {}.x,0x00ff0000;", inst);
+ break;
}
}
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_context_get_set.cpp b/src/shader_recompiler/backend/glsl/emit_glsl_context_get_set.cpp
index 2e369ed72..fea325df9 100644
--- a/src/shader_recompiler/backend/glsl/emit_glsl_context_get_set.cpp
+++ b/src/shader_recompiler/backend/glsl/emit_glsl_context_get_set.cpp
@@ -426,9 +426,15 @@ void EmitInvocationInfo(EmitContext& ctx, IR::Inst& inst) {
case Stage::TessellationEval:
ctx.AddU32("{}=uint(gl_PatchVerticesIn)<<16;", inst);
break;
+ case Stage::Fragment:
+ // Return sample mask in upper 16 bits
+ ctx.AddU32("{}=uint(gl_SampleMaskIn[0])<<16;", inst);
+ break;
+ case Stage::Compute:
default:
- LOG_WARNING(Shader, "(STUBBED) called");
- ctx.AddU32("{}=uint(0x00ff0000);", inst);
+ // Return standard format (0x00ff0000)
+ ctx.AddU32("{}=0x00ff0000u;", inst);
+ break;
}
}
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
index feca5105f..64f828107 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
@@ -549,8 +549,15 @@ Id EmitInvocationInfo(EmitContext& ctx) {
case Stage::TessellationEval:
return ctx.OpShiftLeftLogical(ctx.U32[1], ctx.OpLoad(ctx.U32[1], ctx.patch_vertices_in),
ctx.Const(16u));
+ case Stage::Fragment:
+ // Return sample mask in upper 16 bits
+ return ctx.OpShiftLeftLogical(ctx.U32[1], ctx.OpLoad(ctx.U32[1], ctx.sample_mask),
+ ctx.Const(16u));
+ case Stage::Compute:
+ // For compute shaders, return standard format since we can't access workgroup size directly
+ return ctx.Const(0x00ff0000u);
default:
- LOG_WARNING(Shader, "(STUBBED) called");
+ // For other stages, return the standard invocation info format
return ctx.Const(0x00ff0000u);
}
}