From a380bc7ecfe52b726970d62c2bdc12d3840f95e1 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 6 Dec 2017 17:48:40 +0100 Subject: [PATCH] radv: track different status of a command buffer RADV_CMD_BUFFER_STATUS_INVALID is not used for now, but I think it makes sense to declare it. Could be used later with better command buffer error handling. Signed-off-by: Samuel Pitoiset Reviewed-by: Dave Airlie --- src/amd/vulkan/radv_cmd_buffer.c | 6 ++++++ src/amd/vulkan/radv_device.c | 2 ++ src/amd/vulkan/radv_private.h | 9 +++++++++ 3 files changed, 17 insertions(+) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index fe4f989..63a5eeb 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -292,6 +292,8 @@ radv_reset_cmd_buffer(struct radv_cmd_buffer *cmd_buffer) cmd_buffer->gfx9_fence_bo = cmd_buffer->upload.upload_bo; } + cmd_buffer->status = RADV_CMD_BUFFER_STATUS_INITIAL; + return cmd_buffer->record_result; } @@ -2271,6 +2273,8 @@ VkResult radv_BeginCommandBuffer( if (unlikely(cmd_buffer->device->trace_bo)) radv_cmd_buffer_trace_emit(cmd_buffer); + cmd_buffer->status = RADV_CMD_BUFFER_STATUS_RECORDING; + return result; } @@ -2539,6 +2543,8 @@ VkResult radv_EndCommandBuffer( if (!cmd_buffer->device->ws->cs_finalize(cmd_buffer->cs)) return vk_error(VK_ERROR_OUT_OF_DEVICE_MEMORY); + cmd_buffer->status = RADV_CMD_BUFFER_STATUS_EXECUTABLE; + return cmd_buffer->record_result; } diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index c628824..af30179 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -2019,6 +2019,8 @@ VkResult radv_QueueSubmit( cs_array[j] = cmd_buffer->cs; if ((cmd_buffer->usage_flags & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)) can_patch = false; + + cmd_buffer->status = RADV_CMD_BUFFER_STATUS_PENDING; } for (uint32_t j = 0; j < pSubmits[i].commandBufferCount; j += advance) { diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 3edfda6..b1f6eac 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -857,6 +857,14 @@ struct radv_cmd_buffer_upload { struct list_head list; }; +enum radv_cmd_buffer_status { + RADV_CMD_BUFFER_STATUS_INVALID, + RADV_CMD_BUFFER_STATUS_INITIAL, + RADV_CMD_BUFFER_STATUS_RECORDING, + RADV_CMD_BUFFER_STATUS_EXECUTABLE, + RADV_CMD_BUFFER_STATUS_PENDING, +}; + struct radv_cmd_buffer { VK_LOADER_DATA _loader_data; @@ -867,6 +875,7 @@ struct radv_cmd_buffer { VkCommandBufferUsageFlags usage_flags; VkCommandBufferLevel level; + enum radv_cmd_buffer_status status; struct radeon_winsys_cs *cs; struct radv_cmd_state state; struct radv_vertex_binding vertex_bindings[MAX_VBS]; -- 2.7.4