mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-28 13:56:59 +01:00
tests: run the saveexec mask cases in a populated subgroup (#876)
tests: run saveexec masks in a populated subgroup Co-authored-by: Matthew Hurley <171001439+theantipopau@users.noreply.github.com>
This commit is contained in:
@@ -17910,15 +17910,22 @@ TestCase ScalarSaveExecOps() {
|
|||||||
AppendStoreSgpr(&code, 253, 12);
|
AppendStoreSgpr(&code, 253, 12);
|
||||||
AppendEnd(&code);
|
AppendEnd(&code);
|
||||||
|
|
||||||
return {"ScalarSaveExecOps",
|
TestCase test;
|
||||||
code,
|
test.name = "ScalarSaveExecOps";
|
||||||
{},
|
test.code = code;
|
||||||
{1, 0, 1, 0, 0xffffffffu, 0xffffffffu, 0xffffffffu,
|
// A full wave enters with EXEC set for all 64 lanes, so the two saved EXEC
|
||||||
3, 0xffffffffu, 3, 2, 0xffffffffu, 1},
|
// pairs are 0xffffffff/0xffffffff rather than the 1/0 a single-invocation
|
||||||
{O::S_MOV_B32, O::S_AND_SAVEEXEC_B64, O::S_ORN2_SAVEEXEC_B64,
|
// dispatch would report.
|
||||||
O::S_ANDN1_SAVEEXEC_B64, O::S_AND_SAVEEXEC_B32,
|
test.expected = {0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu,
|
||||||
O::S_ANDN1_SAVEEXEC_B32, O::S_MOV_B64, O::V_MOV_B32,
|
0xffffffffu, 0xffffffffu, 0xffffffffu, 3, 0xffffffffu,
|
||||||
O::BUFFER_STORE_DWORD, O::S_ENDPGM}};
|
3, 2, 0xffffffffu, 1};
|
||||||
|
test.opcodes = {O::S_MOV_B32, O::S_AND_SAVEEXEC_B64, O::S_ORN2_SAVEEXEC_B64,
|
||||||
|
O::S_ANDN1_SAVEEXEC_B64, O::S_AND_SAVEEXEC_B32,
|
||||||
|
O::S_ANDN1_SAVEEXEC_B32, O::S_MOV_B64, O::V_MOV_B32,
|
||||||
|
O::BUFFER_STORE_DWORD, O::S_ENDPGM};
|
||||||
|
test.compute_info.threads_num[0] = 64;
|
||||||
|
test.has_compute_info = true;
|
||||||
|
return test;
|
||||||
}
|
}
|
||||||
|
|
||||||
TestCase ScalarOrn2SaveexecUsesSourceOrNotExec() {
|
TestCase ScalarOrn2SaveexecUsesSourceOrNotExec() {
|
||||||
@@ -17938,12 +17945,18 @@ TestCase ScalarOrn2SaveexecUsesSourceOrNotExec() {
|
|||||||
AppendStoreSgpr(&code, 253, 4);
|
AppendStoreSgpr(&code, 253, 4);
|
||||||
AppendEnd(&code);
|
AppendEnd(&code);
|
||||||
|
|
||||||
return {"ScalarOrn2SaveexecUsesSourceOrNotExec",
|
TestCase test;
|
||||||
code,
|
test.name = "ScalarOrn2SaveexecUsesSourceOrNotExec";
|
||||||
{},
|
test.code = code;
|
||||||
{0x0000000cu, 0x80000000u, 0xfffffff3u, 0x7fffffffu, 1},
|
test.expected = {0x0000000cu, 0x80000000u, 0xfffffff3u, 0x7fffffffu, 1};
|
||||||
{O::S_MOV_B32, O::S_ORN2_SAVEEXEC_B64, O::S_MOV_B64, O::V_MOV_B32,
|
test.opcodes = {O::S_MOV_B32, O::S_ORN2_SAVEEXEC_B64, O::S_MOV_B64, O::V_MOV_B32,
|
||||||
O::BUFFER_STORE_DWORD, O::S_ENDPGM}};
|
O::BUFFER_STORE_DWORD, O::S_ENDPGM};
|
||||||
|
// The case reads a whole 64-bit EXEC mask, so it needs a populated subgroup.
|
||||||
|
// A 1x1x1 dispatch leaves OpGroupNonUniformBallot with a single invocation
|
||||||
|
// and every lane above zero reads back as zero.
|
||||||
|
test.compute_info.threads_num[0] = 64;
|
||||||
|
test.has_compute_info = true;
|
||||||
|
return test;
|
||||||
}
|
}
|
||||||
|
|
||||||
TestCase ScalarOrn2SaveexecB32(u32 wave_size, u32 threads) {
|
TestCase ScalarOrn2SaveexecB32(u32 wave_size, u32 threads) {
|
||||||
|
|||||||
Reference in New Issue
Block a user