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