diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 7623c78a22e..b3c81f23a2c 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1170,6 +1170,7 @@ struct anv_device { struct list_head memory_objects; struct anv_bo_pool batch_bo_pool; + struct anv_bo_pool utrace_bo_pool; struct anv_bo_cache bo_cache; diff --git a/src/intel/vulkan/anv_utrace.c b/src/intel/vulkan/anv_utrace.c index 4e659529335..729d7a57ae8 100644 --- a/src/intel/vulkan/anv_utrace.c +++ b/src/intel/vulkan/anv_utrace.c @@ -119,19 +119,16 @@ anv_device_utrace_flush_cmd_buffers(struct anv_queue *queue, goto error_sync; if (utrace_copies > 0) { - result = - anv_device_alloc_bo(device, "utrace-copy-buf", utrace_copies * 4096, - ANV_BO_ALLOC_MAPPED, 0 /* explicit_address */, - &flush->trace_bo); + result = anv_bo_pool_alloc(&device->utrace_bo_pool, + utrace_copies * 4096, + &flush->trace_bo); if (result != VK_SUCCESS) goto error_trace_buf; - result = - anv_device_alloc_bo(device, "utrace-copy-batch", - /* 128 dwords of setup + 64 dwords per copy */ - align_u32(512 + 64 * utrace_copies, 4096), - ANV_BO_ALLOC_MAPPED, 0 /* explicit_address */, - &flush->batch_bo); + result = anv_bo_pool_alloc(&device->utrace_bo_pool, + /* 128 dwords of setup + 64 dwords per copy */ + align_u32(512 + 64 * utrace_copies, 4096), + &flush->batch_bo); if (result != VK_SUCCESS) goto error_batch_buf; @@ -184,9 +181,9 @@ anv_device_utrace_flush_cmd_buffers(struct anv_queue *queue, error_batch: anv_reloc_list_finish(&flush->relocs, &device->vk.alloc); error_reloc_list: - anv_device_release_bo(device, flush->batch_bo); + anv_bo_pool_free(&device->utrace_bo_pool, flush->batch_bo); error_batch_buf: - anv_device_release_bo(device, flush->trace_bo); + anv_bo_pool_free(&device->utrace_bo_pool, flush->trace_bo); error_trace_buf: vk_sync_destroy(&device->vk, flush->sync); error_sync: @@ -202,8 +199,9 @@ anv_utrace_create_ts_buffer(struct u_trace_context *utctx, uint32_t size_b) struct anv_bo *bo = NULL; UNUSED VkResult result = - anv_device_alloc_bo(device, "utrace-ts", align_u32(size_b, 4096), - ANV_BO_ALLOC_MAPPED, 0, &bo); + anv_bo_pool_alloc(&device->utrace_bo_pool, + align_u32(size_b, 4096), + &bo); assert(result == VK_SUCCESS); return bo; @@ -216,7 +214,7 @@ anv_utrace_destroy_ts_buffer(struct u_trace_context *utctx, void *timestamps) container_of(utctx, struct anv_device, ds.trace_context); struct anv_bo *bo = timestamps; - anv_device_release_bo(device, bo); + anv_bo_pool_free(&device->utrace_bo_pool, bo); } static void @@ -285,6 +283,7 @@ queue_family_to_name(const struct anv_queue_family *family) void anv_device_utrace_init(struct anv_device *device) { + anv_bo_pool_init(&device->utrace_bo_pool, device, "utrace"); intel_ds_device_init(&device->ds, &device->info, device->fd, device->physical->local_minor - 128, INTEL_DS_API_VULKAN); @@ -311,6 +310,7 @@ anv_device_utrace_finish(struct anv_device *device) { u_trace_context_process(&device->ds.trace_context, true); intel_ds_device_fini(&device->ds); + anv_bo_pool_finish(&device->utrace_bo_pool); } enum intel_ds_stall_flag