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

Author: Simon Perretta <[email protected]>
Date:   Mon Feb 13 22:05:21 2023 +0000

pvr: Add support for emitpix

Signed-off-by: Simon Perretta <[email protected]>
Acked-by: Frank Binns <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21474>

---

 .../rogue/passes/rogue_schedule_instr_groups.c      |  4 ++++
 src/imagination/rogue/rogue.h                       |  4 ++++
 src/imagination/rogue/rogue_backend_instrs.def      |  7 +++++++
 src/imagination/rogue/rogue_builder.c               | 21 +++++++++++++++++++++
 src/imagination/rogue/rogue_builder.h               |  5 +++++
 src/imagination/rogue/rogue_encode.c                |  6 ++++++
 src/imagination/rogue/rogue_info.c                  | 15 ++++++---------
 7 files changed, 53 insertions(+), 9 deletions(-)

diff --git a/src/imagination/rogue/passes/rogue_schedule_instr_groups.c 
b/src/imagination/rogue/passes/rogue_schedule_instr_groups.c
index 8a63a2e681d..465c913ece0 100644
--- a/src/imagination/rogue/passes/rogue_schedule_instr_groups.c
+++ b/src/imagination/rogue/passes/rogue_schedule_instr_groups.c
@@ -624,6 +624,10 @@ static void 
rogue_calc_backend_instrs_size(rogue_instr_group *group,
       }
       break;
 
+   case ROGUE_BACKEND_OP_EMITPIX:
+      group->size.instrs[phase] = 1;
+      break;
+
    default:
       unreachable("Unsupported backend op.");
    }
diff --git a/src/imagination/rogue/rogue.h b/src/imagination/rogue/rogue.h
index 36a61805c41..afcdcf7cbad 100644
--- a/src/imagination/rogue/rogue.h
+++ b/src/imagination/rogue/rogue.h
@@ -1339,6 +1339,8 @@ enum rogue_backend_op {
    ROGUE_BACKEND_OP_UVSW_EMITTHENENDTASK,
    ROGUE_BACKEND_OP_UVSW_WRITETHENEMITTHENENDTASK,
 
+   ROGUE_BACKEND_OP_EMITPIX,
+
    ROGUE_BACKEND_OP_LD,
 
    ROGUE_BACKEND_OP_FITR_PIXEL,
@@ -1439,6 +1441,8 @@ enum rogue_backend_op_mod {
 
    ROGUE_BACKEND_OP_MOD_SAT, /* Saturate output. */
 
+   ROGUE_BACKEND_OP_MOD_FREEP, /* Free partition. */
+
    ROGUE_BACKEND_OP_MOD_COUNT,
 };
 
diff --git a/src/imagination/rogue/rogue_backend_instrs.def 
b/src/imagination/rogue/rogue_backend_instrs.def
index d752c67e464..f962e0da411 100644
--- a/src/imagination/rogue/rogue_backend_instrs.def
+++ b/src/imagination/rogue/rogue_backend_instrs.def
@@ -37,6 +37,10 @@
 #define ROGUE_BUILDER_DEFINE_BACKEND00(...)
 #endif /* ROGUE_BUILDER_DEFINE_BACKEND00 */
 
+#ifndef ROGUE_BUILDER_DEFINE_BACKEND02
+#define ROGUE_BUILDER_DEFINE_BACKEND02(...)
+#endif /* ROGUE_BUILDER_DEFINE_BACKEND02 */
+
 #ifndef ROGUE_BUILDER_DEFINE_BACKEND11
 #define ROGUE_BUILDER_DEFINE_BACKEND11(...)
 #endif /* ROGUE_BUILDER_DEFINE_BACKEND11 */
@@ -57,6 +61,8 @@ ROGUE_BUILDER_DEFINE_BACKEND00(UVSW_EMIT)
 ROGUE_BUILDER_DEFINE_BACKEND00(UVSW_ENDTASK)
 ROGUE_BUILDER_DEFINE_BACKEND00(UVSW_EMITTHENENDTASK)
 
+ROGUE_BUILDER_DEFINE_BACKEND02(EMITPIX)
+
 ROGUE_BUILDER_DEFINE_BACKEND11(UVSW_WRITE)
 ROGUE_BUILDER_DEFINE_BACKEND11(UVSW_WRITETHENEMITTHENENDTASK)
 
@@ -73,4 +79,5 @@ ROGUE_BUILDER_DEFINE_BACKEND16(SMP3D)
 #undef ROGUE_BUILDER_DEFINE_BACKEND14
 #undef ROGUE_BUILDER_DEFINE_BACKEND13
 #undef ROGUE_BUILDER_DEFINE_BACKEND11
+#undef ROGUE_BUILDER_DEFINE_BACKEND02
 #undef ROGUE_BUILDER_DEFINE_BACKEND00
diff --git a/src/imagination/rogue/rogue_builder.c 
b/src/imagination/rogue/rogue_builder.c
index 7c0f508917a..8947b6b4f42 100644
--- a/src/imagination/rogue/rogue_builder.c
+++ b/src/imagination/rogue/rogue_builder.c
@@ -239,6 +239,16 @@ rogue_build_backend00(rogue_builder *b, enum 
rogue_backend_op op)
    return rogue_build_backend(b, op, 0, NULL, 0, NULL);
 }
 
