intel/aubinator: fix ring buffer pointer
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Fri, 9 Nov 2018 16:49:11 +0000 (16:49 +0000)
committerLionel Landwerlin <lionel.g.landwerlin@intel.com>
Fri, 16 Nov 2018 11:39:54 +0000 (11:39 +0000)
We can only start parsing commands from the head pointer. This was
working fine up to now because we only dealt with a "made up" ring
buffer (generated by aub_write) which always had its head at 0.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Toni Lönnberg <toni.lonnberg@intel.com>
src/intel/tools/aubinator.c
src/intel/tools/aubinator_viewer.cpp

index 4dc1fefaa5a2d90b1b58616cf8a57a76fa514288..fe63ff3b96bc119ada86bbee3fd98e393df0f672 100644 (file)
@@ -150,7 +150,7 @@ handle_execlist_write(void *user_data, enum drm_i915_gem_engine_class engine, ui
    struct gen_batch_decode_bo ring_bo = aub_mem_get_ggtt_bo(&mem,
                                                             ring_buffer_start);
    assert(ring_bo.size > 0);
-   void *commands = (uint8_t *)ring_bo.map + (ring_buffer_start - ring_bo.addr);
+   void *commands = (uint8_t *)ring_bo.map + (ring_buffer_start - ring_bo.addr) + ring_buffer_head;
 
    if (context_descriptor & 0x100 /* ppgtt */) {
       batch_ctx.get_bo = aub_mem_get_ppgtt_bo;
@@ -161,7 +161,7 @@ handle_execlist_write(void *user_data, enum drm_i915_gem_engine_class engine, ui
    batch_ctx.engine = engine;
    gen_print_batch(&batch_ctx, commands,
                    MIN2(ring_buffer_tail - ring_buffer_head, ring_buffer_length),
-                   0);
+                   ring_bo.addr + ring_buffer_head);
    aub_mem_clear_bo_maps(&mem);
 }
 
index e7034fa88929e87aefe07bc5d5dbffe0b6b4c0f5..085ef75555c88374835270957048d73b38acf0bf 100644 (file)
@@ -730,14 +730,14 @@ display_batch_execlist_write(void *user_data,
    struct gen_batch_decode_bo ring_bo =
       aub_mem_get_ggtt_bo(&window->mem, ring_buffer_start);
    assert(ring_bo.size > 0);
-   void *commands = (uint8_t *)ring_bo.map + (ring_buffer_start - ring_bo.addr);
+   void *commands = (uint8_t *)ring_bo.map + (ring_buffer_start - ring_bo.addr) + ring_buffer_head;
 
    window->uses_ppgtt = true;
 
    window->decode_ctx.engine = engine;
    aub_viewer_render_batch(&window->decode_ctx, commands,
                            MIN2(ring_buffer_tail - ring_buffer_head, ring_buffer_length),
-                           ring_buffer_start);
+                           ring_buffer_start + ring_buffer_head);
 }
 
 static void