void
gen_print_batch(struct gen_batch_decode_ctx *ctx,
const uint32_t *batch, uint32_t batch_size,
- uint64_t batch_addr)
+ uint64_t batch_addr, bool from_ring)
{
const uint32_t *p, *end = batch + batch_size / sizeof(uint32_t);
int length;
next_batch_addr);
} else {
gen_print_batch(ctx, next_batch.map, next_batch.size,
- next_batch.addr);
+ next_batch.addr, false);
}
if (second_level) {
/* MI_BATCH_BUFFER_START with "2nd Level Batch Buffer" set acts
* MI_BATCH_BUFFER_END.
*/
continue;
- } else {
+ } else if (!from_ring) {
/* MI_BATCH_BUFFER_START with "2nd Level Batch Buffer" unset acts
* like a goto. Nothing after it will ever get processed. In
* order to prevent the recursion from growing, we just reset the
void gen_print_batch(struct gen_batch_decode_ctx *ctx,
const uint32_t *batch, uint32_t batch_size,
- uint64_t batch_addr);
+ uint64_t batch_addr, bool from_ring);
#ifdef __cplusplus
}
batch_ctx.engine = engine;
gen_print_batch(&batch_ctx, commands,
MIN2(ring_buffer_tail - ring_buffer_head, ring_buffer_length),
- ring_bo.addr + ring_buffer_head);
+ ring_bo.addr + ring_buffer_head, true);
aub_mem_clear_bo_maps(&mem);
}
batch_ctx.get_bo = get_legacy_bo;
batch_ctx.engine = engine;
- gen_print_batch(&batch_ctx, data, data_len, 0);
+ gen_print_batch(&batch_ctx, data, data_len, 0, false);
aub_mem_clear_bo_maps(&mem);
}
batch_ctx.engine = class;
gen_print_batch(&batch_ctx, sections[s].data,
sections[s].dword_count * 4,
- sections[s].gtt_offset);
+ sections[s].gtt_offset, false);
}
}
window->uses_ppgtt = false;
- aub_viewer_render_batch(&window->decode_ctx, data, data_len, 0);
+ aub_viewer_render_batch(&window->decode_ctx, data, data_len, 0, false);
}
static void
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_head);
+ ring_buffer_start + ring_buffer_head, true);
}
static void
void aub_viewer_render_batch(struct aub_viewer_decode_ctx *ctx,
const void *batch, uint32_t batch_size,
- uint64_t batch_addr);
+ uint64_t batch_addr, bool from_ring);
#endif /* AUBINATOR_VIEWER_H */
void
aub_viewer_render_batch(struct aub_viewer_decode_ctx *ctx,
const void *_batch, uint32_t batch_size,
- uint64_t batch_addr)
+ uint64_t batch_addr, bool from_ring)
{
struct gen_group *inst;
const uint32_t *p, *batch = (const uint32_t *) _batch, *end = batch + batch_size / sizeof(uint32_t);
next_batch_addr);
} else {
aub_viewer_render_batch(ctx, next_batch.map, next_batch.size,
- next_batch.addr);
+ next_batch.addr, false);
}
if (second_level) {
/* MI_BATCH_BUFFER_START with "2nd Level Batch Buffer" set acts
* MI_BATCH_BUFFER_END.
*/
continue;
- } else {
+ } else if (!from_ring) {
/* MI_BATCH_BUFFER_START with "2nd Level Batch Buffer" unset acts
* like a goto. Nothing after it will ever get processed. In
* order to prevent the recursion from growing, we just reset the
device->cmd_buffer_being_decoded = cmd_buffer;
gen_print_batch(&device->decoder_ctx, (*bo)->bo.map,
- (*bo)->bo.size, (*bo)->bo.offset);
+ (*bo)->bo.size, (*bo)->bo.offset, false);
device->cmd_buffer_being_decoded = NULL;
}
/* Finding a buffer for batch decoding */
static struct gen_batch_decode_bo
-decode_get_bo(void *v_batch, uint64_t address)
+decode_get_bo(void *v_batch, bool ppgtt, uint64_t address)
{
struct anv_device *device = v_batch;
struct gen_batch_decode_bo ret_bo = {};
+ assert(ppgtt);
+
if (get_bo_from_pool(&ret_bo, &device->dynamic_state_pool.block_pool, address))
return ret_bo;
if (get_bo_from_pool(&ret_bo, &device->instruction_state_pool.block_pool, address))
execbuf.rsvd2 = 0;
if (unlikely(INTEL_DEBUG & DEBUG_BATCH))
- gen_print_batch(&device->decoder_ctx, bo.map, bo.size, bo.offset);
+ gen_print_batch(&device->decoder_ctx, bo.map, bo.size, bo.offset, false);
result = anv_device_execbuf(device, &execbuf, exec_bos);
if (result != VK_SUCCESS)
if (unlikely(INTEL_DEBUG & DEBUG_BATCH)) {
gen_print_batch(&batch->decoder, batch->batch.map,
4 * USED_BATCH(*batch),
- batch->batch.bo->gtt_offset);
+ batch->batch.bo->gtt_offset, false);
}
if (brw->ctx.Const.ResetStrategy == GL_LOSE_CONTEXT_ON_RESET_ARB)