| 281 | } |
| 282 | |
| 283 | void VulkanHardwareBufferCommon::copyData( VulkanHardwareBufferCommon *srcBuffer, |
| 284 | size_t srcOffset, size_t dstOffset, size_t length, |
| 285 | bool discardWholeBuffer ) |
| 286 | { |
| 287 | if( !this->mDiscardBuffer || mBuffer.mVboFlag == VulkanVaoManager::CPU_INACCESSIBLE ) |
| 288 | { |
| 289 | mDevice->mGraphicsQueue.getCopyEncoderV1Buffer( false ); |
| 290 | |
| 291 | size_t srcOffsetStart = 0; |
| 292 | size_t dstOffsetStart = 0; |
| 293 | VkBuffer srcBuf = srcBuffer->getBufferName( srcOffsetStart ); |
| 294 | VkBuffer dstBuf = this->getBufferNameForGpuWrite( dstOffsetStart ); |
| 295 | |
| 296 | VkBufferCopy region; |
| 297 | region.srcOffset = srcOffset + srcOffsetStart; |
| 298 | region.dstOffset = dstOffset + dstOffsetStart; |
| 299 | region.size = alignToNextMultiple<size_t>( length, 4u ); |
| 300 | vkCmdCopyBuffer( mDevice->mGraphicsQueue.mCurrentCmdBuffer, srcBuf, dstBuf, 1u, |
| 301 | ®ion ); |
| 302 | |
| 303 | if( this->mDiscardBuffer ) |
| 304 | mDevice->stall(); |
| 305 | } |
| 306 | else |
| 307 | { |
| 308 | HardwareBuffer::LockOptions dstOption; |
| 309 | if( discardWholeBuffer ) |
| 310 | dstOption = HardwareBuffer::HBL_DISCARD; |
| 311 | else |
| 312 | dstOption = HardwareBuffer::HBL_WRITE_ONLY; |
| 313 | |
| 314 | const void *srcData = |
| 315 | srcBuffer->lockImpl( srcOffset, length, HardwareBuffer::HBL_READ_ONLY, false ); |
| 316 | void *dstData = this->lockImpl( dstOffset, length, dstOption, false ); |
| 317 | |
| 318 | memcpy( dstData, srcData, length ); |
| 319 | |
| 320 | this->unlockImpl( dstOffset, length ); |
| 321 | srcBuffer->unlockImpl( srcOffset, length ); |
| 322 | } |
| 323 | } |
| 324 | } // namespace v1 |
| 325 | } // namespace Ogre |
nothing calls this directly
no test coverage detected