Mesa (main): pan/va: Simplify insert flow tests

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jun 21 22:41:34 UTC 2022


Module: Mesa
Branch: main
Commit: 7fa545528d02091447d9c70759cd2b377e9a2cad
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7fa545528d02091447d9c70759cd2b377e9a2cad

Author: Alyssa Rosenzweig <alyssa at collabora.com>
Date:   Thu Jun 16 14:34:41 2022 -0400

pan/va: Simplify insert flow tests

Test cases for insert flow are necessarily the reference test cases with the
NOPs stripped out. That means we don't need to duplicate the test bodies.
Deduplicate.

Signed-off-by: Alyssa Rosenzweig <alyssa at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17091>

---

 .../bifrost/valhall/test/test-insert-flow.cpp      | 178 ++++++---------------
 1 file changed, 49 insertions(+), 129 deletions(-)

diff --git a/src/panfrost/bifrost/valhall/test/test-insert-flow.cpp b/src/panfrost/bifrost/valhall/test/test-insert-flow.cpp
index 4a31a2b6527..57b547d7c9b 100644
--- a/src/panfrost/bifrost/valhall/test/test-insert-flow.cpp
+++ b/src/panfrost/bifrost/valhall/test/test-insert-flow.cpp
@@ -28,7 +28,16 @@
 
 #include <gtest/gtest.h>
 
-#define CASE(shader_stage, test, expected) do { \
+static void
+strip_nops(bi_context *ctx)
+{
+   bi_foreach_instr_global_safe(ctx, I) {
+      if (I->op == BI_OPCODE_NOP)
+         bi_remove_instruction(I);
+   }
+}
+
+#define CASE(shader_stage, test) do { \
    bi_builder *A = bit_builder(mem_ctx); \
    bi_builder *B = bit_builder(mem_ctx); \
    { \
@@ -36,11 +45,12 @@
       A->shader->stage = MESA_SHADER_ ## shader_stage; \
       test; \
    } \
+   strip_nops(A->shader); \
    va_insert_flow_control_nops(A->shader); \
    { \
       UNUSED bi_builder *b = B; \
       B->shader->stage = MESA_SHADER_ ## shader_stage; \
-      expected; \
+      test; \
    } \
    ASSERT_SHADER_EQUAL(A->shader, B->shader); \
 } while(0)
