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:
parent
9ecb3193af
commit
11a1b27399
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue