memcpy(dstMemory, getOffsetPointer(pOffset), pSize);
}
+void Buffer::copyTo(Buffer* dstBuffer, const VkBufferCopy& pRegion) const
+{
+ copyTo(dstBuffer->getOffsetPointer(pRegion.dstOffset), pRegion.size, pRegion.srcOffset);
+}
+
void* Buffer::getOffsetPointer(VkDeviceSize offset) const
{
return reinterpret_cast<char*>(memory) + offset;
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 copyTo(Buffer* dstBuffer, const VkBufferCopy& pRegion) const;
void* getOffsetPointer(VkDeviceSize offset) const;
private:
const VkImageCopy region;
};
+struct BufferToBufferCopy : public CommandBuffer::Command
+{
+ BufferToBufferCopy(VkBuffer pSrcBuffer, VkBuffer pDstBuffer, const VkBufferCopy& pRegion) :
+ srcBuffer(pSrcBuffer), dstBuffer(pDstBuffer), region(pRegion)
+ {
+ }
+
+ void play(CommandBuffer::ExecutionState& executionState)
+ {
+ Cast(srcBuffer)->copyTo(Cast(dstBuffer), region);
+ }
+
+private:
+ VkBuffer srcBuffer;
+ VkBuffer dstBuffer;
+ const VkBufferCopy region;
+};
+
struct ImageToBufferCopy : public CommandBuffer::Command
{
ImageToBufferCopy(VkImage pSrcImage, VkBuffer pDstBuffer, const VkBufferImageCopy& pRegion) :
void CommandBuffer::copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
{
- UNIMPLEMENTED();
+ ASSERT(state == RECORDING);
+
+ for(uint32_t i = 0; i < regionCount; i++)
+ {
+ commands->push_back(std::make_unique<BufferToBufferCopy>(srcBuffer, dstBuffer, pRegions[i]));
+ }
}
void CommandBuffer::copyImage(VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout,