summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>2021-02-09 11:51:38 +0100
committerMarge Bot <eric+marge@anholt.net>2021-02-19 08:58:19 +0000
commit918838cd24ed9d48e8f318c8520b6caf04a71a1b (patch)
tree1274b557dda24051e19c9c9cb2e505e6e3df915b
parentd96c0a22639a858ac7439de72c784652474e3459 (diff)
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>
-rw-r--r--src/amd/vulkan/radv_debug.c16
-rw-r--r--src/amd/vulkan/radv_debug.h1
-rw-r--r--src/amd/vulkan/radv_device.c13
3 files changed, 21 insertions, 9 deletions
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,