@@ -161,7 +161,7 @@ class NBL_API CMatchedSizeInOutImageFilterCommon : public CBasicImageFilterCommo
161
161
const core::SRange<const IImage::SBufferCopy> outRegions;
162
162
const IImage::SBufferCopy* oit; // !< oit is a current output handled region by commonExecute lambda. Notice that the lambda may execute executePerRegion a few times with different oits data since regions may overlap in a certain mipmap in an image!
163
163
core::vectorSIMDu32 offsetDifference;
164
- core::vectorSIMDu32 outBlockByteStrides ;
164
+ core::vectorSIMDu32 outByteStrides ;
165
165
};
166
166
template <typename PerOutputFunctor>
167
167
static inline bool commonExecute (state_type* state, PerOutputFunctor& perOutput)
@@ -191,8 +191,8 @@ class NBL_API CMatchedSizeInOutImageFilterCommon : public CBasicImageFilterCommo
191
191
outRegions.begin (), {}, {}
192
192
};
193
193
194
- const asset::TexelBlockInfo srcImageTexelBlockInfo (inParams. format );
195
- const asset::TexelBlockInfo dstImageTexelBlockInfo (outParams. format );
194
+ const asset::TexelBlockInfo srcImageTexelBlockInfo (commonExecuteData. inFormat );
195
+ const asset::TexelBlockInfo dstImageTexelBlockInfo (commonExecuteData. outFormat );
196
196
197
197
// iterate over output regions, then input cause read cache miss is faster
198
198
for (; commonExecuteData.oit !=commonExecuteData.outRegions .end (); commonExecuteData.oit ++)
@@ -203,10 +203,11 @@ class NBL_API CMatchedSizeInOutImageFilterCommon : public CBasicImageFilterCommo
203
203
// setup convert state
204
204
const auto & outRegionOffset = commonExecuteData.oit ->imageOffset ;
205
205
const auto & inOffset = (core::vectorSIMDu32 (outRegionOffset.x , outRegionOffset.y , outRegionOffset.z , commonExecuteData.oit ->imageSubresource .baseArrayLayer ) + state->inOffsetBaseLayer );
206
-
206
+ const auto & inOffsetInBlocks = srcImageTexelBlockInfo. convertTexelsToBlocks (inOffset);
207
207
// offsetDifference types are uint but I know my two's complement wraparound well enough to make this work
208
- commonExecuteData.offsetDifference = dstImageTexelBlockInfo.convertTexelsToBlocks (state->outOffsetBaseLayer ) - srcImageTexelBlockInfo.convertTexelsToBlocks (inOffset);
209
- commonExecuteData.outBlockByteStrides = commonExecuteData.oit ->getByteStrides (TexelBlockInfo (commonExecuteData.outFormat ));
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);
210
211
if (!perOutput (commonExecuteData,clip))
211
212
return false ;
212
213
}
0 commit comments