Improve returned row pitch calculation for multisampled images

Change-Id: I2fbf413ba83941682fa2bd0353060cab3f534d1a
This commit is contained in:
Dunajski, Bartosz 2018-06-13 12:46:54 +02:00
parent 9dc50d980a
commit 88edc7279d
2 changed files with 34 additions and 1 deletions

View File

@ -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:

View File

@ -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