| 193 | } |
| 194 | |
| 195 | void VKRenderSystem::WriteBuffer(Buffer& dstBuffer, std::uint64_t dstOffset, const void* data, std::uint64_t dataSize) |
| 196 | { |
| 197 | auto& bufferVK = LLGL_CAST(VKBuffer&, dstBuffer); |
| 198 | |
| 199 | if (bufferVK.GetStagingVkBuffer() != VK_NULL_HANDLE) |
| 200 | { |
| 201 | /* Copy data to staging buffer memory */ |
| 202 | device_.WriteBuffer(bufferVK.GetStagingDeviceBuffer(), data, dataSize, dstOffset); |
| 203 | |
| 204 | /* Copy staging buffer into hardware buffer */ |
| 205 | device_.CopyBuffer(bufferVK.GetStagingVkBuffer(), bufferVK.GetVkBuffer(), dataSize, dstOffset, dstOffset); |
| 206 | } |
| 207 | else |
| 208 | { |
| 209 | /* Create staging buffer */ |
| 210 | VkBufferCreateInfo stagingCreateInfo; |
| 211 | BuildVkBufferCreateInfo( |
| 212 | stagingCreateInfo, |
| 213 | dataSize, |
| 214 | (VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT) |
| 215 | ); |
| 216 | |
| 217 | auto stagingBuffer = CreateStagingBuffer(stagingCreateInfo, data, dataSize); |
| 218 | |
| 219 | /* Copy staging buffer into hardware buffer */ |
| 220 | device_.CopyBuffer(stagingBuffer.GetVkBuffer(), bufferVK.GetVkBuffer(), dataSize, 0, dstOffset); |
| 221 | |
| 222 | /* Release device memory region of staging buffer */ |
| 223 | stagingBuffer.ReleaseMemoryRegion(*deviceMemoryMngr_); |
| 224 | } |
| 225 | } |
| 226 | |
| 227 | void* VKRenderSystem::MapBuffer(Buffer& buffer, const CPUAccess access) |
| 228 | { |
no test coverage detected