Add support for copy images by blitter OCL

Signed-off-by: Kamil Kopryk <kamil.kopryk@intel.com>
Related-To: NEO-4692
This commit is contained in:
Kamil Kopryk
2021-07-26 00:49:41 +00:00
committed by Compute-Runtime-Automation
parent 6f25994c5e
commit af4b1afdbd
9 changed files with 137 additions and 48 deletions

View File

@ -962,29 +962,25 @@ HWTEST_F(BcsTests, givenBltSizeWithLeftoverWhenDispatchedThenProgramAllRequiredC
}
HWTEST_F(BcsTests, givenCommandTypeWhenObtainBlitDirectionIsCalledThenReturnCorrectBlitDirection) {
std::array<std::pair<uint32_t, BlitterConstants::BlitDirection>, 9> testParams{
std::make_pair(CL_COMMAND_WRITE_BUFFER, BlitterConstants::BlitDirection::HostPtrToBuffer),
std::make_pair(CL_COMMAND_WRITE_BUFFER_RECT, BlitterConstants::BlitDirection::HostPtrToBuffer),
std::make_pair(CL_COMMAND_READ_BUFFER, BlitterConstants::BlitDirection::BufferToHostPtr),
std::make_pair(CL_COMMAND_READ_BUFFER_RECT, BlitterConstants::BlitDirection::BufferToHostPtr),
std::make_pair(CL_COMMAND_COPY_BUFFER_RECT, BlitterConstants::BlitDirection::BufferToBuffer),
std::make_pair(CL_COMMAND_SVM_MEMCPY, BlitterConstants::BlitDirection::BufferToBuffer),
std::make_pair(CL_COMMAND_WRITE_IMAGE, BlitterConstants::BlitDirection::HostPtrToImage),
std::make_pair(CL_COMMAND_READ_IMAGE, BlitterConstants::BlitDirection::ImageToHostPtr),
std::make_pair(CL_COMMAND_COPY_BUFFER, BlitterConstants::BlitDirection::BufferToBuffer)};
for (const auto &params : testParams) {
uint32_t commandType;
BlitterConstants::BlitDirection expectedBlitDirection;
std::tie(commandType, expectedBlitDirection) = params;
std::array<std::pair<uint32_t, BlitterConstants::BlitDirection>, 10> testParams = {{{CL_COMMAND_WRITE_BUFFER, BlitterConstants::BlitDirection::HostPtrToBuffer},
{CL_COMMAND_WRITE_BUFFER_RECT, BlitterConstants::BlitDirection::HostPtrToBuffer},
{CL_COMMAND_READ_BUFFER, BlitterConstants::BlitDirection::BufferToHostPtr},
{CL_COMMAND_READ_BUFFER_RECT, BlitterConstants::BlitDirection::BufferToHostPtr},
{CL_COMMAND_COPY_BUFFER_RECT, BlitterConstants::BlitDirection::BufferToBuffer},
{CL_COMMAND_SVM_MEMCPY, BlitterConstants::BlitDirection::BufferToBuffer},
{CL_COMMAND_WRITE_IMAGE, BlitterConstants::BlitDirection::HostPtrToImage},
{CL_COMMAND_READ_IMAGE, BlitterConstants::BlitDirection::ImageToHostPtr},
{CL_COMMAND_COPY_BUFFER, BlitterConstants::BlitDirection::BufferToBuffer},
{CL_COMMAND_COPY_IMAGE, BlitterConstants::BlitDirection::ImageToImage}}};
for (const auto &[commandType, expectedBlitDirection] : testParams) {
auto blitDirection = ClBlitProperties::obtainBlitDirection(commandType);
EXPECT_EQ(expectedBlitDirection, blitDirection);
}
}
HWTEST_F(BcsTests, givenWrongCommandTypeWhenObtainBlitDirectionIsCalledThenExpectThrow) {
uint32_t wrongCommandType = CL_COMMAND_COPY_IMAGE;
uint32_t wrongCommandType = CL_COMMAND_NDRANGE_KERNEL;
EXPECT_THROW(ClBlitProperties::obtainBlitDirection(wrongCommandType), std::exception);
}

View File

@ -1643,6 +1643,37 @@ HWTEST_F(BcsTests, givenImageToHostPtrWhenBlitBufferIsCalledThenBlitCmdIsCorrect
EXPECT_EQ(blitProperties.dstGpuAddress, bltCmd->getDestinationBaseAddress());
}
HWTEST_F(BcsTests, givenImageToImageWhenBlitBufferIsCalledThenBlitCmdIsCorrectlyProgrammed) {
if (!pDevice->getHardwareInfo().capabilityTable.supportsImages) {
GTEST_SKIP();
}
cl_image_desc imgDesc = Image2dDefaults::imageDesc;
imgDesc.image_width = 10u;
imgDesc.image_height = 12u;
std::unique_ptr<Image> srcImage(Image2dHelper<>::create(context.get(), &imgDesc));
std::unique_ptr<Image> dstImage(Image2dHelper<>::create(context.get(), &imgDesc));
BuiltinOpParams builtinOpParams{};
builtinOpParams.srcMemObj = srcImage.get();
builtinOpParams.dstMemObj = dstImage.get();
builtinOpParams.size = {2, 3, 1};
auto &csr = pDevice->getUltCommandStreamReceiver<FamilyType>();
auto blitProperties = ClBlitProperties::constructProperties(BlitterConstants::BlitDirection::ImageToImage,
csr,
builtinOpParams);
blitBuffer(&csr, blitProperties, true, *pDevice);
HardwareParse hwParser;
hwParser.parseCommands<FamilyType>(csr.commandStream, 0);
auto cmdIterator = find<typename FamilyType::XY_COPY_BLT *>(hwParser.cmdList.begin(), hwParser.cmdList.end());
ASSERT_NE(hwParser.cmdList.end(), cmdIterator);
auto bltCmd = genCmdCast<typename FamilyType::XY_COPY_BLT *>(*cmdIterator);
EXPECT_EQ(blitProperties.srcGpuAddress, bltCmd->getSourceBaseAddress());
EXPECT_EQ(blitProperties.dstGpuAddress, bltCmd->getDestinationBaseAddress());
}
HWTEST_F(BcsTests, givenBlitBufferCalledWhenClearColorAllocationIseSetThenItIsMadeResident) {
MockGraphicsAllocation graphicsAllocation1;
MockGraphicsAllocation graphicsAllocation2;