Do not program surfaceArray for images with image_array_size == 1

Change-Id: I1e0bd7c3ef7b7edea2f19fb4635b18bff513d264
Signed-off-by: Maciej Dziuban <maciej.dziuban@intel.com>
This commit is contained in:
Maciej Dziuban 2019-03-25 11:03:21 +01:00 committed by sys_ocldev
parent 9ecb3193af
commit 11a1b27399
2 changed files with 46 additions and 5 deletions

View File

@ -38,11 +38,7 @@ void ImageHw<GfxFamily>::setImageArg(void *memory, bool setAsMediaBlockImage, ui
imageCount = 1;
}
bool isImageArray = (getImageDesc().image_array_size > 0 &&
(getImageDesc().image_type == CL_MEM_OBJECT_IMAGE2D_ARRAY ||
getImageDesc().image_type == CL_MEM_OBJECT_IMAGE1D_ARRAY))
? true
: false;
bool isImageArray = getImageDesc().image_array_size > 1;
uint32_t renderTargetViewExtent = static_cast<uint32_t>(imageCount);
uint32_t minimumArrayElement = 0;

View File

@ -187,6 +187,51 @@ HWTEST_F(ImageSetArgTest, givenCubeMapIndexWhenSetKernelArgImageIsCalledThenModi
delete src2dImage;
}
struct ImageSetArgSurfaceArrayTest : ImageSetArgTest {
template <typename FamilyType>
void testSurfaceArrayProgramming(cl_mem_object_type image_type, size_t image_array_size, bool expectedSurfaceArray) {
using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE;
RENDER_SURFACE_STATE surfaceState;
cl_image_desc imageDesc = Image2dDefaults::imageDesc;
imageDesc.image_array_size = image_array_size;
imageDesc.image_type = image_type;
std::unique_ptr<Image> image{Image2dHelper<>::create(context, &imageDesc)};
image->setCubeFaceIndex(__GMM_NO_CUBE_MAP);
image->setImageArg(&surfaceState, false, 0);
EXPECT_EQ(expectedSurfaceArray, surfaceState.getSurfaceArray());
}
};
HWTEST_F(ImageSetArgSurfaceArrayTest, givenImage1DArrayAndImageArraySizeIsZeroWhenCallingSetImageArgThenDoNotProgramSurfaceArray) {
testSurfaceArrayProgramming<FamilyType>(CL_MEM_OBJECT_IMAGE1D_ARRAY, 0u, false);
}
HWTEST_F(ImageSetArgSurfaceArrayTest, givenImage2DArrayAndImageArraySizeIsZeroWhenCallingSetImageArgThenDoNotProgramSurfaceArray) {
testSurfaceArrayProgramming<FamilyType>(CL_MEM_OBJECT_IMAGE2D_ARRAY, 0u, false);
}
HWTEST_F(ImageSetArgSurfaceArrayTest, givenImage1DArrayAndImageArraySizeIsOneWhenCallingSetImageArgThenDoNotProgramSurfaceArray) {
testSurfaceArrayProgramming<FamilyType>(CL_MEM_OBJECT_IMAGE1D_ARRAY, 1u, false);
}
HWTEST_F(ImageSetArgSurfaceArrayTest, givenImage2DArrayAndImageArraySizeIsOneWhenCallingSetImageArgThenDoNotProgramSurfaceArray) {
testSurfaceArrayProgramming<FamilyType>(CL_MEM_OBJECT_IMAGE2D_ARRAY, 1u, false);
}
HWTEST_F(ImageSetArgSurfaceArrayTest, givenImage1DArrayAndImageArraySizeIsGreaterThanOneWhenCallingSetImageArgThenProgramSurfaceArray) {
testSurfaceArrayProgramming<FamilyType>(CL_MEM_OBJECT_IMAGE1D_ARRAY, 2u, true);
}
HWTEST_F(ImageSetArgSurfaceArrayTest, givenImage2DArrayAndImageArraySizeIsGreaterThanOneWhenCallingSetImageArgThenProgramSurfaceArray) {
testSurfaceArrayProgramming<FamilyType>(CL_MEM_OBJECT_IMAGE2D_ARRAY, 2u, true);
}
HWTEST_F(ImageSetArgSurfaceArrayTest, givenNonArrayImageWhenCallingSetImageArgThenDoNotProgramSurfaceArray) {
testSurfaceArrayProgramming<FamilyType>(CL_MEM_OBJECT_IMAGE1D_BUFFER, 2u, false);
}
HWTEST_F(ImageSetArgTest, givenNonCubeMapIndexWhenSetKernelArgImageIsCalledThenDontModifySurfaceState) {
typedef typename FamilyType::RENDER_SURFACE_STATE RENDER_SURFACE_STATE;