Mesa (master): radv: track different status of a command buffer

Samuel Pitoiset hakzsam at kemper.freedesktop.org
Fri Dec 8 10:26:09 UTC 2017


Module: Mesa
Branch: master
Commit: a380bc7ecfe52b726970d62c2bdc12d3840f95e1
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a380bc7ecfe52b726970d62c2bdc12d3840f95e1

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Wed Dec  6 17:48:40 2017 +0100

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 <samuel.pitoiset at gmail.com>
Reviewed-by: Dave Airlie <airlied at redhat.com>

---

 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 fe4f989dd1..63a5eebab9 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 c628824163..af301799f3 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 3edfda6b12..b1f6eacef1 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];




More information about the mesa-commit mailing list