Skip to content

Commit 436fb5e

Browse files
committed
bufferRowLength and bufferImageHeight needs to be multiple of texelBlockDim
1 parent 9e876dc commit 436fb5e

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

src/nbl/video/utilities/IUtilities.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -506,8 +506,8 @@ bool ImageRegionIterator::advanceAndCopyToStagingBuffer(asset::IImage::SBufferCo
506506
const auto imageOffsetInBlocks = dstImageTexelBlockInfo.convertTexelsToBlocks(core::vector3du32_SIMD(mainRegion.imageOffset.x, mainRegion.imageOffset.y, mainRegion.imageOffset.z));
507507
const auto imageExtentInBlocks = dstImageTexelBlockInfo.convertTexelsToBlocks(core::vector3du32_SIMD(mainRegion.imageExtent.width, mainRegion.imageExtent.height, mainRegion.imageExtent.depth));
508508

509-
const auto copyTexelStrides = getOptimalCopyTexelStrides(mainRegion.imageExtent);
510-
const core::vector4du32_SIMD copyByteStrides = dstImageTexelBlockInfo.convert3DTexelStridesTo1DByteStrides(copyTexelStrides);
509+
const auto copyBlockStrides = dstImageTexelBlockInfo.convertTexelsToBlocks(getOptimalCopyTexelStrides(mainRegion.imageExtent));
510+
const core::vector4du32_SIMD copyByteStrides = dstImageTexelBlockInfo.convert3DBlockStridesTo1DByteStrides(copyBlockStrides);
511511

512512
// region <-> region.imageSubresource.layerCount <-> imageExtentInBlocks.z <-> imageExtentInBlocks.y <-> imageExtentInBlocks.x
513513
auto updateCurrentOffsets = [&]() -> void
@@ -601,8 +601,8 @@ bool ImageRegionIterator::advanceAndCopyToStagingBuffer(asset::IImage::SBufferCo
601601
uint32_t layersToUploadMemorySize = eachLayerNeededMemory * uploadableArrayLayers;
602602

603603
regionToCopyNext.bufferOffset = stagingBufferOffset;
604-
regionToCopyNext.bufferRowLength = copyTexelStrides.x;
605-
regionToCopyNext.bufferImageHeight = copyTexelStrides.y;
604+
regionToCopyNext.bufferRowLength = copyBlockStrides.x * texelBlockDim.x;
605+
regionToCopyNext.bufferImageHeight = copyBlockStrides.y * texelBlockDim.y;
606606
regionToCopyNext.imageSubresource.aspectMask = mainRegion.imageSubresource.aspectMask;
607607
regionToCopyNext.imageSubresource.mipLevel = mainRegion.imageSubresource.mipLevel;
608608
regionToCopyNext.imageSubresource.baseArrayLayer = mainRegion.imageSubresource.baseArrayLayer + currentLayerInRegion;
@@ -640,8 +640,8 @@ bool ImageRegionIterator::advanceAndCopyToStagingBuffer(asset::IImage::SBufferCo
640640
uint32_t slicesToUploadMemorySize = eachSliceNeededMemory * uploadableSlices;
641641

642642
regionToCopyNext.bufferOffset = stagingBufferOffset;
643-
regionToCopyNext.bufferRowLength = copyTexelStrides.x;
644-
regionToCopyNext.bufferImageHeight = copyTexelStrides.y;
643+
regionToCopyNext.bufferRowLength = copyBlockStrides.x * texelBlockDim.x;
644+
regionToCopyNext.bufferImageHeight = copyBlockStrides.y * texelBlockDim.y;
645645
regionToCopyNext.imageSubresource.aspectMask = mainRegion.imageSubresource.aspectMask;
646646
regionToCopyNext.imageSubresource.mipLevel = mainRegion.imageSubresource.mipLevel;
647647
regionToCopyNext.imageSubresource.baseArrayLayer = mainRegion.imageSubresource.baseArrayLayer + currentLayerInRegion;
@@ -679,8 +679,8 @@ bool ImageRegionIterator::advanceAndCopyToStagingBuffer(asset::IImage::SBufferCo
679679
uint32_t rowsToUploadMemorySize = eachRowNeededMemory * uploadableRows;
680680

681681
regionToCopyNext.bufferOffset = stagingBufferOffset;
682-
regionToCopyNext.bufferRowLength = copyTexelStrides.x;
683-
regionToCopyNext.bufferImageHeight = copyTexelStrides.y;
682+
regionToCopyNext.bufferRowLength = copyBlockStrides.x * texelBlockDim.x;
683+
regionToCopyNext.bufferImageHeight = copyBlockStrides.y * texelBlockDim.y;
684684
regionToCopyNext.imageSubresource.aspectMask = mainRegion.imageSubresource.aspectMask;
685685
regionToCopyNext.imageSubresource.mipLevel = mainRegion.imageSubresource.mipLevel;
686686
regionToCopyNext.imageSubresource.baseArrayLayer = mainRegion.imageSubresource.baseArrayLayer + currentLayerInRegion;
@@ -719,8 +719,8 @@ bool ImageRegionIterator::advanceAndCopyToStagingBuffer(asset::IImage::SBufferCo
719719
uint32_t blocksToUploadMemorySize = eachBlockNeededMemory * uploadableBlocks;
720720

721721
regionToCopyNext.bufferOffset = stagingBufferOffset;
722-
regionToCopyNext.bufferRowLength = copyTexelStrides.x;
723-
regionToCopyNext.bufferImageHeight = copyTexelStrides.y;
722+
regionToCopyNext.bufferRowLength = copyBlockStrides.x * texelBlockDim.x;
723+
regionToCopyNext.bufferImageHeight = copyBlockStrides.y * texelBlockDim.y;
724724
regionToCopyNext.imageSubresource.aspectMask = mainRegion.imageSubresource.aspectMask;
725725
regionToCopyNext.imageSubresource.mipLevel = mainRegion.imageSubresource.mipLevel;
726726
regionToCopyNext.imageSubresource.baseArrayLayer = mainRegion.imageSubresource.baseArrayLayer + currentLayerInRegion;

0 commit comments

Comments
 (0)