pan/bi: Model 3rd source for ATEST
authorAlyssa Rosenzweig <alyssa@collabora.com>
Thu, 21 Jul 2022 16:04:23 +0000 (12:04 -0400)
committerMarge Bot <emma+marge@anholt.net>
Fri, 2 Sep 2022 16:03:23 +0000 (16:03 +0000)
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 <alyssa@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17794>

src/panfrost/bifrost/ISA.xml
src/panfrost/bifrost/bifrost_compile.c
src/panfrost/bifrost/valhall/test/test-insert-flow.cpp
src/panfrost/bifrost/valhall/test/test-merge-flow.cpp
src/panfrost/bifrost/valhall/test/test-packing.cpp

index b89d411..a0a0fd1 100644 (file)
   <ins name="+ATEST" staging="w=1" mask="0xfff00" exact="0xc8f00" message="atest" table="true">
     <src start="0" mask="0xf7"/>
     <src start="3" mask="0xf7"/>
+    <!-- ATEST parameter datum. Implicitly encoded into the tuple on Bifrost.
+         Real source on Valhall. -->
+    <src start="6" pseudo="true"/>
     <mod name="widen1" start="6" size="2">
       <reserved/>
       <opt>none</opt>
index c8b5446..cb70f3a 100644 (file)
@@ -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
index 5ee55f1..228eee3 100644 (file)
@@ -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);
    });
index d5dbc8c..a02600b 100644 (file)
@@ -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),
index 932be2a..5305b15 100644 (file)
@@ -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) {