radv: track different status of a command buffer
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 6 Dec 2017 16:48:40 +0000 (17:48 +0100)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Fri, 8 Dec 2017 10:21:21 +0000 (11:21 +0100)
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 <samuel.pitoiset@gmail.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
src/amd/vulkan/radv_cmd_buffer.c
src/amd/vulkan/radv_device.c
src/amd/vulkan/radv_private.h

index fe4f989..63a5eeb 100644 (file)
@@ -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;
 }
 
index c628824..af30179 100644 (file)
@@ -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) {
index 3edfda6..b1f6eac 100644 (file)
@@ -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];