Return error code for unsuported image arg in gen12lp

Signed-off-by: Maciej Plewka <maciej.plewka@intel.com>
This commit is contained in:
Maciej Plewka
2022-10-13 15:55:18 +00:00
committed by Compute-Runtime-Automation
parent 7195aa6f8e
commit bbc31e6aac
24 changed files with 625 additions and 129 deletions

View File

@ -19,6 +19,8 @@ set(IGDRCL_SRCS_tests_fixtures
${CMAKE_CURRENT_SOURCE_DIR}/hello_world_kernel_fixture.h
${CMAKE_CURRENT_SOURCE_DIR}/image_fixture.cpp
${CMAKE_CURRENT_SOURCE_DIR}/image_fixture.h
${CMAKE_CURRENT_SOURCE_DIR}/image_set_arg_fixture.h
${CMAKE_CURRENT_SOURCE_DIR}/image_set_arg_fixture.cpp
${CMAKE_CURRENT_SOURCE_DIR}/kernel_arg_fixture.cpp
${CMAKE_CURRENT_SOURCE_DIR}/kernel_arg_fixture.h
${CMAKE_CURRENT_SOURCE_DIR}/kernel_data_fixture.cpp

View File

@ -0,0 +1,82 @@
/*
* Copyright (C) 2022 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "opencl/test/unit_test/fixtures/image_set_arg_fixture.h"
#include "shared/test/common/test_macros/test.h"
#include "opencl/source/kernel/kernel.h"
#include "opencl/source/mem_obj/image.h"
#include "opencl/test/unit_test/fixtures/image_fixture.h"
#include "opencl/test/unit_test/mocks/mock_kernel.h"
#include "gtest/gtest.h"
namespace NEO {
void ImageSetArgTest::SetUp() {
ClDeviceFixture::setUp();
pKernelInfo = std::make_unique<MockKernelInfo>();
pKernelInfo->kernelDescriptor.kernelAttributes.simdSize = 1;
// define kernel info
pKernelInfo->heapInfo.pSsh = surfaceStateHeap;
pKernelInfo->heapInfo.SurfaceStateHeapSize = sizeof(surfaceStateHeap);
// setup kernel arg offsets
pKernelInfo->addArgImage(0, 0x00);
pKernelInfo->addArgImage(1, 0x40);
program = std::make_unique<MockProgram>(toClDeviceVector(*pClDevice));
retVal = CL_INVALID_VALUE;
pMultiDeviceKernel = MultiDeviceKernel::create<MockKernel>(program.get(), MockKernel::toKernelInfoContainer(*pKernelInfo, rootDeviceIndex), &retVal);
pKernel = static_cast<MockKernel *>(pMultiDeviceKernel->getKernel(rootDeviceIndex));
ASSERT_NE(nullptr, pKernel);
ASSERT_EQ(CL_SUCCESS, retVal);
pKernel->setKernelArgHandler(0, &Kernel::setArgImage);
pKernel->setKernelArgHandler(1, &Kernel::setArgImage);
context = new MockContext(pClDevice);
srcImage = Image3dHelper<>::create(context);
srcAllocation = srcImage->getGraphicsAllocation(pClDevice->getRootDeviceIndex());
ASSERT_NE(nullptr, srcImage);
}
void ImageSetArgTest::TearDown() {
delete srcImage;
delete pMultiDeviceKernel;
delete context;
ClDeviceFixture::tearDown();
};
void ImageMediaBlockSetArgTest::SetUp() {
ClDeviceFixture::setUp();
pKernelInfo = std::make_unique<MockKernelInfo>();
pKernelInfo->kernelDescriptor.kernelAttributes.simdSize = 1;
// define kernel info
pKernelInfo->heapInfo.pSsh = surfaceStateHeap;
pKernelInfo->heapInfo.SurfaceStateHeapSize = sizeof(surfaceStateHeap);
// setup kernel arg offsets
pKernelInfo->addArgImage(0, 0x00, iOpenCL::IMAGE_MEMORY_OBJECT_2D_MEDIA_BLOCK);
pKernelInfo->addArgImage(0, 0x40, iOpenCL::IMAGE_MEMORY_OBJECT_2D_MEDIA_BLOCK);
program = std::make_unique<MockProgram>(toClDeviceVector(*pClDevice));
retVal = CL_INVALID_VALUE;
pMultiDeviceKernel = MultiDeviceKernel::create<MockKernel>(program.get(), MockKernel::toKernelInfoContainer(*pKernelInfo, rootDeviceIndex), &retVal);
pKernel = static_cast<MockKernel *>(pMultiDeviceKernel->getKernel(rootDeviceIndex));
ASSERT_NE(nullptr, pKernel);
ASSERT_EQ(CL_SUCCESS, retVal);
pKernel->setKernelArgHandler(0, &Kernel::setArgImage);
pKernel->setKernelArgHandler(1, &Kernel::setArgImage);
context = new MockContext(pClDevice);
srcImage = Image3dHelper<>::create(context);
srcAllocation = srcImage->getGraphicsAllocation(pClDevice->getRootDeviceIndex());
ASSERT_NE(nullptr, srcImage);
}
} // namespace NEO

View File

@ -0,0 +1,72 @@
/*
* Copyright (C) 2022 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/test/common/test_macros/test.h"
#include "opencl/test/unit_test/fixtures/image_fixture.h"
#include "opencl/test/unit_test/mocks/mock_kernel.h"
#include "gtest/gtest.h"
namespace NEO {
class Kernel;
class Image;
class ImageSetArgTest : public ClDeviceFixture,
public testing::Test {
public:
ImageSetArgTest() = default;
protected:
template <typename FamilyType>
void setupChannels(int imgChannelOrder) {
using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE;
expectedChannelRed = RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_RED;
expectedChannelGreen = RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_GREEN;
expectedChannelBlue = RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_BLUE;
if (imgChannelOrder == CL_A) {
expectedChannelRed = RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ZERO;
expectedChannelGreen = RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ZERO;
expectedChannelBlue = RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ZERO;
} else if (imgChannelOrder == CL_RA ||
imgChannelOrder == CL_R ||
imgChannelOrder == CL_Rx) {
expectedChannelGreen = RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ZERO;
expectedChannelBlue = RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ZERO;
} else if (imgChannelOrder == CL_RG ||
imgChannelOrder == CL_RGx) {
expectedChannelBlue = RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ZERO;
}
}
void SetUp() override;
void TearDown() override;
cl_int retVal = CL_SUCCESS;
MockContext *context;
std::unique_ptr<MockProgram> program;
MockKernel *pKernel = nullptr;
MultiDeviceKernel *pMultiDeviceKernel = nullptr;
std::unique_ptr<MockKernelInfo> pKernelInfo;
char surfaceStateHeap[0x80] = {};
Image *srcImage = nullptr;
GraphicsAllocation *srcAllocation = nullptr;
int expectedChannelRed = 0;
int expectedChannelGreen = 0;
int expectedChannelBlue = 0;
};
class ImageMediaBlockSetArgTest : public ImageSetArgTest {
protected:
void SetUp() override;
};
} // namespace NEO