This commit is contained in:
nmzik
2026-07-28 02:52:15 +02:00
parent ec11f31aa6
commit a21d1aaa47
+12 -2
View File
@@ -4069,13 +4069,22 @@ void TestNewShaderRecompilerVintrpLowering() {
CheckSpirvBinaryValidates(no_perspective_result.spirv); 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() { void TestGraphicsCreateInterpolantMapping() {
ShaderRegister regs[32] = {}; ShaderRegister regs[32] = {};
Check(Gen5::GraphicsCreateInterpolantMapping(regs, nullptr, nullptr) == 0, Check(Gen5::GraphicsCreateInterpolantMapping(regs, nullptr, nullptr) == 0,
"null pixel shader interpolant mapping failed"); "null pixel shader interpolant mapping failed");
for (uint32_t i = 0; i < 32u; i++) { 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"); "identity interpolant register offset was unexpected");
Check(regs[i].value == i, "identity interpolant register value 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[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[2].value == 0x0000052cu, "flat/custom interpolant mapping bits were unexpected");
Check(regs[3].value == 0x01580304u, "f16 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"); "interpolant identity tail was not filled");
} }
@@ -6966,6 +6975,7 @@ int main() {
TestNewShaderRecompilerStorageImage2DDescriptorOverridesMimg3D(); TestNewShaderRecompilerStorageImage2DDescriptorOverridesMimg3D();
TestNewShaderRecompilerImageAtomicLowering(); TestNewShaderRecompilerImageAtomicLowering();
TestNewShaderRecompilerVintrpLowering(); TestNewShaderRecompilerVintrpLowering();
TestPsInputCountRegisterDecode();
TestNewShaderRecompilerWideMemoryLowering(); TestNewShaderRecompilerWideMemoryLowering();
TestNewShaderRecompilerBufferSignedLoadLowering(); TestNewShaderRecompilerBufferSignedLoadLowering();
TestNewShaderRecompilerBufferSubDwordStoreLowering(); TestNewShaderRecompilerBufferSubDwordStoreLowering();