radv: make the trace BO a resident buffer
It's always used if RADV_DEBUG=hang is set. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9076>
This commit is contained in:
parent
d96c0a2263
commit
918838cd24
|
@ -65,6 +65,7 @@ bool
|
|||
radv_init_trace(struct radv_device *device)
|
||||
{
|
||||
struct radeon_winsys *ws = device->ws;
|
||||
VkResult result;
|
||||
|
||||
device->trace_bo = ws->buffer_create(ws, TRACE_BO_SIZE, 8,
|
||||
RADEON_DOMAIN_VRAM,
|
||||
|
@ -75,6 +76,10 @@ radv_init_trace(struct radv_device *device)
|
|||
if (!device->trace_bo)
|
||||
return false;
|
||||
|
||||
result = ws->buffer_make_resident(ws, device->trace_bo, true);
|
||||
if (result != VK_SUCCESS)
|
||||
return false;
|
||||
|
||||
device->trace_id_ptr = ws->buffer_map(device->trace_bo);
|
||||
if (!device->trace_id_ptr)
|
||||
return false;
|
||||
|
@ -85,6 +90,17 @@ radv_init_trace(struct radv_device *device)
|
|||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
radv_finish_trace(struct radv_device *device)
|
||||
{
|
||||
struct radeon_winsys *ws = device->ws;
|
||||
|
||||
if (unlikely(device->trace_bo)) {
|
||||
ws->buffer_make_resident(ws, device->trace_bo, false);
|
||||
ws->buffer_destroy(ws, device->trace_bo);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
radv_dump_trace(struct radv_device *device, struct radeon_cmdbuf *cs, FILE *f)
|
||||
{
|
||||
|
|
|
@ -76,6 +76,7 @@ enum {
|
|||
|
||||
bool
|
||||
radv_init_trace(struct radv_device *device);
|
||||
void radv_finish_trace(struct radv_device *device);
|
||||
|
||||
void
|
||||
radv_check_gpu_hangs(struct radv_queue *queue, struct radeon_cmdbuf *cs);
|
||||
|
|
|
@ -2685,6 +2685,8 @@ check_physical_device_features(VkPhysicalDevice physicalDevice,
|
|||
|
||||
static VkResult radv_device_init_border_color(struct radv_device *device)
|
||||
{
|
||||
VkResult result;
|
||||
|
||||
device->border_color_data.bo =
|
||||
device->ws->buffer_create(device->ws,
|
||||
RADV_BORDER_COLOR_BUFFER_SIZE,
|
||||
|
@ -3088,9 +3090,7 @@ fail:
|
|||
free(device->thread_trace.trigger_file);
|
||||
|
||||
radv_trap_handler_finish(device);
|
||||
|
||||
if (device->trace_bo)
|
||||
device->ws->buffer_destroy(device->ws, device->trace_bo);
|
||||
radv_finish_trace(device);
|
||||
|
||||
if (device->gfx_init)
|
||||
device->ws->buffer_destroy(device->ws, device->gfx_init);
|
||||
|
@ -3123,9 +3123,6 @@ void radv_DestroyDevice(
|
|||
if (!device)
|
||||
return;
|
||||
|
||||
if (device->trace_bo)
|
||||
device->ws->buffer_destroy(device->ws, device->trace_bo);
|
||||
|
||||
if (device->gfx_init)
|
||||
device->ws->buffer_destroy(device->ws, device->gfx_init);
|
||||
|
||||
|
@ -3151,6 +3148,7 @@ void radv_DestroyDevice(
|
|||
radv_DestroyPipelineCache(radv_device_to_handle(device), pc, NULL);
|
||||
|
||||
radv_trap_handler_finish(device);
|
||||
radv_finish_trace(device);
|
||||
|
||||
radv_destroy_shader_slabs(device);
|
||||
|
||||
|
@ -3987,9 +3985,6 @@ radv_get_preamble_cs(struct radv_queue *queue,
|
|||
if (gds_oa_bo)
|
||||
radv_cs_add_buffer(queue->device->ws, cs, gds_oa_bo);
|
||||
|
||||
if (queue->device->trace_bo)
|
||||
radv_cs_add_buffer(queue->device->ws, cs, queue->device->trace_bo);
|
||||
|
||||
if (i == 0) {
|
||||
si_cs_emit_cache_flush(cs,
|
||||
queue->device->physical_device->rad_info.chip_class,
|
||||
|
|
Loading…
Reference in New Issue