mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-23 03:01:20 +08:00
clEnqueueMapImage origin and region usage fixes
- Return error on origin > 0 or region > 1 when its not allowed - For 1Darray, array region and origin are stored on 2nd position. For 2Darray, its on 3rd postion - Fix map offset for 1Darray image - Fix CPU data transfer for 1Darray image Change-Id: Id35ba5f54f117e7af318ca7e6e03c1fc942ce729
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
#include "runtime/command_queue/command_queue.h"
|
||||
#include "runtime/context/context.h"
|
||||
#include "runtime/helpers/surface_formats.h"
|
||||
#include "unit_tests/fixtures/image_fixture.h"
|
||||
|
||||
using namespace OCLRT;
|
||||
|
||||
@@ -124,6 +125,82 @@ TEST_F(clEnqueueMapImageTests, givenAnyZeroRegionParamWhenMapImageCalledThenRetu
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
}
|
||||
|
||||
TEST_F(clEnqueueMapImageTests, givenSecondOriginCoordinateAndNotAllowedImgTypeWhenMapCalledThenReturnError) {
|
||||
size_t region[3] = {1, 1, 1};
|
||||
size_t origin[3] = {0, 1, 0};
|
||||
|
||||
std::unique_ptr<Image> image(ImageHelper<Image1dDefaults>::create(pContext));
|
||||
clEnqueueMapImage(pCommandQueue, image.get(), CL_TRUE, CL_MAP_READ, origin, region, 0, 0, 0, nullptr, nullptr, &retVal);
|
||||
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
||||
|
||||
auto image1dBufferDesc = Image1dDefaults::imageDesc;
|
||||
image1dBufferDesc.image_type = CL_MEM_OBJECT_IMAGE1D_BUFFER;
|
||||
image.reset(ImageHelper<Image1dDefaults>::create(pContext, &image1dBufferDesc));
|
||||
clEnqueueMapImage(pCommandQueue, image.get(), CL_TRUE, CL_MAP_READ, origin, region, 0, 0, 0, nullptr, nullptr, &retVal);
|
||||
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
||||
}
|
||||
|
||||
TEST_F(clEnqueueMapImageTests, givenThirdOriginCoordinateAndNotAllowedImgTypeWhenMapCalledThenReturnError) {
|
||||
size_t region[3] = {1, 1, 1};
|
||||
size_t origin[3] = {0, 0, 1};
|
||||
|
||||
std::unique_ptr<Image> image(ImageHelper<Image1dDefaults>::create(pContext));
|
||||
clEnqueueMapImage(pCommandQueue, image.get(), CL_TRUE, CL_MAP_READ, origin, region, 0, 0, 0, nullptr, nullptr, &retVal);
|
||||
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
||||
|
||||
image.reset(ImageHelper<Image2dDefaults>::create(pContext));
|
||||
clEnqueueMapImage(pCommandQueue, image.get(), CL_TRUE, CL_MAP_READ, origin, region, 0, 0, 0, nullptr, nullptr, &retVal);
|
||||
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
||||
|
||||
image.reset(ImageHelper<Image1dArrayDefaults>::create(pContext));
|
||||
clEnqueueMapImage(pCommandQueue, image.get(), CL_TRUE, CL_MAP_READ, origin, region, 0, 0, 0, nullptr, nullptr, &retVal);
|
||||
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
||||
|
||||
auto image1dBufferDesc = Image1dDefaults::imageDesc;
|
||||
image1dBufferDesc.image_type = CL_MEM_OBJECT_IMAGE1D_BUFFER;
|
||||
image.reset(ImageHelper<Image1dDefaults>::create(pContext, &image1dBufferDesc));
|
||||
clEnqueueMapImage(pCommandQueue, image.get(), CL_TRUE, CL_MAP_READ, origin, region, 0, 0, 0, nullptr, nullptr, &retVal);
|
||||
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
||||
}
|
||||
|
||||
TEST_F(clEnqueueMapImageTests, givenSecondRegionCoordinateAndNotAllowedImgTypeWhenMapCalledThenReturnError) {
|
||||
size_t region[3] = {1, 2, 1};
|
||||
size_t origin[3] = {0, 0, 0};
|
||||
|
||||
std::unique_ptr<Image> image(ImageHelper<Image1dDefaults>::create(pContext));
|
||||
clEnqueueMapImage(pCommandQueue, image.get(), CL_TRUE, CL_MAP_READ, origin, region, 0, 0, 0, nullptr, nullptr, &retVal);
|
||||
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
||||
|
||||
auto image1dBufferDesc = Image1dDefaults::imageDesc;
|
||||
image1dBufferDesc.image_type = CL_MEM_OBJECT_IMAGE1D_BUFFER;
|
||||
image.reset(ImageHelper<Image1dDefaults>::create(pContext, &image1dBufferDesc));
|
||||
clEnqueueMapImage(pCommandQueue, image.get(), CL_TRUE, CL_MAP_READ, origin, region, 0, 0, 0, nullptr, nullptr, &retVal);
|
||||
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
||||
}
|
||||
|
||||
TEST_F(clEnqueueMapImageTests, givenThirdRegionnCoordinateAndNotAllowedImgTypeWhenMapCalledThenReturnError) {
|
||||
size_t region[3] = {1, 1, 2};
|
||||
size_t origin[3] = {0, 0, 0};
|
||||
|
||||
std::unique_ptr<Image> image(ImageHelper<Image1dDefaults>::create(pContext));
|
||||
clEnqueueMapImage(pCommandQueue, image.get(), CL_TRUE, CL_MAP_READ, origin, region, 0, 0, 0, nullptr, nullptr, &retVal);
|
||||
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
||||
|
||||
image.reset(ImageHelper<Image2dDefaults>::create(pContext));
|
||||
clEnqueueMapImage(pCommandQueue, image.get(), CL_TRUE, CL_MAP_READ, origin, region, 0, 0, 0, nullptr, nullptr, &retVal);
|
||||
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
||||
|
||||
image.reset(ImageHelper<Image1dArrayDefaults>::create(pContext));
|
||||
clEnqueueMapImage(pCommandQueue, image.get(), CL_TRUE, CL_MAP_READ, origin, region, 0, 0, 0, nullptr, nullptr, &retVal);
|
||||
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
||||
|
||||
auto image1dBufferDesc = Image1dDefaults::imageDesc;
|
||||
image1dBufferDesc.image_type = CL_MEM_OBJECT_IMAGE1D_BUFFER;
|
||||
image.reset(ImageHelper<Image1dDefaults>::create(pContext, &image1dBufferDesc));
|
||||
clEnqueueMapImage(pCommandQueue, image.get(), CL_TRUE, CL_MAP_READ, origin, region, 0, 0, 0, nullptr, nullptr, &retVal);
|
||||
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
||||
}
|
||||
|
||||
struct clEnqueueMapImageYUVTests : public api_fixture,
|
||||
public ::testing::Test {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user