fix: setup printf surface when implicit args are programmed

even if main kernel is not using printf

Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2025-05-29 11:49:56 +00:00
committed by Compute-Runtime-Automation
parent 48206fe848
commit ca3079f263
5 changed files with 58 additions and 4 deletions

View File

@@ -114,6 +114,55 @@ TEST_F(PrintfHandlerTests, givenKernelWithImplicitArgsWhenPreparingPrintfHandler
EXPECT_EQ(printfSurface->getGpuAddress(), pImplicitArgs->v0.printfBufferPtr);
}
TEST_F(PrintfHandlerTests, givenUserKernelWithoutPrintfButWithImplicitArgsWhenPreparingPrintfHandlerThenProperAddressIsPatchedInImplicitArgsStruct) {
auto device = std::make_unique<MockClDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(nullptr));
MockContext context(device.get());
auto pKernelInfo = std::make_unique<MockKernelInfo>();
pKernelInfo->kernelDescriptor.kernelAttributes.simdSize = device->getGfxCoreHelper().getMinimalSIMDSize();
pKernelInfo->kernelDescriptor.kernelAttributes.flags.requiresImplicitArgs = true;
MockProgram program{&context, false, toClDeviceVector(*device)};
uint64_t crossThread[10];
MockKernel kernel{&program, *pKernelInfo, *device};
kernel.setCrossThreadData(&crossThread, sizeof(uint64_t) * 10);
kernel.initialize();
MockMultiDispatchInfo multiDispatchInfo(device.get(), &kernel);
auto printfHandler = std::unique_ptr<PrintfHandler>(PrintfHandler::create(multiDispatchInfo, device->getDevice()));
ASSERT_NE(nullptr, printfHandler);
printfHandler->prepareDispatch(multiDispatchInfo);
auto printfSurface = printfHandler->getSurface();
ASSERT_NE(nullptr, printfSurface);
auto pImplicitArgs = kernel.getImplicitArgs();
ASSERT_NE(nullptr, pImplicitArgs);
EXPECT_EQ(printfSurface->getGpuAddress(), pImplicitArgs->v0.printfBufferPtr);
}
TEST_F(PrintfHandlerTests, givenBuiltinKernelWithoutPrintfButWithImplicitArgsWhenPreparingPrintfHandlerThenPrintfHandlerIsNotCreated) {
auto device = std::make_unique<MockClDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(nullptr));
MockContext context(device.get());
auto pKernelInfo = std::make_unique<MockKernelInfo>();
pKernelInfo->kernelDescriptor.kernelAttributes.simdSize = device->getGfxCoreHelper().getMinimalSIMDSize();
pKernelInfo->kernelDescriptor.kernelAttributes.flags.requiresImplicitArgs = true;
MockProgram program{&context, false, toClDeviceVector(*device)};
uint64_t crossThread[10];
MockKernel kernel{&program, *pKernelInfo, *device};
kernel.setCrossThreadData(&crossThread, sizeof(uint64_t) * 10);
kernel.initialize();
kernel.isBuiltIn = true;
MockMultiDispatchInfo multiDispatchInfo(device.get(), &kernel);
auto printfHandler = std::unique_ptr<PrintfHandler>(PrintfHandler::create(multiDispatchInfo, device->getDevice()));
EXPECT_EQ(nullptr, printfHandler);
}
HWTEST_F(PrintfHandlerTests, givenEnabledStatelessCompressionWhenPrintEnqueueOutputIsCalledThenBCSEngineIsUsedToDecompressPrintfOutput) {
HardwareInfo hwInfo = *defaultHwInfo;