From 0bef566fba00aff39c871521bb9fa4e3cea63a52 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Thu, 21 Jul 2022 12:04:23 -0400 Subject: [PATCH] pan/bi: Model 3rd source for ATEST ATEST on Valhall takes atest-param as an explicit encoded source. The source also exists on Bifrost, but it's implied in the encoding. Rather than treating it as a "ghost" source, model it in the IR explicitly so the count is correct. Signed-off-by: Alyssa Rosenzweig Part-of: --- src/panfrost/bifrost/ISA.xml | 3 +++ src/panfrost/bifrost/bifrost_compile.c | 7 ++----- .../bifrost/valhall/test/test-insert-flow.cpp | 3 ++- .../bifrost/valhall/test/test-merge-flow.cpp | 10 ++++++---- .../bifrost/valhall/test/test-packing.cpp | 15 +++++++-------- 5 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/panfrost/bifrost/ISA.xml b/src/panfrost/bifrost/ISA.xml index b89d411cce2..a0a0fd1dd78 100644 --- a/src/panfrost/bifrost/ISA.xml +++ b/src/panfrost/bifrost/ISA.xml @@ -2496,6 +2496,9 @@ + + none diff --git a/src/panfrost/bifrost/bifrost_compile.c b/src/panfrost/bifrost/bifrost_compile.c index c8b54462c65..cb70f3a5eae 100644 --- a/src/panfrost/bifrost/bifrost_compile.c +++ b/src/panfrost/bifrost/bifrost_compile.c @@ -859,12 +859,9 @@ bi_skip_atest(bi_context *ctx, bool emit_zs) static void bi_emit_atest(bi_builder *b, bi_index alpha) { - bi_instr *atest = bi_atest_to(b, bi_temp(b->shader), bi_coverage(b), alpha); + b->shader->coverage = bi_atest(b, bi_coverage(b), alpha, + bi_fau(BIR_FAU_ATEST_PARAM, false)); b->shader->emitted_atest = true; - b->shader->coverage = atest->dest[0]; - - /* Pseudo-source to encode in the tuple */ - atest->src[2] = bi_fau(BIR_FAU_ATEST_PARAM, false); } static void diff --git a/src/panfrost/bifrost/valhall/test/test-insert-flow.cpp b/src/panfrost/bifrost/valhall/test/test-insert-flow.cpp index 5ee55f1fb1d..228eee34635 100644 --- a/src/panfrost/bifrost/valhall/test/test-insert-flow.cpp +++ b/src/panfrost/bifrost/valhall/test/test-insert-flow.cpp @@ -109,7 +109,8 @@ TEST_F(InsertFlow, AtestWait6AndWait0After) { flow(DISCARD); bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0)); flow(WAIT0126); - bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5)); + bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5), + bi_fau(BIR_FAU_ATEST_PARAM, false)); flow(WAIT0); flow(END); }); diff --git a/src/panfrost/bifrost/valhall/test/test-merge-flow.cpp b/src/panfrost/bifrost/valhall/test/test-merge-flow.cpp index d5dbc8cb4a8..a02600bb31d 100644 --- a/src/panfrost/bifrost/valhall/test/test-merge-flow.cpp +++ b/src/panfrost/bifrost/valhall/test/test-merge-flow.cpp @@ -53,6 +53,7 @@ class MergeFlow : public testing::Test { protected: MergeFlow() { mem_ctx = ralloc_context(NULL); + atest = bi_fau(BIR_FAU_ATEST_PARAM, false); } ~MergeFlow() { @@ -61,6 +62,7 @@ protected: void *mem_ctx; bi_instr *I; + bi_index atest; }; TEST_F(MergeFlow, End) { @@ -101,12 +103,12 @@ TEST_F(MergeFlow, TrivialWait) { CASE({ bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0)); flow(WAIT0126); - bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5)); + bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5), atest); }, { I = bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0)); I->flow = VA_FLOW_WAIT0126; - bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5)); + bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5), atest); }); } @@ -269,7 +271,7 @@ TEST_F(MergeFlow, DeletePointlessDiscard) { flow(DISCARD); flow(WAIT0); flow(WAIT0126); - bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5)); + bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5), atest); flow(WAIT); bi_blend_to(b, bi_register(0), bi_register(4), bi_register(5), bi_register(6), bi_register(7), bi_register(8), @@ -283,7 +285,7 @@ TEST_F(MergeFlow, DeletePointlessDiscard) { BI_REGISTER_FORMAT_F32, false, false, BI_VA_LOD_MODE_COMPUTED_LOD, BI_WRITE_MASK_RGBA, 4); I->flow = VA_FLOW_WAIT0126; - I = bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5)); + I = bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5), atest); I->flow = VA_FLOW_WAIT; I = bi_blend_to(b, bi_register(0), bi_register(4), bi_register(5), bi_register(6), bi_register(7), bi_register(8), diff --git a/src/panfrost/bifrost/valhall/test/test-packing.cpp b/src/panfrost/bifrost/valhall/test/test-packing.cpp index 932be2a09b7..5305b151e4e 100644 --- a/src/panfrost/bifrost/valhall/test/test-packing.cpp +++ b/src/panfrost/bifrost/valhall/test/test-packing.cpp @@ -193,17 +193,16 @@ TEST_F(ValhallPacking, Mux) { } TEST_F(ValhallPacking, AtestFP16) { - bi_instr *I = bi_atest_to(b, bi_register(60), bi_register(60), - bi_half(bi_register(1), true)); - I->src[2] = bi_fau(BIR_FAU_ATEST_PARAM, false); - - CASE(I, 0x007dbc0208ea013c); + CASE(bi_atest_to(b, bi_register(60), bi_register(60), + bi_half(bi_register(1), true), + bi_fau(BIR_FAU_ATEST_PARAM, false)), + 0x007dbc0208ea013c); } TEST_F(ValhallPacking, AtestFP32) { - bi_instr *I = bi_atest_to(b, bi_register(60), bi_register(60), one); - I->src[2] = bi_fau(BIR_FAU_ATEST_PARAM, false); - CASE(I, 0x007dbc0200ead03c); + CASE(bi_atest_to(b, bi_register(60), bi_register(60), one, + bi_fau(BIR_FAU_ATEST_PARAM, false)), + 0x007dbc0200ead03c); } TEST_F(ValhallPacking, Transcendentals) {