Fix mipmaps return values
Change-Id: I6e7cdc69edc80010a0c6f5f337e6b530278a6606
This commit is contained in:
parent
23a7ec5ef9
commit
93c1a7b51b
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue