mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-20 13:11:34 +08:00
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:

committed by
Compute-Runtime-Automation

parent
6f25994c5e
commit
af4b1afdbd
@ -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 ¶ms : 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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user