Improve returned row pitch calculation for multisampled images
Change-Id: I2fbf413ba83941682fa2bd0353060cab3f534d1a
This commit is contained in:
parent
9dc50d980a
commit
88edc7279d
|
@ -706,7 +706,12 @@ cl_int Image::getImageInfo(cl_image_info paramName,
|
||||||
|
|
||||||
case CL_IMAGE_ROW_PITCH:
|
case CL_IMAGE_ROW_PITCH:
|
||||||
srcParamSize = sizeof(size_t);
|
srcParamSize = sizeof(size_t);
|
||||||
srcParam = &hostPtrRowPitch;
|
if (mcsSurfaceInfo.multisampleCount > 1) {
|
||||||
|
retParam = imageDesc.image_width * surfFmtInfo.ImageElementSizeInBytes * imageDesc.num_samples;
|
||||||
|
} else {
|
||||||
|
retParam = hostPtrRowPitch;
|
||||||
|
}
|
||||||
|
srcParam = &retParam;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CL_IMAGE_SLICE_PITCH:
|
case CL_IMAGE_SLICE_PITCH:
|
||||||
|
|
|
@ -370,4 +370,32 @@ TEST_F(clGetImageInfoTests, imgNumSamples) {
|
||||||
ASSERT_EQ(CL_SUCCESS, retVal);
|
ASSERT_EQ(CL_SUCCESS, retVal);
|
||||||
ASSERT_EQ(this->imageDesc.num_samples, numSamplesRet);
|
ASSERT_EQ(this->imageDesc.num_samples, numSamplesRet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(clGetImageInfoTests, givenMultisampleCountForMcsWhenAskingForRowPitchThenReturnNewValueIfGreaterThanOne) {
|
||||||
|
McsSurfaceInfo mcsInfo = {1, 1, 0};
|
||||||
|
imageDesc.num_samples = 16;
|
||||||
|
size_t receivedRowPitch = 0;
|
||||||
|
|
||||||
|
clReleaseMemObject(image);
|
||||||
|
image = clCreateImage(pContext, CL_MEM_READ_WRITE, &imageFormat, &imageDesc, nullptr, &retVal);
|
||||||
|
|
||||||
|
auto imageObj = castToObject<Image>(image);
|
||||||
|
auto formatInfo = imageObj->getSurfaceFormatInfo();
|
||||||
|
|
||||||
|
size_t multisampleRowPitch = imageDesc.image_width * formatInfo.ImageElementSizeInBytes * imageDesc.num_samples;
|
||||||
|
EXPECT_NE(multisampleRowPitch, imageObj->getHostPtrRowPitch());
|
||||||
|
|
||||||
|
for (uint32_t multisampleCount = 0; multisampleCount <= 4; multisampleCount++) {
|
||||||
|
mcsInfo.multisampleCount = multisampleCount;
|
||||||
|
imageObj->setMcsSurfaceInfo(mcsInfo);
|
||||||
|
|
||||||
|
clGetImageInfo(image, CL_IMAGE_ROW_PITCH, sizeof(size_t), &receivedRowPitch, nullptr);
|
||||||
|
|
||||||
|
if (multisampleCount > 1) {
|
||||||
|
EXPECT_EQ(multisampleRowPitch, receivedRowPitch);
|
||||||
|
} else {
|
||||||
|
EXPECT_EQ(imageObj->getHostPtrRowPitch(), receivedRowPitch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} // namespace ULT
|
} // namespace ULT
|
||||||
|
|
Loading…
Reference in New Issue