etnaviv: GC7000: Move etna_coalesce to emit header file
authorWladimir J. van der Laan <laanwj@gmail.com>
Sat, 18 Nov 2017 09:44:29 +0000 (10:44 +0100)
committerChristian Gmeiner <christian.gmeiner@gmail.com>
Thu, 30 Nov 2017 06:27:48 +0000 (07:27 +0100)
Want to be able to emit state from the texture implementation,
and the blitter implementation.

Signed-off-by: Wladimir J. van der Laan <laanwj@gmail.com>
Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
src/gallium/drivers/etnaviv/etnaviv_emit.c
src/gallium/drivers/etnaviv/etnaviv_emit.h

index 279aa625fcb52c333e76e21b60ed5f027f32bb58..5ec9f167483f9254efffa0ab1a8374359af0eb6b 100644 (file)
 #include "hw/state_blt.xml.h"
 #include "util/u_math.h"
 
-struct etna_coalesce {
-   uint32_t start;
-   uint32_t last_reg;
-   uint32_t last_fixp;
-};
-
 /* Queue a STALL command (queues 2 words) */
 static inline void
 CMD_STALL(struct etna_cmd_stream *stream, uint32_t from, uint32_t to)
@@ -88,83 +82,6 @@ etna_stall(struct etna_cmd_stream *stream, uint32_t from, uint32_t to)
    }
 }
 