+static inline rogue_backend_instr *
+rogue_build_backend02(rogue_builder *b,
+                      enum rogue_backend_op op,
+                      rogue_ref src0,
+                      rogue_ref src1)
+{
+   rogue_ref srcs[] = { src0, src1 };
+   return rogue_build_backend(b, op, 0, NULL, 2, srcs);
+}
+
 static inline rogue_backend_instr *
 rogue_build_backend11(rogue_builder *b,
                       enum rogue_backend_op op,
@@ -302,6 +312,17 @@ rogue_build_backend16(rogue_builder *b,
       return rogue_build_backend00(b, ROGUE_BACKEND_OP_##op);              \
    }
 
+#define ROGUE_BUILDER_DEFINE_BACKEND02(op)                                 \
+   PUBLIC                                                                  \
+   rogue_backend_instr *rogue_##op(rogue_builder *b,                       \
+                                   rogue_ref src0,                         \
+                                   rogue_ref src1)                         \
+   {                                                                       \
+      assert(rogue_backend_op_infos[ROGUE_BACKEND_OP_##op].num_dsts == 0); \
+      assert(rogue_backend_op_infos[ROGUE_BACKEND_OP_##op].num_srcs == 2); \
+      return rogue_build_backend02(b, ROGUE_BACKEND_OP_##op, src0, src1);  \
+   }
+
 #define ROGUE_BUILDER_DEFINE_BACKEND11(op)                                 \
    PUBLIC                                                                  \
    rogue_backend_instr *rogue_##op(rogue_builder *b,                       \
diff --git a/src/imagination/rogue/rogue_builder.h 
b/src/imagination/rogue/rogue_builder.h
index 812f5693553..5161df86601 100644
--- a/src/imagination/rogue/rogue_builder.h
+++ b/src/imagination/rogue/rogue_builder.h
@@ -133,6 +133,11 @@ static inline rogue_block *rogue_push_block(rogue_builder 
*b)
 #define ROGUE_BUILDER_DEFINE_BACKEND00(op) \
    rogue_backend_instr *rogue_##op(rogue_builder *b);
 
+#define ROGUE_BUILDER_DEFINE_BACKEND02(op)           \
+   rogue_backend_instr *rogue_##op(rogue_builder *b, \
+                                   rogue_ref src0,   \
+                                   rogue_ref src1);
+
 #define ROGUE_BUILDER_DEFINE_BACKEND11(op)           \
    rogue_backend_instr *rogue_##op(rogue_builder *b, \
                                    rogue_ref dst0,   \
diff --git a/src/imagination/rogue/rogue_encode.c 
b/src/imagination/rogue/rogue_encode.c
index e4a3cbdce95..b87b5a89885 100644
--- a/src/imagination/rogue/rogue_encode.c
+++ b/src/imagination/rogue/rogue_encode.c
@@ -523,6 +523,12 @@ static void rogue_encode_backend_instr(const 
rogue_backend_instr *backend,
 
       break;
 
+   case ROGUE_BACKEND_OP_EMITPIX:
+      instr_encoding->backend.op = BACKENDOP_EMIT;
+      instr_encoding->backend.emitpix.freep =
+         rogue_backend_op_mod_is_set(backend, OM(FREEP));
+      break;
+
    default:
       unreachable("Unsupported backend op.");
    }
diff --git a/src/imagination/rogue/rogue_info.c 
b/src/imagination/rogue/rogue_info.c
index 80ea1e1d1f6..2109b0a61ce 100644
--- a/src/imagination/rogue/rogue_info.c
+++ b/src/imagination/rogue/rogue_info.c
@@ -257,6 +257,11 @@ const rogue_backend_op_info 
rogue_backend_op_infos[ROGUE_BACKEND_OP_COUNT] = {
       .supported_dst_types = { [0] = T(REG), },
       .supported_src_types = { [0] = T(REG), },
    },
+   [ROGUE_BACKEND_OP_EMITPIX] = { .str = "emitpix", .num_srcs = 2,
+      .phase_io = { .src[0] = IO(S0), .src[1] = IO(S2), },
+      .supported_op_mods = OM(FREEP),
+      .supported_src_types = { [0] = T(REG), [1] = T(REG), },
+   },
    /* .src[1] and .src[2] can actually be S0-5. */
    [ROGUE_BACKEND_OP_LD] = { .str = "ld", .num_dsts = 1, .num_srcs = 3,
       .phase_io = { .dst[0] = IO(S3), .src[2] = IO(S0), },
@@ -396,40 +401,32 @@ const rogue_backend_op_mod_info 
rogue_backend_op_mod_infos[ROGUE_BACKEND_OP_MOD_
    [ROGUE_BACKEND_OP_MOD_PROJ]  = { .str = "proj", },
    [ROGUE_BACKEND_OP_MOD_FCNORM]  = { .str = "fcnorm", },
    [ROGUE_BACKEND_OP_MOD_NNCOORDS]  = { .str = "nncoords", },
-
    [ROGUE_BACKEND_OP_MOD_BIAS]  = { .str = "bias", .exclude = OM(REPLACE) | 
OM(GRADIENT) },
    [ROGUE_BACKEND_OP_MOD_REPLACE]  = { .str = "replace", .exclude = OM(BIAS) | 
OM(GRADIENT) },
    [ROGUE_BACKEND_OP_MOD_GRADIENT]  = { .str = "gradient", .exclude = OM(BIAS) 
| OM(REPLACE) },
-
    [ROGUE_BACKEND_OP_MOD_PPLOD]  = { .str = "pplod", .require = OM(BIAS) | 
OM(REPLACE) },
    [ROGUE_BACKEND_OP_MOD_TAO]  = { .str = "tao", },
    [ROGUE_BACKEND_OP_MOD_SOO]  = { .str = "soo", },
    [ROGUE_BACKEND_OP_MOD_SNO]  = { .str = "sno", },
    [ROGUE_BACKEND_OP_MOD_WRT]  = { .str = "wrt", },
-
    [ROGUE_BACKEND_OP_MOD_DATA]  = { .str = "data", .exclude = OM(INFO) | 
OM(BOTH) },
    [ROGUE_BACKEND_OP_MOD_INFO]  = { .str = "info", .exclude = OM(DATA) | 
OM(BOTH) },
    [ROGUE_BACKEND_OP_MOD_BOTH]  = { .str = "both", .exclude = OM(DATA) | 
OM(INFO) },
-
    [ROGUE_BACKEND_OP_MOD_BYPASS]  = { .str = "bypass", .exclude = 
OM(FORCELINEFILL) | OM(WRITETHROUGH) | OM(WRITEBACK) | OM(LAZYWRITEBACK) },
    [ROGUE_BACKEND_OP_MOD_FORCELINEFILL]  = { .str = "forcelinefill", .exclude 
= OM(BYPASS) | OM(WRITETHROUGH) | OM(WRITEBACK) | OM(LAZYWRITEBACK) },
-
    [ROGUE_BACKEND_OP_MOD_WRITETHROUGH]  = { .str = "writethrough", .exclude = 
OM(BYPASS) | OM(FORCELINEFILL) | OM(WRITEBACK) | OM(LAZYWRITEBACK) },
    [ROGUE_BACKEND_OP_MOD_WRITEBACK]  = { .str = "writeback", .exclude = 
OM(BYPASS) | OM(FORCELINEFILL) | OM(WRITETHROUGH) | OM(LAZYWRITEBACK) },
    [ROGUE_BACKEND_OP_MOD_LAZYWRITEBACK]  = { .str = "lazywriteback", .exclude 
= OM(BYPASS) | OM(FORCELINEFILL) | OM(WRITETHROUGH) | OM(WRITEBACK) },
-
    [ROGUE_BACKEND_OP_MOD_SLCBYPASS]  = { .str = "slcbypass", .exclude = 
OM(SLCWRITEBACK) | OM(SLCWRITETHROUGH) | OM(SLCNOALLOC) },
    [ROGUE_BACKEND_OP_MOD_SLCWRITEBACK]  = { .str = "slcwriteback", .exclude = 
OM(SLCBYPASS) | OM(SLCWRITETHROUGH) | OM(SLCNOALLOC) },
    [ROGUE_BACKEND_OP_MOD_SLCWRITETHROUGH]  = { .str = "slcwritethrough", 
.exclude = OM(SLCBYPASS) | OM(SLCWRITEBACK) | OM(SLCNOALLOC) },
    [ROGUE_BACKEND_OP_MOD_SLCNOALLOC]  = { .str = "slcnoalloc", .exclude = 
OM(SLCBYPASS) | OM(SLCWRITEBACK) | OM(SLCWRITETHROUGH) },
-
    [ROGUE_BACKEND_OP_MOD_ARRAY]  = { .str = "array", },
    [ROGUE_BACKEND_OP_MOD_INTEGER]  = { .str = "integer", },
    [ROGUE_BACKEND_OP_MOD_SCHEDSWAP]  = { .str = "schedswap", },
-
    [ROGUE_BACKEND_OP_MOD_F16]  = { .str = "f16", },
-
    [ROGUE_BACKEND_OP_MOD_SAT]  = { .str = "sat", },
+   [ROGUE_BACKEND_OP_MOD_FREEP] = { .str = "freep", },
 };
 #undef OM
 

Reply via email to