@@ -61,17 +71,11 @@ protected:
 };
 
 TEST_F(InsertFlow, PreserveEmptyShader) {
-   CASE(FRAGMENT, {}, {});
+   CASE(FRAGMENT, {});
 }
 
 TEST_F(InsertFlow, TilebufferWait7) {
    CASE(FRAGMENT, {
-        bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
-        bi_blend_to(b, bi_register(0), bi_register(4), bi_register(5),
-                    bi_register(6), bi_register(7), bi_register(8),
-                    BI_REGISTER_FORMAT_AUTO, 4, 4);
-   },
-   {
         flow(DISCARD);
         bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
         flow(WAIT);
@@ -82,11 +86,6 @@ TEST_F(InsertFlow, TilebufferWait7) {
    });
 
    CASE(FRAGMENT, {
-        bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
-        bi_st_tile(b, bi_register(0), bi_register(4), bi_register(5),
-                    bi_register(6), BI_REGISTER_FORMAT_AUTO, BI_VECSIZE_V4);
-   },
-   {
         flow(DISCARD);
         bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
         flow(WAIT);
@@ -96,11 +95,6 @@ TEST_F(InsertFlow, TilebufferWait7) {
    });
 
    CASE(FRAGMENT, {
-        bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
-        bi_ld_tile_to(b, bi_register(0), bi_register(4), bi_register(5),
-                    bi_register(6), BI_REGISTER_FORMAT_AUTO, BI_VECSIZE_V4);
-   },
-   {
         flow(DISCARD);
         bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
         flow(WAIT);
@@ -112,10 +106,6 @@ TEST_F(InsertFlow, TilebufferWait7) {
 
 TEST_F(InsertFlow, AtestWait6) {
    CASE(FRAGMENT, {
-        bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
-        bi_atest_to(b, bi_register(0), bi_register(4), bi_register(5));
-   },
-   {
         flow(DISCARD);
         bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
         flow(WAIT0126);
@@ -126,11 +116,6 @@ TEST_F(InsertFlow, AtestWait6) {
 
 TEST_F(InsertFlow, ZSEmitWait6) {
    CASE(FRAGMENT, {
-        bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
-        bi_zs_emit_to(b, bi_register(0), bi_register(4), bi_register(5),
-                      bi_register(6), true, true);
-   },
-   {
         flow(DISCARD);
         bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
         flow(WAIT0126);
@@ -142,12 +127,6 @@ TEST_F(InsertFlow, ZSEmitWait6) {
 
 TEST_F(InsertFlow, LoadThenUnrelatedThenUse) {
    CASE(VERTEX, {
-         bi_ld_attr_imm_to(b, bi_register(16), bi_register(60), bi_register(61),
-                           BI_REGISTER_FORMAT_F32, BI_VECSIZE_V4, 1);
-         bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
-         bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(19));
-   },
-   {
          bi_ld_attr_imm_to(b, bi_register(16), bi_register(60), bi_register(61),
                            BI_REGISTER_FORMAT_F32, BI_VECSIZE_V4, 1);
          bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
@@ -159,12 +138,6 @@ TEST_F(InsertFlow, LoadThenUnrelatedThenUse) {
 
 TEST_F(InsertFlow, SingleLdVar) {
    CASE(FRAGMENT, {
-         bi_ld_var_buf_imm_f16_to(b, bi_register(2), bi_register(61),
-                                 BI_REGISTER_FORMAT_F16, BI_SAMPLE_CENTER,
-                                 BI_SOURCE_FORMAT_F16,
-                                 BI_UPDATE_RETRIEVE, BI_VECSIZE_V4, 0);
-   },
-   {
          flow(DISCARD);
          bi_ld_var_buf_imm_f16_to(b, bi_register(2), bi_register(61),
                                  BI_REGISTER_FORMAT_F16, BI_SAMPLE_CENTER,
@@ -177,22 +150,6 @@ TEST_F(InsertFlow, SingleLdVar) {
 
 TEST_F(InsertFlow, SerializeLdVars) {
    CASE(FRAGMENT, {
-         bi_ld_var_buf_imm_f16_to(b, bi_register(16), bi_register(61),
-                                 BI_REGISTER_FORMAT_F16, BI_SAMPLE_CENTER,
-                                 BI_SOURCE_FORMAT_F16,
-                                 BI_UPDATE_STORE, BI_VECSIZE_V4, 0);
-
-         bi_ld_var_buf_imm_f16_to(b, bi_register(2), bi_register(61),
-                                 BI_REGISTER_FORMAT_F16, BI_SAMPLE_CENTER,
-                                 BI_SOURCE_FORMAT_F16,
-                                 BI_UPDATE_RETRIEVE, BI_VECSIZE_V4, 0);
-
-         bi_ld_var_buf_imm_f16_to(b, bi_register(8), bi_register(61),
-                                 BI_REGISTER_FORMAT_F16, BI_SAMPLE_CENTER,
-                                 BI_SOURCE_FORMAT_F16,
-                                 BI_UPDATE_STORE, BI_VECSIZE_V4, 1);
-   },
-   {
          flow(DISCARD);
          bi_ld_var_buf_imm_f16_to(b, bi_register(16), bi_register(61),
                                  BI_REGISTER_FORMAT_F16, BI_SAMPLE_CENTER,
@@ -214,13 +171,6 @@ TEST_F(InsertFlow, SerializeLdVars) {
 
 TEST_F(InsertFlow, Clper) {
    CASE(FRAGMENT, {
-         bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
-         bi_clper_i32_to(b, bi_register(0), bi_register(4), bi_register(8),
-                         BI_INACTIVE_RESULT_ZERO, BI_LANE_OP_NONE,
-                         BI_SUBGROUP_SUBGROUP4);
-         bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
-   },
-   {
          bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
          bi_clper_i32_to(b, bi_register(0), bi_register(4), bi_register(8),
                          BI_INACTIVE_RESULT_ZERO, BI_LANE_OP_NONE,
@@ -233,14 +183,6 @@ TEST_F(InsertFlow, Clper) {
 
 TEST_F(InsertFlow, TextureImplicit) {
    CASE(FRAGMENT, {
-         bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
-         bi_tex_single_to(b, bi_register(0), bi_register(4), bi_register(8),
-                          bi_register(12), false, BI_DIMENSION_2D,
-                          BI_REGISTER_FORMAT_F32, false, false,
-                          BI_VA_LOD_MODE_COMPUTED_LOD, BI_WRITE_MASK_RGBA, 4);
-         bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
-   },
-   {
          bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
          bi_tex_single_to(b, bi_register(0), bi_register(4), bi_register(8),
                           bi_register(12), false, BI_DIMENSION_2D,
@@ -255,14 +197,6 @@ TEST_F(InsertFlow, TextureImplicit) {
 
 TEST_F(InsertFlow, TextureExplicit) {
    CASE(FRAGMENT, {
-         bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
-         bi_tex_single_to(b, bi_register(0), bi_register(4), bi_register(8),
-                          bi_register(12), false, BI_DIMENSION_2D,
-                          BI_REGISTER_FORMAT_F32, false, false,
-                          BI_VA_LOD_MODE_ZERO_LOD, BI_WRITE_MASK_RGBA, 4);
-         bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
-   },
-   {
          flow(DISCARD);
          bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
          bi_tex_single_to(b, bi_register(0), bi_register(4), bi_register(8),
@@ -275,56 +209,42 @@ TEST_F(InsertFlow, TextureExplicit) {
    });
 }
 
-static bi_context *
-build_diamond_cfg(void *mem_ctx, bool with_flow)
-{
-   bi_builder *b = bit_builder(mem_ctx);
-   bi_context *ctx = b->shader;
-   ctx->stage = MESA_SHADER_FRAGMENT;
-
-   /*      A
-    *     / \
-    *    B   C
-    *     \ /
-    *      D
-    */
-
-   bi_block *A = bi_start_block(&ctx->blocks);
-   bi_block *B = bit_block(ctx);
-   bi_block *C = bit_block(ctx);
-   bi_block *D = bit_block(ctx);
-
-   bi_block_add_successor(A, B);
-   bi_block_add_successor(A, C);
-
-   bi_block_add_successor(B, D);
-   bi_block_add_successor(C, D);
-
-   /* B uses helper invocations, no other block does.
-    *
-    * That means B and C need to discard helpers.
-    */
-   b->cursor = bi_after_block(B);
-   bi_clper_i32_to(b, bi_register(0), bi_register(4), bi_register(8),
-                   BI_INACTIVE_RESULT_ZERO, BI_LANE_OP_NONE,
-                   BI_SUBGROUP_SUBGROUP4);
-   if (with_flow) flow(DISCARD);
-   if (with_flow) flow(RECONVERGE);
-
-   b->cursor = bi_after_block(C);
-   if (with_flow) flow(DISCARD);
-   bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
-   if (with_flow) flow(RECONVERGE);
-
-   b->cursor = bi_after_block(D);
-   if (with_flow) flow(END);
-
-   return ctx;
-}
-
+/*      A
+ *     / \
+ *    B   C
+ *     \ /
+ *      D
+ */
 TEST_F(InsertFlow, DiamondCFG) {
-   bi_context *A = build_diamond_cfg(mem_ctx, false);
-   va_insert_flow_control_nops(A);
+   CASE(FRAGMENT, {
+         bi_block *A = bi_start_block(&b->shader->blocks);
+         bi_block *B = bit_block(b->shader);
+         bi_block *C = bit_block(b->shader);
+         bi_block *D = bit_block(b->shader);
+
+         bi_block_add_successor(A, B);
+         bi_block_add_successor(A, C);
+
+         bi_block_add_successor(B, D);
+         bi_block_add_successor(C, D);
+
+         /* B uses helper invocations, no other block does.
+          *
+          * That means B and C need to discard helpers.
+          */
+         b->cursor = bi_after_block(B);
+         bi_clper_i32_to(b, bi_register(0), bi_register(4), bi_register(8),
+               BI_INACTIVE_RESULT_ZERO, BI_LANE_OP_NONE,
+               BI_SUBGROUP_SUBGROUP4);
+         flow(DISCARD);
+         flow(RECONVERGE);
 
-   ASSERT_SHADER_EQUAL(A, build_diamond_cfg(mem_ctx, true));
+         b->cursor = bi_after_block(C);
+         flow(DISCARD);
+         bi_fadd_f32_to(b, bi_register(0), bi_register(0), bi_register(0));
+         flow(RECONVERGE);
+
+         b->cursor = bi_after_block(D);
+         flow(END);
+   });
 }



More information about the mesa-commit mailing list