From e9e1806a2eed2b8e467f528c91cd670378e227ee Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Tue, 14 Feb 2023 16:46:33 +0100 Subject: [PATCH] r600/sfn: Add test for multiple index load Signed-off-by: Gert Wollny Part-of: --- .../tests/sfn_split_address_loads_test.cpp | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/src/gallium/drivers/r600/sfn/tests/sfn_split_address_loads_test.cpp b/src/gallium/drivers/r600/sfn/tests/sfn_split_address_loads_test.cpp index 026c805aa3b..8177b4c7193 100644 --- a/src/gallium/drivers/r600/sfn/tests/sfn_split_address_loads_test.cpp +++ b/src/gallium/drivers/r600/sfn/tests/sfn_split_address_loads_test.cpp @@ -536,4 +536,84 @@ BLOCK_END check(schedule(sh), expect); } +TEST_F(TestShaderFromNir, SplitLoadIndexTwoTimesOptAndSchedule) +{ + const char *input = +R"( +FS +CHIPCLASS CAYMAN +PROP MAX_COLOR_EXPORTS:1 +PROP COLOR_EXPORTS:1 +PROP COLOR_EXPORT_MASK:15 +PROP WRITE_ALL_COLORS:0 +OUTPUT LOC:0 NAME:1 MASK:15 +SHADER +BLOCK_START + ALU MIN_UINT S3.x@free : KC0[0].x L[0x2] {W} + ALU MIN_UINT S3.y@free : KC0[0].y L[0x2] {W} + ALU MIN_UINT S3.z@free : KC0[0].z L[0x2] {W} + ALU MIN_UINT S3.w@free : KC0[0].w L[0x2] {WL} + ALU MOV S4.x@group : KC1[S3.x@free{s}][0].x {W} + ALU MOV S4.y@group : KC1[S3.y@free{s}][0].y {W} + ALU MOV S4.z@group : KC1[S3.z@free{s}][0].z {W} + ALU MOV S4.w@group : KC1[S3.w@free{s}][0].w {WL} + EXPORT_DONE PIXEL 0 S4.xyzw +BLOCK_END +)"; + + const char *expect = +R"( +FS +CHIPCLASS CAYMAN +PROP MAX_COLOR_EXPORTS:1 +PROP COLOR_EXPORTS:1 +PROP COLOR_EXPORT_MASK:15 +PROP WRITE_ALL_COLORS:0 +OUTPUT LOC:0 NAME:1 MASK:15 +SHADER +BLOCK_START +ALU_GROUP_BEGIN + ALU MIN_UINT S3.x@free : KC0[0].x L[0x2] {W} + ALU MIN_UINT S3.y@free : KC0[0].y L[0x2] {W} + ALU MIN_UINT S3.z@free : KC0[0].z L[0x2] {W} + ALU MIN_UINT S3.w@free : KC0[0].w L[0x2] {WL} +ALU_GROUP_END +ALU_GROUP_BEGIN + ALU MOVA_INT IDX0 : S3.x@free {L} +ALU_GROUP_END +BLOCK_END +BLOCK_START +ALU_GROUP_BEGIN + ALU MOVA_INT IDX1 : S3.y@free {L} +ALU_GROUP_END +BLOCK_END +BLOCK_START +ALU_GROUP_BEGIN + ALU MOV S4.x@chgr : KC1[IDX0][0].x {WL} +ALU_GROUP_END +ALU_GROUP_BEGIN + ALU MOVA_INT IDX0 : S3.z@free {} + ALU MOV S4.y@chgr : KC1[IDX1][0].y {WL} +ALU_GROUP_END +BLOCK_END +BLOCK_START +ALU_GROUP_BEGIN + ALU MOVA_INT IDX1 : S3.w@free {} + ALU MOV S4.z@chgr : KC1[IDX0][0].z {WL} +ALU_GROUP_END +BLOCK_END +BLOCK_START +ALU_GROUP_BEGIN + ALU MOV S4.w@chgr : KC1[IDX1][0].w {WL} +ALU_GROUP_END +BLOCK_END +BLOCK_START +EXPORT_DONE PIXEL 0 S4.xyzw +BLOCK_END +)"; + auto sh = from_string(input); + split_address_loads(*sh); + optimize(*sh); + check(schedule(sh), expect); +}