1
0
Fork 1
forked from suyu/suyu

shader/other: Fix hardcoded value in S2R INVOCATION_INFO

Geometry shaders built from Nvidia's compiler check for bits[16:23] to
be less than or equal to 0 with VSETP to default to a "safe" value of
0x8000'0000 (safe from hardware's perspective). To avoid hitting this
path in the shader, return 0x00ff'0000 from S2R INVOCATION_INFO.

This seems to be the maximum number of vertices a geometry shader can
emit in a primitive.
This commit is contained in:
ReinUsesLisp 2020-05-29 20:21:48 -03:00
parent 1bb3122c1f
commit f2d1aa97ad

View file

@ -83,7 +83,7 @@ u32 ShaderIR::DecodeOther(NodeBlock& bb, u32 pc) {
return Operation(OperationCode::YNegate); return Operation(OperationCode::YNegate);
case SystemVariable::InvocationInfo: case SystemVariable::InvocationInfo:
LOG_WARNING(HW_GPU, "S2R instruction with InvocationInfo is incomplete"); LOG_WARNING(HW_GPU, "S2R instruction with InvocationInfo is incomplete");
return Immediate(0U); return Immediate(0x00ff'0000U);
case SystemVariable::WscaleFactorXY: case SystemVariable::WscaleFactorXY:
UNIMPLEMENTED_MSG("S2R WscaleFactorXY is not implemented"); UNIMPLEMENTED_MSG("S2R WscaleFactorXY is not implemented");
return Immediate(0U); return Immediate(0U);