From: Zhao Yakui <[email protected]>

This is to add the preparation that the overrride flag can be added to specify
which BSD ring is used to dispatch the video command when there exist two
BSD video rings.

Reviewed-by: Xiang Haihao <[email protected]>
Signed-off-by: Zhao Yakui <[email protected]>
---
 src/intel_batchbuffer.c | 50 +++++++++++++++++++++++++++++++------------------
 src/intel_batchbuffer.h |  5 +++--
 2 files changed, 35 insertions(+), 20 deletions(-)

diff --git a/src/intel_batchbuffer.c b/src/intel_batchbuffer.c
index 37755e5..fd84fe0 100644
--- a/src/intel_batchbuffer.c
+++ b/src/intel_batchbuffer.c
@@ -33,16 +33,20 @@
 
 #define MAX_BATCH_SIZE         0x400000
 
+
 static void 
 intel_batchbuffer_reset(struct intel_batchbuffer *batch, int buffer_size)
 {
     struct intel_driver_data *intel = batch->intel; 
     int batch_size = buffer_size;
+    int ring_flag;
+
+    ring_flag = batch->flag & I915_EXEC_RING_MASK;
 
-    assert(batch->flag == I915_EXEC_RENDER ||
-           batch->flag == I915_EXEC_BLT ||
-           batch->flag == I915_EXEC_BSD ||
-           batch->flag == I915_EXEC_VEBOX);
+    assert(ring_flag == I915_EXEC_RENDER ||
+           ring_flag == I915_EXEC_BLT ||
+           ring_flag == I915_EXEC_BSD ||
+           ring_flag == I915_EXEC_VEBOX);
 
     dri_bo_unreference(batch->buffer);
     batch->buffer = dri_bo_alloc(intel->bufmgr, 
@@ -69,10 +73,13 @@ struct intel_batchbuffer *
 intel_batchbuffer_new(struct intel_driver_data *intel, int flag, int 
buffer_size)
 {
     struct intel_batchbuffer *batch = calloc(1, sizeof(*batch));
-    assert(flag == I915_EXEC_RENDER ||
-           flag == I915_EXEC_BSD ||
-           flag == I915_EXEC_BLT ||
-           flag == I915_EXEC_VEBOX);
+    int ring_flag;
+
+    ring_flag = flag & I915_EXEC_RING_MASK;
+    assert(ring_flag == I915_EXEC_RENDER ||
+           ring_flag == I915_EXEC_BSD ||
+           ring_flag == I915_EXEC_BLT ||
+           ring_flag == I915_EXEC_VEBOX);
 
    if (!buffer_size || buffer_size < BATCH_SIZE) {
        buffer_size = BATCH_SIZE;
@@ -182,12 +189,15 @@ void
 intel_batchbuffer_emit_mi_flush(struct intel_batchbuffer *batch)
 {
     struct intel_driver_data *intel = batch->intel; 
+    int ring_flag;
+
+    ring_flag = batch->flag & I915_EXEC_RING_MASK;
 
     if (IS_GEN6(intel->device_info) ||
         IS_GEN7(intel->device_info) ||
         IS_GEN8(intel->device_info) ||
         IS_GEN9(intel->device_info)) {
-        if (batch->flag == I915_EXEC_RENDER) {
+        if (ring_flag == I915_EXEC_RENDER) {
             if (IS_GEN8(intel->device_info) || IS_GEN9(intel->device_info)) {
                 BEGIN_BATCH(batch, 6);
                 OUT_BATCH(batch, CMD_PIPE_CONTROL | (6 - 2));
@@ -248,14 +258,14 @@ intel_batchbuffer_emit_mi_flush(struct intel_batchbuffer 
*batch)
             }
 
         } else {
-            if (batch->flag == I915_EXEC_BLT) {
+            if (ring_flag == I915_EXEC_BLT) {
                 BEGIN_BLT_BATCH(batch, 4);
                 OUT_BLT_BATCH(batch, MI_FLUSH_DW);
                 OUT_BLT_BATCH(batch, 0);
                 OUT_BLT_BATCH(batch, 0);
                 OUT_BLT_BATCH(batch, 0);
                 ADVANCE_BLT_BATCH(batch);
-            }else if (batch->flag == I915_EXEC_VEBOX) {
+            }else if (ring_flag == I915_EXEC_VEBOX) {
                 BEGIN_VEB_BATCH(batch, 4);
                 OUT_VEB_BATCH(batch, MI_FLUSH_DW);
                 OUT_VEB_BATCH(batch, 0);
@@ -263,7 +273,7 @@ intel_batchbuffer_emit_mi_flush(struct intel_batchbuffer 
*batch)
                 OUT_VEB_BATCH(batch, 0);
                 ADVANCE_VEB_BATCH(batch);
             } else {
-                assert(batch->flag == I915_EXEC_BSD);
+                assert(ring_flag == I915_EXEC_BSD);
                 BEGIN_BCS_BATCH(batch, 4);
                 OUT_BCS_BATCH(batch, MI_FLUSH_DW | 
MI_FLUSH_DW_VIDEO_PIPELINE_CACHE_INVALIDATE);
                 OUT_BCS_BATCH(batch, 0);
@@ -273,12 +283,12 @@ intel_batchbuffer_emit_mi_flush(struct intel_batchbuffer 
*batch)
             }
         }
     } else {
-        if (batch->flag == I915_EXEC_RENDER) {
+        if (ring_flag == I915_EXEC_RENDER) {
             BEGIN_BATCH(batch, 1);
             OUT_BATCH(batch, MI_FLUSH | 
MI_FLUSH_STATE_INSTRUCTION_CACHE_INVALIDATE);
             ADVANCE_BATCH(batch);              
          } else {
-            assert(batch->flag == I915_EXEC_BSD);
+            assert(ring_flag == I915_EXEC_BSD);
             BEGIN_BCS_BATCH(batch, 1);
             OUT_BCS_BATCH(batch, MI_FLUSH | 
MI_FLUSH_STATE_INSTRUCTION_CACHE_INVALIDATE);
             ADVANCE_BCS_BATCH(batch);
@@ -302,10 +312,14 @@ intel_batchbuffer_advance_batch(struct intel_batchbuffer 
*batch)
 void
 intel_batchbuffer_check_batchbuffer_flag(struct intel_batchbuffer *batch, int 
flag)
 {
-    if (flag != I915_EXEC_RENDER &&
-        flag != I915_EXEC_BLT &&
-        flag != I915_EXEC_BSD &&
-        flag != I915_EXEC_VEBOX)
+    int ring_flag;
+
+    ring_flag = flag & I915_EXEC_RING_MASK;
+
+    if (ring_flag != I915_EXEC_RENDER &&
+        ring_flag != I915_EXEC_BLT &&
+        ring_flag != I915_EXEC_BSD &&
+        ring_flag != I915_EXEC_VEBOX)
         return;
 
     if (batch->flag == flag)
diff --git a/src/intel_batchbuffer.h b/src/intel_batchbuffer.h
index 34ff66d..e4d0994 100644
--- a/src/intel_batchbuffer.h
+++ b/src/intel_batchbuffer.h
@@ -51,9 +51,10 @@ int intel_batchbuffer_check_free_space(struct 
intel_batchbuffer *batch, int size
 int intel_batchbuffer_used_size(struct intel_batchbuffer *batch);
 void intel_batchbuffer_align(struct intel_batchbuffer *batch, unsigned int 
alignedment);
 
+
 #define __BEGIN_BATCH(batch, n, f) do {                         \
-        assert(f == batch->flag);                               \
-        intel_batchbuffer_check_batchbuffer_flag(batch, f);     \
+        assert(f == (batch->flag & I915_EXEC_RING_MASK));                      
         \
+        intel_batchbuffer_check_batchbuffer_flag(batch, batch->flag);     \
         intel_batchbuffer_require_space(batch, (n) * 4);        \
         intel_batchbuffer_begin_batch(batch, (n));              \
     } while (0)
-- 
1.9.1

_______________________________________________
Libva mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libva

Reply via email to