summaryrefslogtreecommitdiffstats
path: root/tools/gfx/vulkan/render-vk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gfx/vulkan/render-vk.cpp')
-rw-r--r--tools/gfx/vulkan/render-vk.cpp25
1 files changed, 20 insertions, 5 deletions
diff --git a/tools/gfx/vulkan/render-vk.cpp b/tools/gfx/vulkan/render-vk.cpp
index 763cea089..d4396429b 100644
--- a/tools/gfx/vulkan/render-vk.cpp
+++ b/tools/gfx/vulkan/render-vk.cpp
@@ -3116,11 +3116,26 @@ public:
size_t srcOffset,
size_t size) override
{
- SLANG_UNUSED(dst);
- SLANG_UNUSED(srcOffset);
- SLANG_UNUSED(src);
- SLANG_UNUSED(dstOffset);
- SLANG_UNUSED(size);
+ auto& vkAPI = m_commandBuffer->m_renderer->m_api;
+
+ auto dstBuffer = static_cast<BufferResourceImpl*>(dst);
+ auto srcBuffer = static_cast<BufferResourceImpl*>(src);
+
+ VkBufferCopy copyRegion;
+ copyRegion.dstOffset = dstOffset;
+ copyRegion.srcOffset = srcOffset;
+ copyRegion.size = size;
+
+ // Note: Vulkan puts the source buffer first in the copy
+ // command, going against the dominant tradition for copy
+ // operations in C/C++.
+ //
+ vkAPI.vkCmdCopyBuffer(
+ m_commandBuffer->m_commandBuffer,
+ srcBuffer->m_buffer.m_buffer,
+ dstBuffer->m_buffer.m_buffer,
+ /* regionCount: */ 1,
+ &copyRegion);
}
virtual SLANG_NO_THROW void SLANG_MCALL
uploadBufferData(IBufferResource* buffer, size_t offset, size_t size, void* data) override