Mesa (master): radv: only reset command buffers that are not in the initial state

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


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

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

radv: only reset command buffers that are not in the initial state

dota2 always calls vkResetCommandBuffer() before
vkBeginCommandBuffer() which is quite useless.

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 | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 63a5eebab9..8821fcacef 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -2230,11 +2230,16 @@ VkResult radv_BeginCommandBuffer(
 	const VkCommandBufferBeginInfo *pBeginInfo)
 {
 	RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
-	VkResult result;
+	VkResult result = VK_SUCCESS;
 
-	result = radv_reset_cmd_buffer(cmd_buffer);
-	if (result != VK_SUCCESS)
-		return result;
+	if (cmd_buffer->status != RADV_CMD_BUFFER_STATUS_INITIAL) {
+		/* If the command buffer has already been resetted with
+		 * vkResetCommandBuffer, no need to do it again.
+		 */
+		result = radv_reset_cmd_buffer(cmd_buffer);
+		if (result != VK_SUCCESS)
+			return result;
+	}
 
 	memset(&cmd_buffer->state, 0, sizeof(cmd_buffer->state));
 	cmd_buffer->state.last_primitive_reset_en = -1;




More information about the mesa-commit mailing list