mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Fix setImageArg
Related-To: NEO-3033 Change-Id: I9432a1edf9e87bc6e629d421c3aabe4c150cccb5 Signed-off-by: Maciej Dziuban <maciej.dziuban@intel.com>
This commit is contained in:

committed by
sys_ocldev

parent
ad62e32f76
commit
bb074bd375
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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) {
|
||||
|
Reference in New Issue
Block a user