mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-20 10:56:58 +02:00
shader: fold the lane test after a pixel shader's entry s_wqm (#801)
Preserve live lane predicates through RDNA2 whole-quad expansion Keep the source-live predicate when WQM expands a scalar mask, so entry masks remain known live without an instruction pre-scan. Preserve scalar mask values, SCC, half writes, and raw-source behavior. Cover entry pixel masks, cross-half copies, and scalar/high-word sources with existing shader regression suites. Co-authored-by: nmzik <Nmzik@mail.ru> Co-authored-by: Douglas <douglasproducoes21@gmail.com>
This commit is contained in:
committed by
GitHub
parent
84d015120c
commit
fcf0f3b67e
@@ -11508,6 +11508,27 @@ void TestNewShaderRecompilerVertexExportUsesInvocationExecMask() {
|
||||
}
|
||||
|
||||
void TestNewShaderRecompilerPerInvocationMasksWithoutMirrors() {
|
||||
for (uint32_t wave_size : {32u, 64u}) {
|
||||
for (uint32_t opcode : {0x09u, 0x0au}) {
|
||||
for (uint32_t source : {126u, 8u}) {
|
||||
const uint32_t pixel_shader[] = {
|
||||
EncodeSop1(0x04, 8, 126), // Save the entry live mask.
|
||||
EncodeSop1(opcode, 126, source),
|
||||
EncodeVop1(0x01, 0, 242), // v_mov_b32 v0, 1.0
|
||||
EncodeExp0(0x00, 0x1), EncodeExp1(0, 0, 0, 0),
|
||||
EncodeSopp(0x01),
|
||||
};
|
||||
auto pixel_options = MakeCompileOptions(ShaderType::Pixel);
|
||||
pixel_options.wave_size = wave_size;
|
||||
const auto pixel_result = RecompileForTest(pixel_shader, pixel_options);
|
||||
CheckSpirvBinaryValidates(pixel_result.spirv);
|
||||
Check(DisassembleSpirvBinary(pixel_result.spirv).find("OpGroupNonUniformBallot") ==
|
||||
std::string::npos,
|
||||
"entry WQM lost the known live predicate through a scalar ballot");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const uint32_t local_shader[] = {
|
||||
EncodeVopc(0xc1, 5 + 256, 8), // v_cmp_lt_u32 vcc, v5, v8
|
||||
EncodeSop2(0x0f, 2, 126, 106), // s_and_b64 s[2:3], exec, vcc
|
||||
|
||||
Reference in New Issue
Block a user