summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/panfrost/vulkan/panvk_private.h5
-rw-r--r--src/panfrost/vulkan/panvk_vX_cmd_buffer.c18
2 files changed, 17 insertions, 6 deletions
diff --git a/src/panfrost/vulkan/panvk_private.h b/src/panfrost/vulkan/panvk_private.h
index 9c4802396cb..3d91b2eb9b7 100644
--- a/src/panfrost/vulkan/panvk_private.h
+++ b/src/panfrost/vulkan/panvk_private.h
@@ -49,6 +49,7 @@
#include "util/list.h"
#include "util/macros.h"
#include "vk_alloc.h"
+#include "vk_command_buffer.h"
#include "vk_device.h"
#include "vk_instance.h"
#include "vk_object.h"
@@ -660,7 +661,7 @@ struct panvk_cmd_bind_point_state {
};
struct panvk_cmd_buffer {
- struct vk_object_base base;
+ struct vk_command_buffer vk;
struct panvk_device *device;
@@ -1018,7 +1019,7 @@ struct panvk_render_pass {
struct panvk_subpass subpasses[0];
};
-VK_DEFINE_HANDLE_CASTS(panvk_cmd_buffer, base, VkCommandBuffer, VK_OBJECT_TYPE_COMMAND_BUFFER)
+VK_DEFINE_HANDLE_CASTS(panvk_cmd_buffer, vk.base, VkCommandBuffer, VK_OBJECT_TYPE_COMMAND_BUFFER)
VK_DEFINE_HANDLE_CASTS(panvk_device, vk.base, VkDevice, VK_OBJECT_TYPE_DEVICE)
VK_DEFINE_HANDLE_CASTS(panvk_instance, vk.base, VkInstance, VK_OBJECT_TYPE_INSTANCE)
VK_DEFINE_HANDLE_CASTS(panvk_physical_device, vk.base, VkPhysicalDevice, VK_OBJECT_TYPE_PHYSICAL_DEVICE)
diff --git a/src/panfrost/vulkan/panvk_vX_cmd_buffer.c b/src/panfrost/vulkan/panvk_vX_cmd_buffer.c
index 65aee5b81ff..e46a002d338 100644
--- a/src/panfrost/vulkan/panvk_vX_cmd_buffer.c
+++ b/src/panfrost/vulkan/panvk_vX_cmd_buffer.c
@@ -943,6 +943,8 @@ panvk_per_arch(CmdWaitEvents)(VkCommandBuffer commandBuffer,
static VkResult
panvk_reset_cmdbuf(struct panvk_cmd_buffer *cmdbuf)
{
+ vk_command_buffer_reset(&cmdbuf->vk);
+
cmdbuf->record_result = VK_SUCCESS;
list_for_each_entry_safe(struct panvk_batch, batch, &cmdbuf->batches, node) {
@@ -990,7 +992,8 @@ panvk_destroy_cmdbuf(struct panvk_cmd_buffer *cmdbuf)
panvk_pool_cleanup(&cmdbuf->desc_pool);
panvk_pool_cleanup(&cmdbuf->tls_pool);
panvk_pool_cleanup(&cmdbuf->varying_pool);
- vk_object_free(&device->vk, NULL, cmdbuf);
+ vk_command_buffer_finish(&cmdbuf->vk);
+ vk_free(&device->vk.alloc, cmdbuf);
}
static VkResult
@@ -1001,11 +1004,17 @@ panvk_create_cmdbuf(struct panvk_device *device,
{
struct panvk_cmd_buffer *cmdbuf;
- cmdbuf = vk_object_zalloc(&device->vk, NULL, sizeof(*cmdbuf),
- VK_OBJECT_TYPE_COMMAND_BUFFER);
+ cmdbuf = vk_zalloc(&device->vk.alloc, sizeof(*cmdbuf),
+ 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
if (!cmdbuf)
return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
+ VkResult result = vk_command_buffer_init(&cmdbuf->vk, &device->vk);
+ if (result != VK_SUCCESS) {
+ vk_free(&device->vk.alloc, cmdbuf);
+ return result;
+ }
+
cmdbuf->device = device;
cmdbuf->level = level;
cmdbuf->pool = pool;
@@ -1058,7 +1067,8 @@ panvk_per_arch(AllocateCommandBuffers)(VkDevice _device,
list_addtail(&cmdbuf->pool_link, &pool->active_cmd_buffers);
cmdbuf->level = pAllocateInfo->level;
- vk_object_base_reset(&cmdbuf->base);
+ vk_command_buffer_finish(&cmdbuf->vk);
+ result = vk_command_buffer_init(&cmdbuf->vk, &device->vk);
} else {
result = panvk_create_cmdbuf(device, pool, pAllocateInfo->level, &cmdbuf);
}