Fix setImageArg

Related-To: NEO-3033

Change-Id: I9432a1edf9e87bc6e629d421c3aabe4c150cccb5
Signed-off-by: Maciej Dziuban <maciej.dziuban@intel.com>
This commit is contained in:
Maciej Dziuban
2019-04-04 09:58:02 +02:00
committed by sys_ocldev
parent ad62e32f76
commit bb074bd375
3 changed files with 41 additions and 5 deletions

View File

@ -38,9 +38,9 @@ void ImageHw<GfxFamily>::setImageArg(void *memory, bool setAsMediaBlockImage, ui
imageCount = 1;
}
const auto arraySize = getImageDesc().image_array_size;
const bool isNv12 = IsNV12Image(&getImageFormat());
bool isImageArray = (arraySize > 1u || (isNv12 && arraySize == 1u));
bool isImageArray = getImageDesc().image_array_size > 1 &&
(getImageDesc().image_type == CL_MEM_OBJECT_IMAGE2D_ARRAY ||
getImageDesc().image_type == CL_MEM_OBJECT_IMAGE1D_ARRAY);
uint32_t renderTargetViewExtent = static_cast<uint32_t>(imageCount);
uint32_t minimumArrayElement = 0;

View File

@ -18,7 +18,9 @@
#include "test.h"
#include "unit_tests/fixtures/device_fixture.h"
#include "unit_tests/fixtures/image_fixture.h"
#include "unit_tests/mocks/mock_gmm.h"
#include "unit_tests/mocks/mock_gmm_resource_info.h"
#include "unit_tests/mocks/mock_graphics_allocation.h"
#include "unit_tests/mocks/mock_kernel.h"
#include "unit_tests/mocks/mock_program.h"
@ -232,6 +234,40 @@ HWTEST_F(ImageSetArgSurfaceArrayTest, givenNonArrayImageWhenCallingSetImageArgTh
testSurfaceArrayProgramming<FamilyType>(CL_MEM_OBJECT_IMAGE1D_BUFFER, 2u, false);
}
HWTEST_F(ImageSetArgTest, givenImageArraySizeGreaterThanOneButTypeIsNotImageArrayWhenCallingSetImageArgThenDoNotProgramSurfaceArray) {
MockContext context;
McsSurfaceInfo mcsSurfaceInfo = {};
MockGraphicsAllocation *allocation = new MockGraphicsAllocation(0, 0x1000);
ImageInfo imageInfo = {};
SurfaceFormatInfo surfaceFormatInfo{};
surfaceFormatInfo.GMMSurfaceFormat = GMM_FORMAT_B8G8R8A8_UNORM;
imageInfo.surfaceFormat = &surfaceFormatInfo;
cl_image_desc imageDesc = Image2dDefaults::imageDesc;
imageDesc.image_array_size = 3u;
imageDesc.image_type = CL_MEM_OBJECT_IMAGE1D_BUFFER;
imageInfo.imgDesc = &imageDesc;
imageInfo.plane = GMM_NO_PLANE;
auto gmm = MockGmm::queryImgParams(imageInfo);
allocation->setDefaultGmm(gmm.release());
auto image = std::unique_ptr<Image>{Image::createSharedImage(
&context,
nullptr,
mcsSurfaceInfo,
allocation,
nullptr,
CL_MEM_READ_WRITE,
imageInfo,
0, 0, 0)};
image->setCubeFaceIndex(__GMM_NO_CUBE_MAP);
typename FamilyType::RENDER_SURFACE_STATE surfaceState{};
image->setImageArg(&surfaceState, false, 0);
EXPECT_FALSE(surfaceState.getSurfaceArray());
}
HWTEST_F(ImageSetArgTest, givenNonCubeMapIndexWhenSetKernelArgImageIsCalledThenDontModifySurfaceState) {
typedef typename FamilyType::RENDER_SURFACE_STATE RENDER_SURFACE_STATE;

View File

@ -421,7 +421,7 @@ HWTEST_F(Nv12ImageTest, setImageArg) {
delete image;
}
HWTEST_F(Nv12ImageTest, givenNv12ImageArrayAndImageArraySizeIsZeroWhenCallingSetImageArgThenProgramSurfaceArray) {
HWTEST_F(Nv12ImageTest, givenNv12ImageArrayAndImageArraySizeIsZeroWhenCallingSetImageArgThenDoNotProgramSurfaceArray) {
using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE;
RENDER_SURFACE_STATE surfaceState;
@ -435,7 +435,7 @@ HWTEST_F(Nv12ImageTest, givenNv12ImageArrayAndImageArraySizeIsZeroWhenCallingSet
image->setCubeFaceIndex(__GMM_NO_CUBE_MAP);
image->setImageArg(&surfaceState, false, 0);
EXPECT_TRUE(surfaceState.getSurfaceArray());
EXPECT_FALSE(surfaceState.getSurfaceArray());
}
HWTEST_F(Nv12ImageTest, setImageArgUVPlaneImageSetsOffsetedSurfaceBaseAddressAndSetsCorrectTileMode) {