Buffer copy
Buffer now has the ability to copy its content to or from memory.
Bug b/118383648
Change-Id: Ic01bf049fe054559299830ca750263c2277e4d86
Reviewed-on: https://swiftshader-review.googlesource.com/c/23069
Reviewed-by: Chris Forbes <chrisforbes@google.com>
Tested-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Vulkan/VkBuffer.cpp b/src/Vulkan/VkBuffer.cpp
index c0e478c..93c509a 100644
--- a/src/Vulkan/VkBuffer.cpp
+++ b/src/Vulkan/VkBuffer.cpp
@@ -55,4 +55,23 @@
memory = Cast(pDeviceMemory)->getOffsetPointer(pMemoryOffset);
}
+void Buffer::copyFrom(const void* srcMemory, VkDeviceSize pSize, VkDeviceSize pOffset)
+{
+ ASSERT((pSize + pOffset) <= size);
+
+ memcpy(map(pOffset), srcMemory, pSize);
+}
+
+void Buffer::copyTo(void* dstMemory, VkDeviceSize pSize, VkDeviceSize pOffset) const
+{
+ ASSERT((pSize + pOffset) <= size);
+
+ memcpy(dstMemory, map(pOffset), pSize);
+}
+
+void* Buffer::map(VkDeviceSize offset) const
+{
+ return reinterpret_cast<char*>(memory) + offset;
+}
+
} // namespace vk
diff --git a/src/Vulkan/VkBuffer.hpp b/src/Vulkan/VkBuffer.hpp
index f25a717..7dcdb29 100644
--- a/src/Vulkan/VkBuffer.hpp
+++ b/src/Vulkan/VkBuffer.hpp
@@ -31,6 +31,9 @@
const VkMemoryRequirements getMemoryRequirements() const;
void bind(VkDeviceMemory pDeviceMemory, VkDeviceSize pMemoryOffset);
+ void copyFrom(const void* srcMemory, VkDeviceSize size, VkDeviceSize offset);
+ void copyTo(void* dstMemory, VkDeviceSize size, VkDeviceSize offset) const;
+ void* map(VkDeviceSize offset) const;
private:
void* memory = nullptr;