Mesa (master): radv: add support for CmdCopyBuffer2KHR()

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Sep 23 07:26:03 UTC 2020


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

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Tue Sep 22 08:55:38 2020 +0200

radv: add support for CmdCopyBuffer2KHR()

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6813>

---

 src/amd/vulkan/radv_meta_buffer.c | 63 +++++++++++++++++++++++++++++----------
 1 file changed, 47 insertions(+), 16 deletions(-)

diff --git a/src/amd/vulkan/radv_meta_buffer.c b/src/amd/vulkan/radv_meta_buffer.c
index 51c24d9e052..17cdf796a6b 100644
--- a/src/amd/vulkan/radv_meta_buffer.c
+++ b/src/amd/vulkan/radv_meta_buffer.c
@@ -448,6 +448,31 @@ void radv_CmdFillBuffer(
 			 fillSize, data);
 }
 
+static void
+copy_buffer(struct radv_cmd_buffer *cmd_buffer,
+	    struct radv_buffer *src_buffer,
+	    struct radv_buffer *dst_buffer,
+	    const VkBufferCopy2KHR *region)
+{
+	bool old_predicating;
+
+	/* VK_EXT_conditional_rendering says that copy commands should not be
+	 * affected by conditional rendering.
+	 */
+	old_predicating = cmd_buffer->state.predicating;
+	cmd_buffer->state.predicating = false;
+
+	radv_copy_buffer(cmd_buffer,
+			 src_buffer->bo,
+			 dst_buffer->bo,
+			 src_buffer->offset + region->srcOffset,
+			 dst_buffer->offset + region->dstOffset,
+			 region->size);
+
+	/* Restore conditional rendering. */
+	cmd_buffer->state.predicating = old_predicating;
+}
+
 void radv_CmdCopyBuffer(
 	VkCommandBuffer                             commandBuffer,
 	VkBuffer                                    srcBuffer,
@@ -457,26 +482,32 @@ void radv_CmdCopyBuffer(
 {
 	RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
 	RADV_FROM_HANDLE(radv_buffer, src_buffer, srcBuffer);
-	RADV_FROM_HANDLE(radv_buffer, dest_buffer, destBuffer);
-	bool old_predicating;
-
-	/* VK_EXT_conditional_rendering says that copy commands should not be
-	 * affected by conditional rendering.
-	 */
-	old_predicating = cmd_buffer->state.predicating;
-	cmd_buffer->state.predicating = false;
+	RADV_FROM_HANDLE(radv_buffer, dst_buffer, destBuffer);
 
 	for (unsigned r = 0; r < regionCount; r++) {
-		uint64_t src_offset = src_buffer->offset + pRegions[r].srcOffset;
-		uint64_t dest_offset = dest_buffer->offset + pRegions[r].dstOffset;
-		uint64_t copy_size = pRegions[r].size;
-
-		radv_copy_buffer(cmd_buffer, src_buffer->bo, dest_buffer->bo,
-				 src_offset, dest_offset, copy_size);
+		VkBufferCopy2KHR copy = {
+			.sType = VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR,
+			.srcOffset = pRegions[r].srcOffset,
+			.dstOffset = pRegions[r].dstOffset,
+			.size = pRegions[r].size,
+		};
+
+		copy_buffer(cmd_buffer, src_buffer, dst_buffer, &copy);
 	}
+}
 
-	/* Restore conditional rendering. */
-	cmd_buffer->state.predicating = old_predicating;
+void radv_CmdCopyBuffer2KHR(
+	VkCommandBuffer                             commandBuffer,
+	const VkCopyBufferInfo2KHR*                 pCopyBufferInfo)
+{
+	RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
+	RADV_FROM_HANDLE(radv_buffer, src_buffer, pCopyBufferInfo->srcBuffer);
+	RADV_FROM_HANDLE(radv_buffer, dst_buffer, pCopyBufferInfo->dstBuffer);
+
+	for (unsigned r = 0; r < pCopyBufferInfo->regionCount; r++) {
+		copy_buffer(cmd_buffer, src_buffer, dst_buffer,
+			    &pCopyBufferInfo->pRegions[r]);
+	}
 }
 
 void radv_CmdUpdateBuffer(



More information about the mesa-commit mailing list