diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c index 0d6c393ee6e..80d8aa3c0e1 100644 --- a/src/broadcom/vulkan/v3dv_cmd_buffer.c +++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c @@ -122,7 +122,7 @@ cmd_buffer_init(struct v3dv_cmd_buffer *cmd_buffer, * buffer reset that would reset the loader's dispatch table for the * command buffer, and any other relevant info from vk_object_base */ - const uint32_t base_size = sizeof(struct vk_object_base); + const uint32_t base_size = sizeof(struct vk_command_buffer); uint8_t *cmd_buffer_driver_start = ((uint8_t *) cmd_buffer) + base_size; memset(cmd_buffer_driver_start, 0, sizeof(*cmd_buffer) - base_size); @@ -150,13 +150,21 @@ cmd_buffer_create(struct v3dv_device *device, VkCommandBuffer *pCommandBuffer) { struct v3dv_cmd_buffer *cmd_buffer; - cmd_buffer = vk_object_zalloc(&device->vk, - &pool->alloc, - sizeof(*cmd_buffer), - VK_OBJECT_TYPE_COMMAND_BUFFER); + cmd_buffer = vk_zalloc2(&device->vk.alloc, + &pool->alloc, + sizeof(*cmd_buffer), + 8, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (cmd_buffer == NULL) return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY); + VkResult result; + result = vk_command_buffer_init(&cmd_buffer->vk, &device->vk); + if (result != VK_SUCCESS) { + vk_free2(&device->vk.alloc, &pool->alloc, cmd_buffer); + return result; + } + cmd_buffer_init(cmd_buffer, device, pool, level); *pCommandBuffer = v3dv_cmd_buffer_to_handle(cmd_buffer); @@ -340,7 +348,9 @@ cmd_buffer_destroy(struct v3dv_cmd_buffer *cmd_buffer) { list_del(&cmd_buffer->pool_link); cmd_buffer_free_resources(cmd_buffer); - vk_object_free(&cmd_buffer->device->vk, &cmd_buffer->pool->alloc, cmd_buffer); + vk_command_buffer_finish(&cmd_buffer->vk); + vk_free2(&cmd_buffer->device->vk.alloc, &cmd_buffer->pool->alloc, + cmd_buffer); } static bool @@ -864,6 +874,7 @@ static VkResult cmd_buffer_reset(struct v3dv_cmd_buffer *cmd_buffer, VkCommandBufferResetFlags flags) { + vk_command_buffer_reset(&cmd_buffer->vk); if (cmd_buffer->status != V3DV_CMD_BUFFER_STATUS_INITIALIZED) { struct v3dv_device *device = cmd_buffer->device; struct v3dv_cmd_pool *pool = cmd_buffer->pool; diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index b5ab7ed2c59..fe29c935406 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -43,6 +43,8 @@ #include "vk_shader_module.h" #include "vk_util.h" +#include "vk_command_buffer.h" + #include #ifdef HAVE_VALGRIND @@ -1277,7 +1279,7 @@ struct v3dv_cmd_buffer_private_obj { }; struct v3dv_cmd_buffer { - struct vk_object_base base; + struct vk_command_buffer vk; struct v3dv_device *device;