diff --git a/src/amd/vulkan/radv_debug.c b/src/amd/vulkan/radv_debug.c index c1b1f52e715..47aa78ba546 100644 --- a/src/amd/vulkan/radv_debug.c +++ b/src/amd/vulkan/radv_debug.c @@ -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) { diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h index 870da72df17..8d828aaa28a 100644 --- a/src/amd/vulkan/radv_debug.h +++ b/src/amd/vulkan/radv_debug.h @@ -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); diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 072659e7e2c..85dfd619134 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -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,