Fix mipmaps return values

Change-Id: I6e7cdc69edc80010a0c6f5f337e6b530278a6606
This commit is contained in:
Woloszyn, Wojciech 2018-08-12 02:20:53 -07:00 committed by sys_ocldev
parent 23a7ec5ef9
commit 93c1a7b51b
4 changed files with 29 additions and 25 deletions

View File

@ -2334,8 +2334,8 @@ cl_int CL_API_CALL clEnqueueReadImage(cl_command_queue commandQueue,
if (retVal != CL_SUCCESS)
return retVal;
}
if (!Image::validateRegionAndOrigin(origin, region, pImage->getImageDesc())) {
retVal = CL_INVALID_VALUE;
retVal = Image::validateRegionAndOrigin(origin, region, pImage->getImageDesc());
if (retVal != CL_SUCCESS) {
return retVal;
}
@ -2394,8 +2394,8 @@ cl_int CL_API_CALL clEnqueueWriteImage(cl_command_queue commandQueue,
if (retVal != CL_SUCCESS)
return retVal;
}
if (!Image::validateRegionAndOrigin(origin, region, pImage->getImageDesc())) {
retVal = CL_INVALID_VALUE;
retVal = Image::validateRegionAndOrigin(origin, region, pImage->getImageDesc());
if (retVal != CL_SUCCESS) {
return retVal;
}
@ -2443,8 +2443,8 @@ cl_int CL_API_CALL clEnqueueFillImage(cl_command_queue commandQueue,
"event", DebugManager.getEvents(reinterpret_cast<const uintptr_t *>(event), 1));
if (CL_SUCCESS == retVal) {
if (!Image::validateRegionAndOrigin(origin, region, dstImage->getImageDesc())) {
retVal = CL_INVALID_VALUE;
retVal = Image::validateRegionAndOrigin(origin, region, dstImage->getImageDesc());
if (retVal != CL_SUCCESS) {
return retVal;
}
@ -2509,12 +2509,12 @@ cl_int CL_API_CALL clEnqueueCopyImage(cl_command_queue commandQueue,
return retVal;
}
}
if (!Image::validateRegionAndOrigin(srcOrigin, region, pSrcImage->getImageDesc())) {
retVal = CL_INVALID_VALUE;
retVal = Image::validateRegionAndOrigin(srcOrigin, region, pSrcImage->getImageDesc());
if (retVal != CL_SUCCESS) {
return retVal;
}
if (!Image::validateRegionAndOrigin(dstOrigin, region, pDstImage->getImageDesc())) {
retVal = CL_INVALID_VALUE;
retVal = Image::validateRegionAndOrigin(dstOrigin, region, pDstImage->getImageDesc());
if (retVal != CL_SUCCESS) {
return retVal;
}
@ -2567,8 +2567,8 @@ cl_int CL_API_CALL clEnqueueCopyImageToBuffer(cl_command_queue commandQueue,
if (retVal != CL_SUCCESS)
return retVal;
}
if (!Image::validateRegionAndOrigin(srcOrigin, region, pSrcImage->getImageDesc())) {
retVal = CL_INVALID_VALUE;
retVal = Image::validateRegionAndOrigin(srcOrigin, region, pSrcImage->getImageDesc());
if (retVal != CL_SUCCESS) {
return retVal;
}
@ -2621,8 +2621,8 @@ cl_int CL_API_CALL clEnqueueCopyBufferToImage(cl_command_queue commandQueue,
if (retVal != CL_SUCCESS)
return retVal;
}
if (!Image::validateRegionAndOrigin(dstOrigin, region, pDstImage->getImageDesc())) {
retVal = CL_INVALID_VALUE;
retVal = Image::validateRegionAndOrigin(dstOrigin, region, pDstImage->getImageDesc());
if (retVal != CL_SUCCESS) {
return retVal;
}
@ -2750,8 +2750,8 @@ void *CL_API_CALL clEnqueueMapImage(cl_command_queue commandQueue,
}
}
if (!Image::validateRegionAndOrigin(origin, region, pImage->getImageDesc())) {
retVal = CL_INVALID_VALUE;
retVal = Image::validateRegionAndOrigin(origin, region, pImage->getImageDesc());
if (retVal != CL_SUCCESS) {
break;
}

View File

@ -1236,29 +1236,33 @@ size_t Image::calculateOffsetForMapping(const MemObjOffsetArray &origin) const {
return offset;
}
bool Image::validateRegionAndOrigin(const size_t *origin, const size_t *region, const cl_image_desc &imgDesc) {
cl_int Image::validateRegionAndOrigin(const size_t *origin, const size_t *region, const cl_image_desc &imgDesc) {
if (region[0] == 0 || region[1] == 0 || region[2] == 0) {
return false;
return CL_INVALID_VALUE;
}
bool notMippMapped = (false == isMipMapped(imgDesc));
if ((imgDesc.image_type == CL_MEM_OBJECT_IMAGE1D || imgDesc.image_type == CL_MEM_OBJECT_IMAGE1D_BUFFER) &&
(((origin[1] > 0) && notMippMapped) || origin[2] > 0 || region[1] > 1 || region[2] > 1)) {
return false;
return CL_INVALID_VALUE;
}
if ((imgDesc.image_type == CL_MEM_OBJECT_IMAGE2D || imgDesc.image_type == CL_MEM_OBJECT_IMAGE1D_ARRAY) &&
(((origin[2] > 0) && notMippMapped) || region[2] > 1)) {
return false;
return CL_INVALID_VALUE;
}
if (notMippMapped) {
return true;
return CL_SUCCESS;
}
uint32_t mipLevel = findMipLevel(imgDesc.image_type, origin);
return mipLevel < imgDesc.num_mip_levels;
if (mipLevel < imgDesc.num_mip_levels) {
return CL_SUCCESS;
} else {
return CL_INVALID_MIP_LEVEL;
}
}
bool Image::hasSameDescriptor(const cl_image_desc &imageDesc) const {

View File

@ -175,7 +175,7 @@ class Image : public MemObj {
void setMipCount(uint32_t mipCountNew) { this->mipCount = mipCountNew; }
static const SurfaceFormatInfo *getSurfaceFormatFromTable(cl_mem_flags flags, const cl_image_format *imageFormat);
static bool validateRegionAndOrigin(const size_t *origin, const size_t *region, const cl_image_desc &imgDesc);
static cl_int validateRegionAndOrigin(const size_t *origin, const size_t *region, const cl_image_desc &imgDesc);
cl_int writeNV12Planes(const void *hostPtr, size_t hostPtrRowPitch);
void setMcsSurfaceInfo(McsSurfaceInfo &info) { mcsSurfaceInfo = info; }

View File

@ -1123,9 +1123,9 @@ TEST_P(MipLevelCoordinateTest, givenMipmappedImageWhenValidateRegionAndOriginIsC
desc.image_type = GetParam();
desc.num_mip_levels = 2;
origin[getMipLevelOriginIdx(desc.image_type)] = 1;
EXPECT_TRUE(Image::validateRegionAndOrigin(origin, region, desc));
EXPECT_EQ(CL_SUCCESS, Image::validateRegionAndOrigin(origin, region, desc));
origin[getMipLevelOriginIdx(desc.image_type)] = 2;
EXPECT_FALSE(Image::validateRegionAndOrigin(origin, region, desc));
EXPECT_EQ(CL_INVALID_MIP_LEVEL, Image::validateRegionAndOrigin(origin, region, desc));
}
INSTANTIATE_TEST_CASE_P(MipLevelCoordinate,