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 fe4f989dd1b9037cc8e71c809aba14a61ee7b69d..63a5eebab9dc3fbdbccfae001904afd8092f825d 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 c6288241638d0f74a6df6dbc7518ec97311ae905..af301799f3b815accff5789b73d47ec72fb9388a 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 3edfda6b122996986f5c3d8f4ad7e2b9557aa681..b1f6eacef1cd73839374c7196a6c9ffef529ec46 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];