Skip to content

Commit dc9b856

Browse files
Add ults for kernel with printf buffer
Signed-off-by: Mateusz Hoppe <[email protected]>
1 parent 68c0df3 commit dc9b856

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1505,5 +1505,78 @@ TEST_F(KernelPrintHandlerTest, whenPrintPrintfOutputIsCalledThenPrintfBufferIsUs
15051505
EXPECT_EQ(buffer, MyPrintfHandler::getPrintfSurfaceInitialDataSize());
15061506
}
15071507

1508+
using PrintfTest = Test<DeviceFixture>;
1509+
1510+
TEST_F(PrintfTest, givenKernelWithPrintfThenPrintfBufferIsCreated) {
1511+
Mock<Module> mockModule(this->device, nullptr);
1512+
Mock<Kernel> mockKernel;
1513+
mockKernel.descriptor.kernelAttributes.flags.usesPrintf = true;
1514+
mockKernel.module = &mockModule;
1515+
1516+
EXPECT_TRUE(mockKernel.getImmutableData()->getDescriptor().kernelAttributes.flags.usesPrintf);
1517+
1518+
ze_kernel_desc_t kernelDesc = {};
1519+
kernelDesc.pKernelName = "mock";
1520+
mockKernel.createPrintfBuffer();
1521+
EXPECT_NE(nullptr, mockKernel.getPrintfBufferAllocation());
1522+
}
1523+
1524+
TEST_F(PrintfTest, GivenKernelNotUsingPrintfWhenCreatingPrintfBufferThenAllocationIsNotCreated) {
1525+
Mock<Module> mockModule(this->device, nullptr);
1526+
Mock<Kernel> mockKernel;
1527+
mockKernel.descriptor.kernelAttributes.flags.usesPrintf = false;
1528+
mockKernel.module = &mockModule;
1529+
1530+
ze_kernel_desc_t kernelDesc = {};
1531+
kernelDesc.pKernelName = "mock";
1532+
mockKernel.createPrintfBuffer();
1533+
EXPECT_EQ(nullptr, mockKernel.getPrintfBufferAllocation());
1534+
}
1535+
1536+
TEST_F(PrintfTest, WhenCreatingPrintfBufferThenAllocationAddedToResidencyContainer) {
1537+
Mock<Module> mockModule(this->device, nullptr);
1538+
Mock<Kernel> mockKernel;
1539+
mockKernel.descriptor.kernelAttributes.flags.usesPrintf = true;
1540+
mockKernel.module = &mockModule;
1541+
1542+
ze_kernel_desc_t kernelDesc = {};
1543+
kernelDesc.pKernelName = "mock";
1544+
mockKernel.createPrintfBuffer();
1545+
1546+
auto printfBufferAllocation = mockKernel.getPrintfBufferAllocation();
1547+
EXPECT_NE(nullptr, printfBufferAllocation);
1548+
1549+
EXPECT_NE(0u, mockKernel.residencyContainer.size());
1550+
EXPECT_EQ(mockKernel.residencyContainer[mockKernel.residencyContainer.size() - 1], printfBufferAllocation);
1551+
}
1552+
1553+
TEST_F(PrintfTest, WhenCreatingPrintfBufferThenCrossThreadDataIsPatched) {
1554+
Mock<Module> mockModule(this->device, nullptr);
1555+
Mock<Kernel> mockKernel;
1556+
mockKernel.descriptor.kernelAttributes.flags.usesPrintf = true;
1557+
mockKernel.module = &mockModule;
1558+
1559+
ze_kernel_desc_t kernelDesc = {};
1560+
kernelDesc.pKernelName = "mock";
1561+
1562+
auto crossThreadData = std::make_unique<uint32_t[]>(4);
1563+
1564+
mockKernel.descriptor.payloadMappings.implicitArgs.printfSurfaceAddress.stateless = 0;
1565+
mockKernel.descriptor.payloadMappings.implicitArgs.printfSurfaceAddress.pointerSize = sizeof(uintptr_t);
1566+
mockKernel.crossThreadData.reset(reinterpret_cast<uint8_t *>(crossThreadData.get()));
1567+
mockKernel.crossThreadDataSize = sizeof(uint32_t[4]);
1568+
1569+
mockKernel.createPrintfBuffer();
1570+
1571+
auto printfBufferAllocation = mockKernel.getPrintfBufferAllocation();
1572+
EXPECT_NE(nullptr, printfBufferAllocation);
1573+
1574+
auto printfBufferAddressPatched = *reinterpret_cast<uintptr_t *>(crossThreadData.get());
1575+
auto printfBufferGpuAddressOffset = static_cast<uintptr_t>(printfBufferAllocation->getGpuAddressToPatch());
1576+
EXPECT_EQ(printfBufferGpuAddressOffset, printfBufferAddressPatched);
1577+
1578+
mockKernel.crossThreadData.release();
1579+
}
1580+
15081581
} // namespace ult
15091582
} // namespace L0

0 commit comments

Comments
 (0)