@@ -2187,6 +2187,60 @@ TEST_F(PrintfTest, WhenCreatingPrintfBufferThenCrossThreadDataIsPatched) {
21872187 mockKernel.crossThreadData .release ();
21882188}
21892189
2190+ using KernelPrintfStringMapTests = Test<ModuleImmutableDataFixture>;
2191+
2192+ TEST_F (KernelPrintfStringMapTests, givenKernelWithPrintfStringsMapUsageEnabledWhenPrintOutputThenProperStringIsPrinted) {
2193+ std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(0u );
2194+
2195+ auto kernelDescriptor = mockKernelImmData->kernelDescriptor ;
2196+ kernelDescriptor->kernelAttributes .flags .usesPrintf = true ;
2197+ kernelDescriptor->kernelAttributes .flags .usesStringMapForPrintf = true ;
2198+ std::string expectedString (" test123" );
2199+ kernelDescriptor->kernelMetadata .printfStringsMap .insert (std::make_pair (0u , expectedString));
2200+
2201+ createModuleFromBinary (0u , false , mockKernelImmData.get ());
2202+
2203+ auto kernel = std::make_unique<MockKernel>(module .get ());
2204+
2205+ ze_kernel_desc_t kernelDesc{ZE_STRUCTURE_TYPE_KERNEL_DESC};
2206+ kernel->initialize (&kernelDesc);
2207+
2208+ auto printfAllocation = reinterpret_cast <uint32_t *>(kernel->getPrintfBufferAllocation ()->getUnderlyingBuffer ());
2209+ printfAllocation[0 ] = 8 ;
2210+ printfAllocation[1 ] = 0 ;
2211+
2212+ testing::internal::CaptureStdout ();
2213+ kernel->printPrintfOutput ();
2214+ std::string output = testing::internal::GetCapturedStdout ();
2215+ EXPECT_STREQ (expectedString.c_str (), output.c_str ());
2216+ }
2217+
2218+ TEST_F (KernelPrintfStringMapTests, givenKernelWithPrintfStringsMapUsageDisabledWhenPrintOutputThenNothingIsPrinted) {
2219+ std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(0u );
2220+
2221+ auto kernelDescriptor = mockKernelImmData->kernelDescriptor ;
2222+ kernelDescriptor->kernelAttributes .flags .usesPrintf = true ;
2223+ kernelDescriptor->kernelAttributes .flags .usesStringMapForPrintf = false ;
2224+ std::string expectedString (" test123" );
2225+ kernelDescriptor->kernelMetadata .printfStringsMap .insert (std::make_pair (0u , expectedString));
2226+
2227+ createModuleFromBinary (0u , false , mockKernelImmData.get ());
2228+
2229+ auto kernel = std::make_unique<MockKernel>(module .get ());
2230+
2231+ ze_kernel_desc_t kernelDesc{ZE_STRUCTURE_TYPE_KERNEL_DESC};
2232+ kernel->initialize (&kernelDesc);
2233+
2234+ auto printfAllocation = reinterpret_cast <uint32_t *>(kernel->getPrintfBufferAllocation ()->getUnderlyingBuffer ());
2235+ printfAllocation[0 ] = 8 ;
2236+ printfAllocation[1 ] = 0 ;
2237+
2238+ testing::internal::CaptureStdout ();
2239+ kernel->printPrintfOutput ();
2240+ std::string output = testing::internal::GetCapturedStdout ();
2241+ EXPECT_STREQ (" " , output.c_str ());
2242+ }
2243+
21902244using KernelImplicitArgTests = Test<ModuleImmutableDataFixture>;
21912245
21922246TEST_F (KernelImplicitArgTests, givenKernelWithImplicitArgsWhenInitializeThenPrintfSurfaceIsCreatedAndProperlyPatchedInImplicitArgs) {
@@ -2272,36 +2326,6 @@ TEST_F(KernelImplicitArgTests, givenKernelWithImplicitArgsWhenSettingKernelParam
22722326 EXPECT_EQ (0 , memcmp (pImplicitArgs, &expectedImplicitArgs, sizeof (ImplicitArgs)));
22732327}
22742328
2275- TEST_F (KernelImplicitArgTests, givenKernelWithImplicitArgsAndPrintfStringsMapWhenPrintOutputThenProperStringIsPrinted) {
2276- std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(0u );
2277-
2278- auto kernelDescriptor = mockKernelImmData->kernelDescriptor ;
2279- kernelDescriptor->kernelAttributes .flags .requiresImplicitArgs = true ;
2280- kernelDescriptor->kernelAttributes .flags .usesPrintf = false ;
2281- kernelDescriptor->kernelAttributes .flags .usesStringMapForPrintf = false ;
2282- std::string expectedString (" test123" );
2283- kernelDescriptor->kernelMetadata .printfStringsMap .insert (std::make_pair (0u , expectedString));
2284-
2285- createModuleFromBinary (0u , false , mockKernelImmData.get ());
2286-
2287- auto kernel = std::make_unique<MockKernel>(module .get ());
2288-
2289- ze_kernel_desc_t kernelDesc{ZE_STRUCTURE_TYPE_KERNEL_DESC};
2290- kernel->initialize (&kernelDesc);
2291-
2292- auto printfAllocation = reinterpret_cast <uint32_t *>(kernel->getPrintfBufferAllocation ()->getUnderlyingBuffer ());
2293- printfAllocation[0 ] = 8 ;
2294- printfAllocation[1 ] = 0 ;
2295-
2296- EXPECT_TRUE (kernel->getKernelDescriptor ().kernelAttributes .flags .requiresImplicitArgs );
2297- ASSERT_NE (nullptr , kernel->getImplicitArgs ());
2298-
2299- testing::internal::CaptureStdout ();
2300- kernel->printPrintfOutput ();
2301- std::string output = testing::internal::GetCapturedStdout ();
2302- EXPECT_STREQ (expectedString.c_str (), output.c_str ());
2303- }
2304-
23052329TEST_F (KernelImplicitArgTests, givenKernelWithoutImplicitArgsWhenPatchingImplicitArgsThenNothingHappens) {
23062330 std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(0u );
23072331 mockKernelImmData->kernelDescriptor ->kernelAttributes .flags .requiresImplicitArgs = false ;
0 commit comments