Module: Mesa Branch: main Commit: c5b8ee8810d1b590dbb9b55806a05734955931e1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c5b8ee8810d1b590dbb9b55806a05734955931e1
Author: Jason Ekstrand <[email protected]> Date: Mon Feb 7 14:03:21 2022 -0600 anv: Use vk_command_pool Reviewed-by: Lionel Landwerlin <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14917> --- src/intel/vulkan/anv_batch_chain.c | 26 +++++++++++++------------- src/intel/vulkan/anv_cmd_buffer.c | 35 ++++++++++++++++++----------------- src/intel/vulkan/anv_measure.c | 4 ++-- src/intel/vulkan/anv_private.h | 10 ++++------ src/intel/vulkan/genX_blorp_exec.c | 4 ++-- src/intel/vulkan/genX_cmd_buffer.c | 12 ++++++------ src/intel/vulkan/genX_query.c | 2 +- 7 files changed, 46 insertions(+), 47 deletions(-) diff --git a/src/intel/vulkan/anv_batch_chain.c b/src/intel/vulkan/anv_batch_chain.c index 9c73571b443..70e61807c86 100644 --- a/src/intel/vulkan/anv_batch_chain.c +++ b/src/intel/vulkan/anv_batch_chain.c @@ -349,7 +349,7 @@ anv_batch_bo_create(struct anv_cmd_buffer *cmd_buffer, { VkResult result; - struct anv_batch_bo *bbo = vk_alloc(&cmd_buffer->pool->alloc, sizeof(*bbo), + struct anv_batch_bo *bbo = vk_alloc(&cmd_buffer->pool->vk.alloc, sizeof(*bbo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (bbo == NULL) return vk_error(cmd_buffer, VK_ERROR_OUT_OF_HOST_MEMORY); @@ -359,7 +359,7 @@ anv_batch_bo_create(struct anv_cmd_buffer *cmd_buffer, if (result != VK_SUCCESS) goto fail_alloc; - result = anv_reloc_list_init(&bbo->relocs, &cmd_buffer->pool->alloc); + result = anv_reloc_list_init(&bbo->relocs, &cmd_buffer->pool->vk.alloc); if (result != VK_SUCCESS) goto fail_bo_alloc; @@ -370,7 +370,7 @@ anv_batch_bo_create(struct anv_cmd_buffer *cmd_buffer, fail_bo_alloc: anv_bo_pool_free(&cmd_buffer->device->batch_bo_pool, bbo->bo); fail_alloc: - vk_free(&cmd_buffer->pool->alloc, bbo); + vk_free(&cmd_buffer->pool->vk.alloc, bbo); return result; } @@ -382,7 +382,7 @@ anv_batch_bo_clone(struct anv_cmd_buffer *cmd_buffer, { VkResult result; - struct anv_batch_bo *bbo = vk_alloc(&cmd_buffer->pool->alloc, sizeof(*bbo), + struct anv_batch_bo *bbo = vk_alloc(&cmd_buffer->pool->vk.alloc, sizeof(*bbo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (bbo == NULL) return vk_error(cmd_buffer, VK_ERROR_OUT_OF_HOST_MEMORY); @@ -392,7 +392,7 @@ anv_batch_bo_clone(struct anv_cmd_buffer *cmd_buffer, if (result != VK_SUCCESS) goto fail_alloc; - result = anv_reloc_list_init_clone(&bbo->relocs, &cmd_buffer->pool->alloc, + result = anv_reloc_list_init_clone(&bbo->relocs, &cmd_buffer->pool->vk.alloc, &other_bbo->relocs); if (result != VK_SUCCESS) goto fail_bo_alloc; @@ -406,7 +406,7 @@ anv_batch_bo_clone(struct anv_cmd_buffer *cmd_buffer, fail_bo_alloc: anv_bo_pool_free(&cmd_buffer->device->batch_bo_pool, bbo->bo); fail_alloc: - vk_free(&cmd_buffer->pool->alloc, bbo); + vk_free(&cmd_buffer->pool->vk.alloc, bbo); return result; } @@ -508,9 +508,9 @@ static void anv_batch_bo_destroy(struct anv_batch_bo *bbo, struct anv_cmd_buffer *cmd_buffer) { - anv_reloc_list_finish(&bbo->relocs, &cmd_buffer->pool->alloc); + anv_reloc_list_finish(&bbo->relocs, &cmd_buffer->pool->vk.alloc); anv_bo_pool_free(&cmd_buffer->device->batch_bo_pool, bbo->bo); - vk_free(&cmd_buffer->pool->alloc, bbo); + vk_free(&cmd_buffer->pool->vk.alloc, bbo); } static VkResult @@ -639,7 +639,7 @@ anv_cmd_buffer_record_chain_submit(struct anv_cmd_buffer *cmd_buffer_from, .start = last_bbo->bo->map, .end = last_bbo->bo->map + last_bbo->bo->size, .relocs = &last_bbo->relocs, - .alloc = &cmd_buffer_from->pool->alloc, + .alloc = &cmd_buffer_from->pool->vk.alloc, }; __anv_cmd_pack(GFX8_MI_BATCH_BUFFER_START)(&local_batch, bb_start, &gen_bb_start); @@ -852,7 +852,7 @@ anv_cmd_buffer_init_batch_bo_chain(struct anv_cmd_buffer *cmd_buffer) list_addtail(&batch_bo->link, &cmd_buffer->batch_bos); - cmd_buffer->batch.alloc = &cmd_buffer->pool->alloc; + cmd_buffer->batch.alloc = &cmd_buffer->pool->vk.alloc; cmd_buffer->batch.user_data = cmd_buffer; if (cmd_buffer->device->can_chain_batches) { @@ -877,7 +877,7 @@ anv_cmd_buffer_init_batch_bo_chain(struct anv_cmd_buffer *cmd_buffer) goto fail_seen_bbos; result = anv_reloc_list_init(&cmd_buffer->surface_relocs, - &cmd_buffer->pool->alloc); + &cmd_buffer->pool->vk.alloc); if (result != VK_SUCCESS) goto fail_bt_blocks; cmd_buffer->last_ss_pool_center = 0; @@ -906,7 +906,7 @@ anv_cmd_buffer_fini_batch_bo_chain(struct anv_cmd_buffer *cmd_buffer) anv_binding_table_pool_free(cmd_buffer->device, *bt_block); u_vector_finish(&cmd_buffer->bt_block_states); - anv_reloc_list_finish(&cmd_buffer->surface_relocs, &cmd_buffer->pool->alloc); + anv_reloc_list_finish(&cmd_buffer->surface_relocs, &cmd_buffer->pool->vk.alloc); u_vector_finish(&cmd_buffer->seen_bbos); @@ -1167,7 +1167,7 @@ anv_cmd_buffer_add_secondary(struct anv_cmd_buffer *primary, assert(!"Invalid execution mode"); } - anv_reloc_list_append(&primary->surface_relocs, &primary->pool->alloc, + anv_reloc_list_append(&primary->surface_relocs, &primary->pool->vk.alloc, &secondary->surface_relocs, 0); } diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c index 8b859361eeb..33db07818ae 100644 --- a/src/intel/vulkan/anv_cmd_buffer.c +++ b/src/intel/vulkan/anv_cmd_buffer.c @@ -238,7 +238,7 @@ anv_cmd_pipeline_state_finish(struct anv_cmd_buffer *cmd_buffer, if (pipe_state->push_descriptors[i]) { anv_descriptor_set_layout_unref(cmd_buffer->device, pipe_state->push_descriptors[i]->set.layout); - vk_free(&cmd_buffer->pool->alloc, pipe_state->push_descriptors[i]); + vk_free(&cmd_buffer->pool->vk.alloc, pipe_state->push_descriptors[i]); } } } @@ -251,7 +251,7 @@ anv_cmd_state_finish(struct anv_cmd_buffer *cmd_buffer) anv_cmd_pipeline_state_finish(cmd_buffer, &state->gfx.base); anv_cmd_pipeline_state_finish(cmd_buffer, &state->compute.base); - vk_free(&cmd_buffer->pool->alloc, state->attachments); + vk_free(&cmd_buffer->pool->vk.alloc, state->attachments); } static void @@ -270,7 +270,7 @@ static VkResult anv_create_cmd_buffer( struct anv_cmd_buffer *cmd_buffer; VkResult result; - cmd_buffer = vk_alloc2(&device->vk.alloc, &pool->alloc, sizeof(*cmd_buffer), + cmd_buffer = vk_alloc2(&device->vk.alloc, &pool->vk.alloc, sizeof(*cmd_buffer), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (cmd_buffer == NULL) return vk_error(pool, VK_ERROR_OUT_OF_HOST_MEMORY); @@ -312,7 +312,7 @@ static VkResult anv_create_cmd_buffer( fail_vk: vk_command_buffer_finish(&cmd_buffer->vk); fail_alloc: - vk_free2(&device->vk.alloc, &pool->alloc, cmd_buffer); + vk_free2(&device->vk.alloc, &pool->vk.alloc, cmd_buffer); return result; } @@ -362,10 +362,10 @@ anv_cmd_buffer_destroy(struct anv_cmd_buffer *cmd_buffer) anv_cmd_state_finish(cmd_buffer); - vk_free(&cmd_buffer->pool->alloc, cmd_buffer->self_mod_locations); + vk_free(&cmd_buffer->pool->vk.alloc, cmd_buffer->self_mod_locations); vk_command_buffer_finish(&cmd_buffer->vk); - vk_free2(&cmd_buffer->device->vk.alloc, &cmd_buffer->pool->alloc, + vk_free2(&cmd_buffer->device->vk.alloc, &cmd_buffer->pool->vk.alloc, cmd_buffer); } @@ -1375,24 +1375,24 @@ VkResult anv_CreateCommandPool( ANV_FROM_HANDLE(anv_device, device, _device); struct anv_cmd_pool *pool; - pool = vk_object_alloc(&device->vk, pAllocator, sizeof(*pool), - VK_OBJECT_TYPE_COMMAND_POOL); + pool = vk_alloc2(&device->vk.alloc, pAllocator, sizeof(*pool), 8, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (pool == NULL) return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); + VkResult result = vk_command_pool_init(&pool->vk, &device->vk, + pCreateInfo, pAllocator); + if (result != VK_SUCCESS) { + vk_free2(&device->vk.alloc, pAllocator, pool); + return result; + } + assert(pCreateInfo->queueFamilyIndex < device->physical->queue.family_count); pool->queue_family = &device->physical->queue.families[pCreateInfo->queueFamilyIndex]; - if (pAllocator) - pool->alloc = *pAllocator; - else - pool->alloc = device->vk.alloc; - list_inithead(&pool->cmd_buffers); - pool->flags = pCreateInfo->flags; - *pCmdPool = anv_cmd_pool_to_handle(pool); return VK_SUCCESS; @@ -1414,7 +1414,8 @@ void anv_DestroyCommandPool( anv_cmd_buffer_destroy(cmd_buffer); } - vk_object_free(&device->vk, pAllocator, pool); + vk_command_pool_finish(&pool->vk); + vk_free2(&device->vk.alloc, pAllocator, pool); } VkResult anv_ResetCommandPool( @@ -1527,7 +1528,7 @@ anv_cmd_buffer_push_descriptor_set(struct anv_cmd_buffer *cmd_buffer, &pipe_state->push_descriptors[_set]; if (*push_set == NULL) { - *push_set = vk_zalloc(&cmd_buffer->pool->alloc, + *push_set = vk_zalloc(&cmd_buffer->pool->vk.alloc, sizeof(struct anv_push_descriptor_set), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (*push_set == NULL) { diff --git a/src/intel/vulkan/anv_measure.c b/src/intel/vulkan/anv_measure.c index 0de60eedf0e..75ed941943a 100644 --- a/src/intel/vulkan/anv_measure.c +++ b/src/intel/vulkan/anv_measure.c @@ -108,7 +108,7 @@ anv_measure_init(struct anv_cmd_buffer *cmd_buffer) const size_t batch_bytes = sizeof(struct anv_measure_batch) + config->batch_size * sizeof(struct intel_measure_snapshot); struct anv_measure_batch * measure = - vk_alloc(&cmd_buffer->pool->alloc, + vk_alloc(&cmd_buffer->pool->vk.alloc, batch_bytes, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); @@ -363,7 +363,7 @@ anv_measure_destroy(struct anv_cmd_buffer *cmd_buffer) intel_measure_gather(&physical->measure_device, &physical->info); anv_device_release_bo(device, measure->bo); - vk_free(&cmd_buffer->pool->alloc, measure); + vk_free(&cmd_buffer->pool->vk.alloc, measure); cmd_buffer->measure = NULL; } diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index e7d68f63466..7bce8bc1d04 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -67,6 +67,8 @@ #include "util/vma.h" #include "util/xmlconfig.h" #include "vk_alloc.h" +#include "vk_command_buffer.h" +#include "vk_command_pool.h" #include "vk_debug_report.h" #include "vk_device.h" #include "vk_drm_syncobj.h" @@ -78,7 +80,6 @@ #include "vk_sync.h" #include "vk_sync_timeline.h" #include "vk_util.h" -#include "vk_command_buffer.h" #include "vk_queue.h" #include "vk_log.h" @@ -3129,11 +3130,8 @@ struct anv_cmd_state { }; struct anv_cmd_pool { - struct vk_object_base base; - VkAllocationCallbacks alloc; + struct vk_command_pool vk; struct list_head cmd_buffers; - - VkCommandPoolCreateFlags flags; struct anv_queue_family * queue_family; }; @@ -4728,7 +4726,7 @@ VK_DEFINE_HANDLE_CASTS(anv_queue, vk.base, VkQueue, VK_OBJECT_TYPE_QUEUE) VK_DEFINE_NONDISP_HANDLE_CASTS(anv_acceleration_structure, base, VkAccelerationStructureKHR, VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR) -VK_DEFINE_NONDISP_HANDLE_CASTS(anv_cmd_pool, base, VkCommandPool, +VK_DEFINE_NONDISP_HANDLE_CASTS(anv_cmd_pool, vk.base, VkCommandPool, VK_OBJECT_TYPE_COMMAND_POOL) VK_DEFINE_NONDISP_HANDLE_CASTS(anv_buffer, base, VkBuffer, VK_OBJECT_TYPE_BUFFER) diff --git a/src/intel/vulkan/genX_blorp_exec.c b/src/intel/vulkan/genX_blorp_exec.c index 7cd7c5febda..5700a739a22 100644 --- a/src/intel/vulkan/genX_blorp_exec.c +++ b/src/intel/vulkan/genX_blorp_exec.c @@ -86,7 +86,7 @@ blorp_surface_reloc(struct blorp_batch *batch, uint32_t ss_offset, if (ANV_ALWAYS_SOFTPIN) { result = anv_reloc_list_add_bo(&cmd_buffer->surface_relocs, - &cmd_buffer->pool->alloc, + &cmd_buffer->pool->vk.alloc, address.buffer); if (unlikely(result != VK_SUCCESS)) anv_batch_set_error(&cmd_buffer->batch, result); @@ -95,7 +95,7 @@ blorp_surface_reloc(struct blorp_batch *batch, uint32_t ss_offset, uint64_t address_u64 = 0; result = anv_reloc_list_add(&cmd_buffer->surface_relocs, - &cmd_buffer->pool->alloc, + &cmd_buffer->pool->vk.alloc, ss_offset, address.buffer, address.offset + delta, &address_u64); diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 889be792bf7..153ca1ecb92 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -295,12 +295,12 @@ add_surface_reloc(struct anv_cmd_buffer *cmd_buffer, if (anv_use_relocations(cmd_buffer->device->physical)) { const struct isl_device *isl_dev = &cmd_buffer->device->isl_dev; result = anv_reloc_list_add(&cmd_buffer->surface_relocs, - &cmd_buffer->pool->alloc, + &cmd_buffer->pool->vk.alloc, state.offset + isl_dev->ss.addr_offset, addr.bo, addr.offset, NULL); } else { result = anv_reloc_list_add_bo(&cmd_buffer->surface_relocs, - &cmd_buffer->pool->alloc, + &cmd_buffer->pool->vk.alloc, addr.bo); } @@ -320,7 +320,7 @@ add_surface_state_relocs(struct anv_cmd_buffer *cmd_buffer, if (!anv_address_is_null(state.aux_address)) { VkResult result = anv_reloc_list_add(&cmd_buffer->surface_relocs, - &cmd_buffer->pool->alloc, + &cmd_buffer->pool->vk.alloc, state.state.offset + isl_dev->ss.aux_addr_offset, state.aux_address.bo, state.aux_address.offset, @@ -332,7 +332,7 @@ add_surface_state_relocs(struct anv_cmd_buffer *cmd_buffer, if (!anv_address_is_null(state.clear_address)) { VkResult result = anv_reloc_list_add(&cmd_buffer->surface_relocs, - &cmd_buffer->pool->alloc, + &cmd_buffer->pool->vk.alloc, state.state.offset + isl_dev->ss.clear_color_state_offset, state.clear_address.bo, @@ -1544,10 +1544,10 @@ cmd_buffer_alloc_state_attachments(struct anv_cmd_buffer *cmd_buffer, { struct anv_cmd_state *state = &cmd_buffer->state; - vk_free(&cmd_buffer->pool->alloc, state->attachments); + vk_free(&cmd_buffer->pool->vk.alloc, state->attachments); if (attachment_count > 0) { - state->attachments = vk_zalloc(&cmd_buffer->pool->alloc, + state->attachments = vk_zalloc(&cmd_buffer->pool->vk.alloc, attachment_count * sizeof(state->attachments[0]), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); diff --git a/src/intel/vulkan/genX_query.c b/src/intel/vulkan/genX_query.c index 98d5fd87f25..e3a293edfea 100644 --- a/src/intel/vulkan/genX_query.c +++ b/src/intel/vulkan/genX_query.c @@ -335,7 +335,7 @@ khr_perf_query_ensure_relocs(struct anv_cmd_buffer *cmd_buffer) const struct anv_physical_device *pdevice = device->physical; cmd_buffer->self_mod_locations = - vk_alloc(&cmd_buffer->pool->alloc, + vk_alloc(&cmd_buffer->pool->vk.alloc, pdevice->n_perf_query_commands * sizeof(*cmd_buffer->self_mod_locations), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