-static void
-etna_coalesce_start(struct etna_cmd_stream *stream,
-                    struct etna_coalesce *coalesce)
-{
-   coalesce->start = etna_cmd_stream_offset(stream);
-   coalesce->last_reg = 0;
-   coalesce->last_fixp = 0;
-}
-
-static void
-etna_coalesce_end(struct etna_cmd_stream *stream,
-                  struct etna_coalesce *coalesce)
-{
-   uint32_t end = etna_cmd_stream_offset(stream);
-   uint32_t size = end - coalesce->start;
-
-   if (size) {
-      uint32_t offset = coalesce->start - 1;
-      uint32_t value = etna_cmd_stream_get(stream, offset);
-
-      value |= VIV_FE_LOAD_STATE_HEADER_COUNT(size);
-      etna_cmd_stream_set(stream, offset, value);
-   }
-
-   /* append needed padding */
-   if (end % 2 == 1)
-      etna_cmd_stream_emit(stream, 0xdeadbeef);
-}
-
-static void
-check_coalsence(struct etna_cmd_stream *stream, struct etna_coalesce *coalesce,
-                uint32_t reg, uint32_t fixp)
-{
-   if (coalesce->last_reg != 0) {
-      if (((coalesce->last_reg + 4) != reg) || (coalesce->last_fixp != fixp)) {
-         etna_coalesce_end(stream, coalesce);
-         etna_emit_load_state(stream, reg >> 2, 0, fixp);
-         coalesce->start = etna_cmd_stream_offset(stream);
-      }
-   } else {
-      etna_emit_load_state(stream, reg >> 2, 0, fixp);
-      coalesce->start = etna_cmd_stream_offset(stream);
-   }
-
-   coalesce->last_reg = reg;
-   coalesce->last_fixp = fixp;
-}
-
-static inline void
-etna_coalsence_emit(struct etna_cmd_stream *stream,
-                    struct etna_coalesce *coalesce, uint32_t reg,
-                    uint32_t value)
-{
-   check_coalsence(stream, coalesce, reg, 0);
-   etna_cmd_stream_emit(stream, value);
-}
-
-static inline void
-etna_coalsence_emit_fixp(struct etna_cmd_stream *stream,
-                         struct etna_coalesce *coalesce, uint32_t reg,
-                         uint32_t value)
-{
-   check_coalsence(stream, coalesce, reg, 1);
-   etna_cmd_stream_emit(stream, value);
-}
-
-static inline void
-etna_coalsence_emit_reloc(struct etna_cmd_stream *stream,
-                          struct etna_coalesce *coalesce, uint32_t reg,
-                          const struct etna_reloc *r)
-{
-   if (r->bo) {
-      check_coalsence(stream, coalesce, reg, 0);
-      etna_cmd_stream_reloc(stream, r);
-   }
-}
-
 #define EMIT_STATE(state_name, src_value) \
    etna_coalsence_emit(stream, &coalesce, VIVS_##state_name, src_value)
 
index 3c3d1294dc8324b6f0dbed6c9500d4168257c4a5..dd90127ddd4a9a69f056b5e1b17ef871853d43a3 100644 (file)
 struct etna_context;
 struct compiled_rs_state;
 
+struct etna_coalesce {
+   uint32_t start;
+   uint32_t last_reg;
+   uint32_t last_fixp;
+};
+
 static inline void
 etna_emit_load_state(struct etna_cmd_stream *stream, const uint16_t offset,
                      const uint16_t count, const int fixp)
@@ -138,6 +144,83 @@ etna_draw_instanced(struct etna_cmd_stream *stream,
    etna_cmd_stream_emit(stream, 0);
 }
 
+static inline void
+etna_coalesce_start(struct etna_cmd_stream *stream,
+                    struct etna_coalesce *coalesce)
+{
+   coalesce->start = etna_cmd_stream_offset(stream);
+   coalesce->last_reg = 0;
+   coalesce->last_fixp = 0;
+}
+
+static inline void
+etna_coalesce_end(struct etna_cmd_stream *stream,
+                  struct etna_coalesce *coalesce)
+{
+   uint32_t end = etna_cmd_stream_offset(stream);
+   uint32_t size = end - coalesce->start;
+
+   if (size) {
+      uint32_t offset = coalesce->start - 1;
+      uint32_t value = etna_cmd_stream_get(stream, offset);
+
+      value |= VIV_FE_LOAD_STATE_HEADER_COUNT(size);
+      etna_cmd_stream_set(stream, offset, value);
+   }
+
+   /* append needed padding */
+   if (end % 2 == 1)
+      etna_cmd_stream_emit(stream, 0xdeadbeef);
+}
+
+static inline void
+check_coalsence(struct etna_cmd_stream *stream, struct etna_coalesce *coalesce,
+                uint32_t reg, uint32_t fixp)
+{
+   if (coalesce->last_reg != 0) {
+      if (((coalesce->last_reg + 4) != reg) || (coalesce->last_fixp != fixp)) {
+         etna_coalesce_end(stream, coalesce);
+         etna_emit_load_state(stream, reg >> 2, 0, fixp);
+         coalesce->start = etna_cmd_stream_offset(stream);
+      }
+   } else {
+      etna_emit_load_state(stream, reg >> 2, 0, fixp);
+      coalesce->start = etna_cmd_stream_offset(stream);
+   }
+
+   coalesce->last_reg = reg;
+   coalesce->last_fixp = fixp;
+}
+
+static inline void
+etna_coalsence_emit(struct etna_cmd_stream *stream,
+                    struct etna_coalesce *coalesce, uint32_t reg,
+                    uint32_t value)
+{
+   check_coalsence(stream, coalesce, reg, 0);
+   etna_cmd_stream_emit(stream, value);
+}
+
+static inline void
+etna_coalsence_emit_fixp(struct etna_cmd_stream *stream,
+                         struct etna_coalesce *coalesce, uint32_t reg,
+                         uint32_t value)
+{
+   check_coalsence(stream, coalesce, reg, 1);
+   etna_cmd_stream_emit(stream, value);
+}
+
+static inline void
+etna_coalsence_emit_reloc(struct etna_cmd_stream *stream,
+                          struct etna_coalesce *coalesce, uint32_t reg,
+                          const struct etna_reloc *r)
+{
+   if (r->bo) {
+      check_coalsence(stream, coalesce, reg, 0);
+      etna_cmd_stream_reloc(stream, r);
+   }
+}
+
 void
 etna_emit_state(struct etna_context *ctx);