diff options
author | Samuel Pitoiset <[email protected]> | 2017-12-06 17:48:40 +0100 |
---|---|---|
committer | Samuel Pitoiset <[email protected]> | 2017-12-08 11:21:21 +0100 |
commit | a380bc7ecfe52b726970d62c2bdc12d3840f95e1 (patch) | |
tree | 86b46a6864425abacb7f1cb399f8975406f890d0 | |
parent | fc6c77e162df3405e6de9f5644788984b2f7aacc (diff) |
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 <[email protected]>
Reviewed-by: Dave Airlie <[email protected]>
-rw-r--r-- | src/amd/vulkan/radv_cmd_buffer.c | 6 | ||||
-rw-r--r-- | src/amd/vulkan/radv_device.c | 2 | ||||
-rw-r--r-- | src/amd/vulkan/radv_private.h | 9 |
3 files changed, 17 insertions, 0 deletions
diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index fe4f989dd1b..63a5eebab9d 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 c6288241638..af301799f3b 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 3edfda6b122..b1f6eacef1c 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]; |