summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason@jlekstrand.net>2021-09-23 11:57:20 -0500
committerMarge Bot <eric+marge@anholt.net>2021-09-28 21:08:25 +0000
commit1815271f0a85c79c1c67533a103bd9273f3e9da1 (patch)
tree56c5c20b0f9db0352c5be3e39395552cd3d122f2
parent984678300116a6b9d4c9f5a1f764ee1ecc8ef27a (diff)
panvk: Use vk_command_buffer
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Tested-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13003>
-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);
}