turnip: provide both emit_ib and emit_call
authorChia-I Wu <olvaffe@gmail.com>
Tue, 29 Jan 2019 18:43:48 +0000 (10:43 -0800)
committerChia-I Wu <olvaffe@gmail.com>
Mon, 11 Mar 2019 17:02:13 +0000 (10:02 -0700)
tu_cs_emit_ib emits a CP_INDIRECT_BUFFER for a BO.  tu_cs_emit_call
emits a CP_INDIRECT_BUFFER for each entry of a target cs.

src/freedreno/vulkan/tu_cs.h

index c28d8de76c736edb6a4a4db0bfba771adf80c255..cfac00f200dd214a06cce2760df76eee178a70b7 100644 (file)
@@ -47,6 +47,16 @@ tu_cs_reserve_space(struct tu_device *dev,
 void
 tu_cs_reset(struct tu_device *dev, struct tu_cs *cs);
 
+/**
+ * Get the size needed for tu_cs_emit_call.
+ */
+static inline uint32_t
+tu_cs_get_call_size(const struct tu_cs *cs)
+{
+   /* each CP_INDIRECT_BUFFER needs 4 dwords */
+   return cs->entry_count * 4;
+}
+
 /**
  * Assert that we did not exceed the reserved space.
  */
@@ -124,16 +134,29 @@ tu_cs_emit_write_reg(struct tu_cs *cs, uint16_t reg, uint32_t value)
    tu_cs_emit(cs, value);
 }
 
+/**
+ * Emit a CP_INDIRECT_BUFFER command packet.
+ */
 static inline void
-tu_cs_emit_ib(struct tu_cs *cs, const struct tu_cs *target)
+tu_cs_emit_ib(struct tu_cs *cs, const struct tu_cs_entry *entry)
 {
-   for (uint32_t i = 0; i < target->entry_count; i++) {
-      const struct tu_cs_entry *entry = target->entries + i;
+   assert(entry->offset % sizeof(uint32_t) == 0);
+   assert(entry->size % sizeof(uint32_t) == 0);
 
-      tu_cs_emit_pkt7(cs, CP_INDIRECT_BUFFER, 3);
-      tu_cs_emit_qw(cs, entry->bo->iova + entry->offset);
-      tu_cs_emit(cs, entry->size / sizeof(uint32_t));
-   }
+   tu_cs_emit_pkt7(cs, CP_INDIRECT_BUFFER, 3);
+   tu_cs_emit_qw(cs, entry->bo->iova + entry->offset);
+   tu_cs_emit(cs, entry->size / sizeof(uint32_t));
+}
+
+/**
+ * Emit a CP_INDIRECT_BUFFER command packet for each entry in the target
+ * command stream.
+ */
+static inline void
+tu_cs_emit_call(struct tu_cs *cs, const struct tu_cs *target)
+{
+   for (uint32_t i = 0; i < target->entry_count; i++)
+      tu_cs_emit_ib(cs, target->entries + i);
 }
 
 #endif /* TU_CS_H */