iris: make iris_batch target a particular ring
authorKenneth Graunke <kenneth@whitecape.org>
Sun, 21 Jan 2018 07:11:37 +0000 (23:11 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:05 +0000 (10:26 -0800)
src/gallium/drivers/iris/iris_batch.c
src/gallium/drivers/iris/iris_batch.h
src/gallium/drivers/iris/iris_context.c

index 90a241406616a2f49541a31a9f88c3ac1d15cfb6..edc93428b6d1335282774ab334147a9d40119e32 100644 (file)
@@ -108,13 +108,17 @@ create_batch_buffer(struct iris_bufmgr *bufmgr,
 }
 
 void
-iris_batch_init(struct iris_batch *batch,
+iris_init_batch(struct iris_batch *batch,
                 struct iris_screen *screen,
-                struct pipe_debug_callback *dbg)
+                struct pipe_debug_callback *dbg,
+                uint8_t ring)
 {
    batch->screen = screen;
    batch->dbg = dbg;
 
+   assert((ring & ~I915_EXEC_RING_MASK) == 0);
+   batch->ring = ring;
+
    init_reloc_list(&batch->cmdbuf.relocs, 256);
    init_reloc_list(&batch->statebuf.relocs, 256);
 
@@ -504,10 +508,10 @@ submit_batch(struct iris_batch *batch, int in_fence_fd, int *out_fence_fd)
       .buffer_count = batch->exec_count,
       .batch_start_offset = 0,
       .batch_len = buffer_bytes_used(&batch->cmdbuf),
-      .flags = I915_EXEC_NO_RELOC |
+      .flags = batch->ring |
+               I915_EXEC_NO_RELOC |
                I915_EXEC_BATCH_FIRST |
-               I915_EXEC_HANDLE_LUT |
-               I915_EXEC_RENDER,
+               I915_EXEC_HANDLE_LUT,
       .rsvd1 = batch->hw_ctx_id, /* rsvd1 is actually the context ID */
    };
 
index 10d815f839c5ed1ec60242508a15ee5ae3063091..2074b0580612eb8f9cc7b5694c557635cf684267 100644 (file)
@@ -64,6 +64,9 @@ struct iris_batch {
 
    uint32_t hw_ctx_id;
 
+   /** Which ring this batch targets - a I915_EXEC_RING_MASK value */
+   uint8_t ring;
+
    bool no_wrap;
 
    /** The validation list */
@@ -79,9 +82,10 @@ struct iris_batch {
    struct hash_table *state_sizes;
 };
 
-void iris_batch_init(struct iris_batch *batch,
+void iris_init_batch(struct iris_batch *batch,
                      struct iris_screen *screen,
-                     struct pipe_debug_callback *dbg);
+                     struct pipe_debug_callback *dbg,
+                     uint8_t ring);
 void iris_batch_free(struct iris_batch *batch);
 void iris_require_command_space(struct iris_batch *batch, unsigned size);
 void iris_require_state_space(struct iris_batch *batch, unsigned size);
index ed8172ad44124c5f44d7874c47216d962ba1180e..a9a93c57ff4a273413d85613d009c90cee71b193 100644 (file)
@@ -28,6 +28,7 @@
 #include "util/u_inlines.h"
 #include "util/u_format.h"
 #include "util/u_upload_mgr.h"
+#include "i915_drm.h"
 #include "iris_context.h"
 #include "iris_resource.h"
 #include "iris_screen.h"
@@ -111,7 +112,7 @@ iris_create_context(struct pipe_screen *pscreen, void *priv, unsigned flags)
 
    iris_init_program_cache(ice);
 
-   iris_batch_init(&ice->render_batch, screen, &ice->dbg);
+   iris_init_batch(&ice->render_batch, screen, &ice->dbg, I915_EXEC_RENDER);
 
    return ctx;
 }