MCPcopy Create free account
hub / github.com/OGRECave/ogre-next / copyData

Method copyData

RenderSystems/Vulkan/src/OgreVulkanHardwareBufferCommon.cpp:283–323  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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 &region );
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

Callers

nothing calls this directly

Calls 6

lockImplMethod · 0.95
unlockImplMethod · 0.95
stallMethod · 0.80
getBufferNameMethod · 0.45

Tested by

no test coverage detected