mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-02 15:20:26 +01:00
r600/sfn: Add more tests and update to use address splits
Signed-off-by: Gert Wollny <gert.wollny@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21347>
This commit is contained in:
parent
d617052db6
commit
f4816d2a72
4 changed files with 221 additions and 20 deletions
|
|
@ -171,19 +171,19 @@ TEST_F(LiveRangeTests, SimpleArrayAccess)
|
|||
|
||||
LiveRangeMap expect = vf.prepare_live_range_map();
|
||||
|
||||
expect.set_life_range(*array->element(0, nullptr, 0), 0, 4);
|
||||
expect.set_life_range(*array->element(0, nullptr, 1), 0, 4);
|
||||
expect.set_life_range(*array->element(1, nullptr, 0), 0, 4);
|
||||
expect.set_life_range(*array->element(0, nullptr, 0), 0, 5);
|
||||
expect.set_life_range(*array->element(0, nullptr, 1), 0, 5);
|
||||
expect.set_life_range(*array->element(1, nullptr, 0), 0, 5);
|
||||
|
||||
expect.set_life_range(*array->element(1, nullptr, 1), 0, 4);
|
||||
expect.set_life_range(*array->element(1, nullptr, 1), 0, 5);
|
||||
|
||||
expect.set_life_range(*s1, 2, 3);
|
||||
|
||||
expect.set_life_range(*s2x, 4, 5);
|
||||
expect.set_life_range(*s2y, 4, 5);
|
||||
expect.set_life_range(*s2x, 5, 6);
|
||||
expect.set_life_range(*s2y, 5, 6);
|
||||
|
||||
expect.set_life_range(*s3[0], 5, 6);
|
||||
expect.set_life_range(*s3[1], 5, 6);
|
||||
expect.set_life_range(*s3[0], 6, 7);
|
||||
expect.set_life_range(*s3[1], 6, 7);
|
||||
|
||||
check(shader_with_dest_array2_scheduled, expect);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#include "../sfn_ra.h"
|
||||
#include "../sfn_scheduler.h"
|
||||
#include "../sfn_shader.h"
|
||||
#include "../sfn_split_address_loads.h"
|
||||
#include "sfn_test_shaders.h"
|
||||
|
||||
using namespace r600;
|
||||
|
|
@ -136,12 +137,14 @@ TEST_F(TestShaderFromNir, OptimizeWithDestArrayValue)
|
|||
TEST_F(TestShaderFromNir, ScheduleOPtimizedWithDestArrayValue)
|
||||
{
|
||||
auto sh = from_string(shader_with_dest_array_opt_expect);
|
||||
split_address_loads(*sh);
|
||||
check(schedule(sh), shader_with_dest_array_opt_scheduled);
|
||||
}
|
||||
|
||||
TEST_F(TestShaderFromNir, ScheduleWithArrayWriteAndRead)
|
||||
{
|
||||
auto sh = from_string(shader_with_dest_array2);
|
||||
split_address_loads(*sh);
|
||||
check(schedule(sh), shader_with_dest_array2_scheduled);
|
||||
}
|
||||
|
||||
|
|
@ -409,3 +412,62 @@ BLOCK_END
|
|||
optimize(*sh);
|
||||
check(sh, expect);
|
||||
};
|
||||
|
||||
TEST_F(TestShaderFromNir, ScheduleSplitLoadIndexConst)
|
||||
{
|
||||
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.w@free{s} : KC0[0].x L[0x2] {WL}
|
||||
ALU MOVA_INT IDX0 : S3.w@free{s} {}
|
||||
ALU MOV S4.x@group{s} : KC1[IDX0][0].x {W}
|
||||
ALU MOV S4.y@group{s} : KC1[IDX0][0].y {W}
|
||||
ALU MOV S4.z@group{s} : KC1[IDX0][0].z {W}
|
||||
ALU MOV S4.w@group{s} : KC1[IDX0][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.w@free{s} : KC0[0].x L[0x2] {WL}
|
||||
ALU_GROUP_END
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOVA_INT IDX0 : S3.w@free{s} {L}
|
||||
ALU_GROUP_END
|
||||
BLOCK_END
|
||||
BLOCK_START
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOV S4.x@chgr : KC1[IDX0][0].x {W}
|
||||
ALU MOV S4.y@chgr : KC1[IDX0][0].y {W}
|
||||
ALU MOV S4.z@chgr : KC1[IDX0][0].z {W}
|
||||
ALU MOV S4.w@chgr : KC1[IDX0][0].w {WL}
|
||||
ALU_GROUP_END
|
||||
ALU_GROUP_BEGIN
|
||||
BLOCK_END
|
||||
BLOCK_START
|
||||
EXPORT_DONE PIXEL 0 S4.xyzw
|
||||
BLOCK_END
|
||||
)";
|
||||
|
||||
auto sh = from_string(input);
|
||||
check(schedule(sh), expect);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -408,5 +408,132 @@ BLOCK_END
|
|||
}
|
||||
|
||||
|
||||
TEST_F(TestShaderFromNir, SplitLoadIndexConstOptAndSchedule)
|
||||
{
|
||||
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.w@free : KC0[0].x L[0x2] {WL}
|
||||
ALU MOV S4.x@group : KC1[S3.w@free{s}][0].x {W}
|
||||
ALU MOV S4.y@group : KC1[S3.w@free{s}][0].y {W}
|
||||
ALU MOV S4.z@group : KC1[S3.w@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.w@free : KC0[0].x L[0x2] {WL}
|
||||
ALU_GROUP_END
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOVA_INT IDX0 : S3.w@free {L}
|
||||
ALU_GROUP_END
|
||||
BLOCK_END
|
||||
BLOCK_START
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOV S4.x@chgr : KC1[IDX0][0].x {W}
|
||||
ALU MOV S4.y@chgr : KC1[IDX0][0].y {W}
|
||||
ALU MOV S4.z@chgr : KC1[IDX0][0].z {W}
|
||||
ALU MOV S4.w@chgr : KC1[IDX0][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);
|
||||
}
|
||||
|
||||
TEST_F(TestShaderFromNir, SplitLoadWithNonAlu)
|
||||
{
|
||||
const char *input =
|
||||
R"(
|
||||
FS
|
||||
CHIPCLASS EVERGREEN
|
||||
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 MOV S0.x@free : KC0[1].x {W}
|
||||
ALU MOV S0.y@free : KC0[1].y {W}
|
||||
ALU MOV S2.w@free : KC0[0].x {WL}
|
||||
TEX SAMPLE S3.xyzw : S0.xy__ RID:0 SID:0 NNNN
|
||||
ALU ADD S4.x@group : KC1[S2.w@free{s}][0].x S3.x {W}
|
||||
ALU ADD S4.y@group : KC1[S2.w@free{s}][0].y S3.y {W}
|
||||
ALU ADD S4.z@group : KC1[S2.w@free{s}][0].z S3.z {W}
|
||||
ALU ADD S4.w@group : KC1[S2.w@free{s}][0].w S3.w {WL}
|
||||
EXPORT_DONE PIXEL 0 S4.xyzw
|
||||
BLOCK_END
|
||||
)";
|
||||
|
||||
const char *expect =
|
||||
R"(
|
||||
FS
|
||||
CHIPCLASS EVERGREEN
|
||||
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 MOV S0.x@free : KC0[1].x {W}
|
||||
ALU MOV S0.y@free : KC0[1].y {WL}
|
||||
ALU_GROUP_END
|
||||
BLOCK_END
|
||||
BLOCK_START
|
||||
TEX SAMPLE S3.xyzw : S0.xy__ RID:0 SID:0 NNNN
|
||||
BLOCK_END
|
||||
BLOCK_START
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOVA_INT AR : KC0[0].x {L}
|
||||
ALU_GROUP_END
|
||||
ALU_GROUP_BEGIN
|
||||
ALU SET_CF_IDX0 IDX0 : AR {L}
|
||||
ALU_GROUP_END
|
||||
BLOCK_END
|
||||
BLOCK_START
|
||||
ALU_GROUP_BEGIN
|
||||
ALU ADD S4.x@chgr : KC1[IDX0][0].x S3.x {W}
|
||||
ALU ADD S4.y@chgr : KC1[IDX0][0].y S3.y {W}
|
||||
ALU ADD S4.z@chgr : KC1[IDX0][0].z S3.z {W}
|
||||
ALU ADD S4.w@chgr : KC1[IDX0][0].w S3.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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1908,9 +1908,9 @@ IF (( ALU PRED_SETGE_INT __.x@free : KC0[0].x L[0x4] {LEP} PUSH_BEFORE ))
|
|||
ALU MOV A2[S34.x].z : I[0] {W}
|
||||
ALU MOV A2[S34.x].w : L[0x3dcccccd] {WL}
|
||||
ELSE
|
||||
ALU MOV S37.x : KC0[0].x {WL}
|
||||
ALU MOV A2[S37.x].x : I[0] {W}
|
||||
ALU MOV A2[S37.x].y : L[0x3dcccccd] {WL}
|
||||
ALU MOV S37.x : KC0[0].x {WL}
|
||||
ALU MOV A2[S37.x].x : I[0] {W}
|
||||
ALU MOV A2[S37.x].y : L[0x3dcccccd] {WL}
|
||||
ENDIF
|
||||
EXPORT_DONE POS 0 S19.xyzw
|
||||
ALU MOV S46.x@group : A2[0].x {W}
|
||||
|
|
@ -2003,16 +2003,22 @@ IF (( ALU PRED_SETGE_INT __.x@free : KC0[0].x L[0x4] {LEP} PUSH_BEFORE ))
|
|||
ALU ADD_INT S34.x : KC0[0].x L[0xfffffffc] {WL}
|
||||
ALU_GROUP_END
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOV A2[S34.x].z : I[0] {W}
|
||||
ALU MOV A2[S34.x].w : L[0x3dcccccd] {WL}
|
||||
ALU MOVA_INT AR : S34.x {L}
|
||||
ALU_GROUP_END
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOV A2[AR].z : I[0] {W}
|
||||
ALU MOV A2[AR].w : L[0x3dcccccd] {WL}
|
||||
ALU_GROUP_END
|
||||
ELSE
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOV S37.x : KC0[0].x {WL}
|
||||
ALU MOV S37.x : KC0[0].x {WL}
|
||||
ALU_GROUP_END
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOV A2[S37.x].x : I[0] {W}
|
||||
ALU MOV A2[S37.x].y : L[0x3dcccccd] {WL}
|
||||
ALU MOVA_INT AR : S37.x {L}
|
||||
ALU_GROUP_END
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOV A2[AR].x : I[0] {W}
|
||||
ALU MOV A2[AR].y : L[0x3dcccccd] {WL}
|
||||
ALU_GROUP_END
|
||||
ENDIF
|
||||
ALU_GROUP_BEGIN
|
||||
|
|
@ -2098,8 +2104,11 @@ ALU_GROUP_BEGIN
|
|||
ALU MOV A0[1].y : KC0[1].y {WL}
|
||||
ALU_GROUP_END
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOV A0[S1.x].x : I[1.0] {W}
|
||||
ALU MOV A0[S1.x].y : L[2.0] {WL}
|
||||
ALU MOVA_INT AR : S1.x {L}
|
||||
ALU_GROUP_END
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOV A0[AR].x : I[1.0] {W}
|
||||
ALU MOV A0[AR].y : L[2.0] {WL}
|
||||
ALU_GROUP_END
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOV S2.x : A0[0].x {W}
|
||||
|
|
@ -2136,8 +2145,11 @@ ALU_GROUP_BEGIN
|
|||
ALU MOV A0[1].y : KC0[1].y {WL}
|
||||
ALU_GROUP_END
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOV A0[R2.x].x : I[1.0] {W}
|
||||
ALU MOV A0[R2.x].y : L[2.0] {WL}
|
||||
ALU MOVA_INT AR : R2.x {L}
|
||||
ALU_GROUP_END
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOV A0[AR].x : I[1.0] {W}
|
||||
ALU MOV A0[AR].y : L[2.0] {WL}
|
||||
ALU_GROUP_END
|
||||
ALU_GROUP_BEGIN
|
||||
ALU MOV R2.x : A0[0].x {W}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue