Skip to content

Commit dac9855

Browse files
committed
Revert "Revert filter fixes"
This reverts commit 21a198e.
1 parent 21a198e commit dac9855

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

include/nbl/asset/filters/CBasicImageFilterCommon.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ class NBL_API CBasicImageFilterCommon
278278
// compute new offset
279279
{
280280
const auto strides = referenceRegion->getByteStrides(blockInfo);
281-
const core::vector3du32_SIMD offsetInOffset = offset-resultOffset;
281+
const core::vector3du32_SIMD offsetInOffset = blockInfo.convertTexelsToBlocks(offset-resultOffset);
282282
newRegion.bufferOffset += referenceRegion->getLocalByteOffset(offsetInOffset,strides);
283283
}
284284

include/nbl/asset/filters/CCopyImageFilter.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ class NBL_API CCopyImageFilter : public CImageFilter<CCopyImageFilter>, public C
6565
const auto blockDims = asset::getBlockDimensions(commonExecuteData.inFormat);
6666
auto copy = [&commonExecuteData,&blockDims](uint32_t readBlockArrayOffset, core::vectorSIMDu32 readBlockPos) -> void
6767
{
68-
const auto localOutPos = readBlockPos + commonExecuteData.offsetDifference;
69-
const auto writeOffset = commonExecuteData.oit->getByteOffset(localOutPos, commonExecuteData.outByteStrides);
70-
memcpy(commonExecuteData.outData + writeOffset, commonExecuteData.inData + readBlockArrayOffset, commonExecuteData.outBlockByteSize);
68+
const auto localOutPos = readBlockPos+commonExecuteData.offsetDifference;
69+
const auto writeOffset = commonExecuteData.oit->getByteOffset(localOutPos,commonExecuteData.outByteStrides);
70+
memcpy(commonExecuteData.outData+writeOffset,commonExecuteData.inData+readBlockArrayOffset,commonExecuteData.outBlockByteSize);
7171
};
7272
CBasicImageFilterCommon::executePerRegion<ExecutionPolicy>(policy,commonExecuteData.inImg,copy,commonExecuteData.inRegions.begin(),commonExecuteData.inRegions.end(),clip);
7373

include/nbl/asset/filters/CMatchedSizeInOutImageFilterCommon.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,12 @@ class NBL_API CMatchedSizeInOutImageFilterCommon : public CBasicImageFilterCommo
202202
CBasicImageFilterCommon::clip_region_functor_t clip(subresource,range,commonExecuteData.inFormat);
203203
// setup convert state
204204
const auto& outRegionOffset = commonExecuteData.oit->imageOffset;
205-
commonExecuteData.offsetDifference = state->outOffsetBaseLayer - (core::vectorSIMDu32(outRegionOffset.x, outRegionOffset.y, outRegionOffset.z, commonExecuteData.oit->imageSubresource.baseArrayLayer) + state->inOffsetBaseLayer);
206-
commonExecuteData.outByteStrides = commonExecuteData.oit->getByteStrides(TexelBlockInfo(commonExecuteData.outFormat));
205+
const auto& inOffset = (core::vectorSIMDu32(outRegionOffset.x, outRegionOffset.y, outRegionOffset.z, commonExecuteData.oit->imageSubresource.baseArrayLayer) + state->inOffsetBaseLayer);
206+
const auto& inOffsetInBlocks = srcImageTexelBlockInfo.convertTexelsToBlocks(inOffset);
207+
// offsetDifference types are uint but I know my two's complement wraparound well enough to make this work
208+
// TODO: this needs to be in block dimensions for copy filter but probably needs to be in texel dimensions for convert filter
209+
commonExecuteData.offsetDifference = dstImageTexelBlockInfo.convertTexelsToBlocks(state->outOffsetBaseLayer) - inOffsetInBlocks;
210+
commonExecuteData.outByteStrides = commonExecuteData.oit->getByteStrides(dstImageTexelBlockInfo);
207211
if (!perOutput(commonExecuteData,clip))
208212
return false;
209213
}

0 commit comments

Comments
 (0)