mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Replace imageRowPitch with imageSlicePitch
Related-To: NEO-2665 Replace imageRowPitch with imageSlicePitch for read/write CL_MEM_OBJECT_IMAGE1D_ARRAY Change-Id: I0d5931629571f538f242e112c502e2f798ffd896 Signed-off-by: Koska, Andrzej <andrzej.koska@intel.com>
This commit is contained in:

committed by
sys_ocldev

parent
b04fc1121e
commit
9be74b5f3e
@ -98,7 +98,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueReadImage(
|
||||
dc.dstOffset.x = dstPtrOffset;
|
||||
dc.srcOffset = origin;
|
||||
dc.size = region;
|
||||
dc.srcRowPitch = inputRowPitch;
|
||||
dc.srcRowPitch = (srcImage->getImageDesc().image_type == CL_MEM_OBJECT_IMAGE1D_ARRAY) ? inputSlicePitch : inputRowPitch;
|
||||
dc.srcSlicePitch = inputSlicePitch;
|
||||
if (srcImage->getImageDesc().num_mip_levels > 0) {
|
||||
dc.srcMipLevel = findMipLevel(srcImage->getImageDesc().image_type, origin);
|
||||
|
@ -89,7 +89,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueWriteImage(
|
||||
dc.dstMemObj = dstImage;
|
||||
dc.dstOffset = origin;
|
||||
dc.size = region;
|
||||
dc.dstRowPitch = inputRowPitch;
|
||||
dc.dstRowPitch = ((dstImage->getImageDesc().image_type == CL_MEM_OBJECT_IMAGE1D_ARRAY) && (inputSlicePitch > inputRowPitch)) ? inputSlicePitch : inputRowPitch;
|
||||
dc.dstSlicePitch = inputSlicePitch;
|
||||
if (dstImage->getImageDesc().num_mip_levels > 0) {
|
||||
dc.dstMipLevel = findMipLevel(dstImage->getImageDesc().image_type, origin);
|
||||
|
@ -238,6 +238,46 @@ HWTEST_F(EnqueueReadImageTest, GivenImage1DarrayWhenReadImageIsCalledThenHostPtr
|
||||
delete srcImage;
|
||||
}
|
||||
|
||||
HWTEST_F(EnqueueReadImageTest, GivenImage1DarrayWhenReadImageIsCalledThenRowPitchIsSetToSlicePitch) {
|
||||
auto &builtIns = *pCmdQ->getDevice().getExecutionEnvironment()->getBuiltIns();
|
||||
EBuiltInOps copyBuiltIn = EBuiltInOps::CopyImage3dToBuffer;
|
||||
auto &origBuilder = builtIns.getBuiltinDispatchInfoBuilder(
|
||||
copyBuiltIn,
|
||||
pCmdQ->getContext(),
|
||||
pCmdQ->getDevice());
|
||||
|
||||
// substitute original builder with mock builder
|
||||
auto oldBuilder = builtIns.setBuiltinDispatchInfoBuilder(
|
||||
copyBuiltIn,
|
||||
pCmdQ->getContext(),
|
||||
pCmdQ->getDevice(),
|
||||
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuiltinDispatchInfoBuilder(builtIns, &origBuilder)));
|
||||
|
||||
auto srcImage = Image1dArrayHelper<>::create(context);
|
||||
auto imageDesc = srcImage->getImageDesc();
|
||||
size_t origin[] = {0, 0, 0};
|
||||
size_t region[] = {imageDesc.image_width, imageDesc.image_array_size, 1};
|
||||
size_t rowPitch = 64;
|
||||
size_t slicePitch = 128;
|
||||
|
||||
EnqueueReadImageHelper<>::enqueueReadImage(pCmdQ, srcImage, CL_TRUE, origin, region, rowPitch, slicePitch);
|
||||
|
||||
auto &mockBuilder = static_cast<MockBuiltinDispatchInfoBuilder &>(builtIns.getBuiltinDispatchInfoBuilder(copyBuiltIn,
|
||||
pCmdQ->getContext(),
|
||||
pCmdQ->getDevice()));
|
||||
auto params = mockBuilder.getBuiltinOpParams();
|
||||
EXPECT_EQ(params->srcRowPitch, slicePitch);
|
||||
|
||||
// restore original builder and retrieve mock builder
|
||||
auto newBuilder = builtIns.setBuiltinDispatchInfoBuilder(
|
||||
copyBuiltIn,
|
||||
pCmdQ->getContext(),
|
||||
pCmdQ->getDevice(),
|
||||
std::move(oldBuilder));
|
||||
EXPECT_NE(nullptr, newBuilder);
|
||||
delete srcImage;
|
||||
}
|
||||
|
||||
HWTEST_F(EnqueueReadImageTest, GivenImage2DarrayWhenReadImageIsCalledThenHostPtrSizeIsCalculatedProperly) {
|
||||
auto srcImage = Image2dArrayHelper<>::create(context);
|
||||
auto imageDesc = srcImage->getImageDesc();
|
||||
|
@ -216,6 +216,48 @@ HWTEST_F(EnqueueWriteImageTest, GivenImage1DarrayWhenReadWriteImageIsCalledThenH
|
||||
delete dstImage2;
|
||||
}
|
||||
|
||||
HWTEST_F(EnqueueWriteImageTest, GivenImage1DarrayWhenWriteImageIsCalledThenRowPitchIsSetToSlicePitch) {
|
||||
auto &builtIns = *pCmdQ->getDevice().getExecutionEnvironment()->getBuiltIns();
|
||||
EBuiltInOps copyBuiltIn = EBuiltInOps::CopyBufferToImage3d;
|
||||
auto &origBuilder = builtIns.getBuiltinDispatchInfoBuilder(
|
||||
copyBuiltIn,
|
||||
pCmdQ->getContext(),
|
||||
pCmdQ->getDevice());
|
||||
|
||||
// substitute original builder with mock builder
|
||||
auto oldBuilder = builtIns.setBuiltinDispatchInfoBuilder(
|
||||
copyBuiltIn,
|
||||
pCmdQ->getContext(),
|
||||
pCmdQ->getDevice(),
|
||||
std::unique_ptr<NEO::BuiltinDispatchInfoBuilder>(new MockBuiltinDispatchInfoBuilder(builtIns, &origBuilder)));
|
||||
|
||||
std::unique_ptr<Image> image;
|
||||
auto destImage = Image1dArrayHelper<>::create(context);
|
||||
auto imageDesc = destImage->getImageDesc();
|
||||
size_t origin[] = {0, 0, 0};
|
||||
size_t region[] = {imageDesc.image_width, imageDesc.image_array_size, 1};
|
||||
size_t rowPitch = 64;
|
||||
size_t slicePitch = 128;
|
||||
|
||||
EnqueueWriteImageHelper<>::enqueueWriteImage(pCmdQ, destImage, CL_FALSE, origin, region, rowPitch, slicePitch);
|
||||
|
||||
auto &mockBuilder = static_cast<MockBuiltinDispatchInfoBuilder &>(builtIns.getBuiltinDispatchInfoBuilder(copyBuiltIn,
|
||||
pCmdQ->getContext(),
|
||||
pCmdQ->getDevice()));
|
||||
auto params = mockBuilder.getBuiltinOpParams();
|
||||
EXPECT_EQ(params->dstRowPitch, slicePitch);
|
||||
|
||||
// restore original builder and retrieve mock builder
|
||||
auto newBuilder = builtIns.setBuiltinDispatchInfoBuilder(
|
||||
copyBuiltIn,
|
||||
pCmdQ->getContext(),
|
||||
pCmdQ->getDevice(),
|
||||
std::move(oldBuilder));
|
||||
EXPECT_NE(nullptr, newBuilder);
|
||||
|
||||
delete destImage;
|
||||
}
|
||||
|
||||
HWTEST_F(EnqueueWriteImageTest, GivenImage2DarrayWhenReadWriteImageIsCalledThenHostPtrSizeIsCalculatedProperly) {
|
||||
auto dstImage2 = Image2dArrayHelper<>::create(context);
|
||||
auto imageDesc = dstImage2->getImageDesc();
|
||||
|
Reference in New Issue
Block a user