diff --git a/tests/shaderCfgTests.cpp b/tests/shaderCfgTests.cpp index 1a6f9db49..743c5e792 100644 --- a/tests/shaderCfgTests.cpp +++ b/tests/shaderCfgTests.cpp @@ -4069,13 +4069,22 @@ void TestNewShaderRecompilerVintrpLowering() { CheckSpirvBinaryValidates(no_perspective_result.spirv); } +void TestPsInputCountRegisterDecode() { + HW::Context context; + // NUM_INTERP is 3 while bit 14 is an independent control flag that must be preserved. + context.SetPsInControl(0x00004003u); + const auto ps_in_control = context.GetShaderRegisters().ps_in_control; + Check(ps_in_control == 0x00004003u, "SPI_PS_IN_CONTROL flags were not preserved"); + Check((ps_in_control & 0x3fu) == 3, "SPI_PS_IN_CONTROL NUM_INTERP decoding failed"); +} + void TestGraphicsCreateInterpolantMapping() { ShaderRegister regs[32] = {}; Check(Gen5::GraphicsCreateInterpolantMapping(regs, nullptr, nullptr) == 0, "null pixel shader interpolant mapping failed"); for (uint32_t i = 0; i < 32u; i++) { - Check(regs[i].offset == Pm4::SPI_PS_INPUT_CNTL_0 + i, + Check(regs[i].offset == Pm4::CX_PS_SHADER_USAGE_BASE + i, "identity interpolant register offset was unexpected"); Check(regs[i].value == i, "identity interpolant register value was unexpected"); } @@ -4117,7 +4126,7 @@ void TestGraphicsCreateInterpolantMapping() { Check(regs[1].value == 0x00000220u, "missing interpolant mapping did not use PS default value"); Check(regs[2].value == 0x0000052cu, "flat/custom interpolant mapping bits were unexpected"); Check(regs[3].value == 0x01580304u, "f16 interpolant mapping bits were unexpected"); - Check(regs[4].offset == Pm4::SPI_PS_INPUT_CNTL_0 + 4u && regs[4].value == 4u, + Check(regs[4].offset == Pm4::CX_PS_SHADER_USAGE_BASE + 4u && regs[4].value == 4u, "interpolant identity tail was not filled"); } @@ -6966,6 +6975,7 @@ int main() { TestNewShaderRecompilerStorageImage2DDescriptorOverridesMimg3D(); TestNewShaderRecompilerImageAtomicLowering(); TestNewShaderRecompilerVintrpLowering(); + TestPsInputCountRegisterDecode(); TestNewShaderRecompilerWideMemoryLowering(); TestNewShaderRecompilerBufferSignedLoadLowering(); TestNewShaderRecompilerBufferSubDwordStoreLowering();