@@ -3554,3 +3554,126 @@ TEST(ProgramPopulateZebinExtendedArgsMetadataTests, givenZebinaryFormatWithValid
35543554 buildInfo.kernelInfoArray .clear ();
35553555 buildInfo.unpackedDeviceBinary .release ();
35563556}
3557+
3558+ TEST (ProgramGenerateDefaultArgsMetadataTests, givenNativeBinaryWhenCallingGenerateDefaultExtendedArgsMetadataThenGenerateMetadataForEachExplicitArgForEachKernel) {
3559+ MockClDevice device{new MockDevice ()};
3560+ MockProgram program (toClDeviceVector (device));
3561+
3562+ const auto &rootDeviceIndex = device.getRootDeviceIndex ();
3563+ auto &buildInfo = program.buildInfos [rootDeviceIndex];
3564+
3565+ KernelInfo kernelInfo1, kernelInfo2;
3566+ kernelInfo1.kernelDescriptor .kernelMetadata .kernelName = " some_kernel" ;
3567+ kernelInfo2.kernelDescriptor .kernelMetadata .kernelName = " another_kernel" ;
3568+ buildInfo.kernelInfoArray .push_back (&kernelInfo1);
3569+ buildInfo.kernelInfoArray .push_back (&kernelInfo2);
3570+
3571+ kernelInfo1.kernelDescriptor .payloadMappings .explicitArgs .resize (2 );
3572+ kernelInfo1.kernelDescriptor .payloadMappings .explicitArgs .at (0 ).type = ArgDescriptor::ArgTPointer;
3573+ auto &ptr = kernelInfo1.kernelDescriptor .payloadMappings .explicitArgs .at (0 ).as <ArgDescPointer>();
3574+ ptr.pointerSize = 8u ;
3575+
3576+ kernelInfo1.kernelDescriptor .payloadMappings .explicitArgs .at (1 ).type = ArgDescriptor::ArgTImage;
3577+ auto &img = kernelInfo1.kernelDescriptor .payloadMappings .explicitArgs .at (1 ).as <ArgDescImage>();
3578+ img.imageType = NEOImageType::ImageType2D;
3579+
3580+ kernelInfo2.kernelDescriptor .payloadMappings .explicitArgs .resize (1 );
3581+ kernelInfo2.kernelDescriptor .payloadMappings .explicitArgs .at (0 ).type = ArgDescriptor::ArgTSampler;
3582+
3583+ program.callGenerateDefaultExtendedArgsMetadataOnce (rootDeviceIndex);
3584+ EXPECT_EQ (2u , kernelInfo1.kernelDescriptor .explicitArgsExtendedMetadata .size ());
3585+ EXPECT_EQ (1u , kernelInfo2.kernelDescriptor .explicitArgsExtendedMetadata .size ());
3586+
3587+ const auto &argMetadata1 = kernelInfo1.kernelDescriptor .explicitArgsExtendedMetadata [0 ];
3588+ EXPECT_STREQ (" arg0" , argMetadata1.argName .c_str ());
3589+ auto expectedTypeName = std::string (" __opaque_ptr;" + std::to_string (ptr.pointerSize ));
3590+ EXPECT_STREQ (expectedTypeName.c_str (), argMetadata1.type .c_str ());
3591+
3592+ const auto &argMetadata2 = kernelInfo1.kernelDescriptor .explicitArgsExtendedMetadata [1 ];
3593+ EXPECT_STREQ (" arg1" , argMetadata2.argName .c_str ());
3594+ EXPECT_STREQ (" image2d_t" , argMetadata2.type .c_str ());
3595+
3596+ const auto &argMetadata3 = kernelInfo2.kernelDescriptor .explicitArgsExtendedMetadata [0 ];
3597+ EXPECT_STREQ (" arg0" , argMetadata3.argName .c_str ());
3598+ EXPECT_STREQ (" sampler_t" , argMetadata3.type .c_str ());
3599+
3600+ buildInfo.kernelInfoArray .clear ();
3601+ buildInfo.unpackedDeviceBinary .release ();
3602+ }
3603+
3604+ TEST (ProgramGenerateDefaultArgsMetadataTests, whenGeneratingDefaultMetadataForArgByValueWithManyElementsThenGenerateProperMetadata) {
3605+ MockClDevice device{new MockDevice ()};
3606+ MockProgram program (toClDeviceVector (device));
3607+
3608+ const auto &rootDeviceIndex = device.getRootDeviceIndex ();
3609+ auto &buildInfo = program.buildInfos [rootDeviceIndex];
3610+
3611+ KernelInfo kernelInfo;
3612+ kernelInfo.kernelDescriptor .kernelMetadata .kernelName = " some_kernel" ;
3613+ buildInfo.kernelInfoArray .push_back (&kernelInfo);
3614+
3615+ kernelInfo.kernelDescriptor .payloadMappings .explicitArgs .resize (1 );
3616+ kernelInfo.kernelDescriptor .payloadMappings .explicitArgs .at (0 ).type = ArgDescriptor::ArgTValue;
3617+ auto &argAsVal = kernelInfo.kernelDescriptor .payloadMappings .explicitArgs .at (0 ).as <ArgDescValue>();
3618+ argAsVal.elements .resize (3u );
3619+
3620+ argAsVal.elements [0 ].sourceOffset = 0u ;
3621+ argAsVal.elements [0 ].size = 8u ;
3622+ argAsVal.elements [1 ].sourceOffset = 16u ;
3623+ argAsVal.elements [1 ].size = 8u ;
3624+ argAsVal.elements [2 ].sourceOffset = 8u ;
3625+ argAsVal.elements [2 ].size = 8u ;
3626+
3627+ program.callGenerateDefaultExtendedArgsMetadataOnce (rootDeviceIndex);
3628+ EXPECT_EQ (1u , kernelInfo.kernelDescriptor .explicitArgsExtendedMetadata .size ());
3629+
3630+ const auto &argMetadata = kernelInfo.kernelDescriptor .explicitArgsExtendedMetadata [0 ];
3631+ EXPECT_STREQ (" arg0" , argMetadata.argName .c_str ());
3632+
3633+ auto expectedSize = argAsVal.elements [1 ].sourceOffset + argAsVal.elements [1 ].size ;
3634+ auto expectedTypeName = std::string (" __opaque_var;" + std::to_string (expectedSize));
3635+ EXPECT_STREQ (expectedTypeName.c_str (), argMetadata.type .c_str ());
3636+
3637+ const auto &argTypeTraits = kernelInfo.kernelDescriptor .payloadMappings .explicitArgs .at (0 ).getTraits ();
3638+ EXPECT_EQ (KernelArgMetadata::AddrPrivate, argTypeTraits.addressQualifier );
3639+ EXPECT_EQ (KernelArgMetadata::AccessNone, argTypeTraits.accessQualifier );
3640+ EXPECT_TRUE (argTypeTraits.typeQualifiers .empty ());
3641+
3642+ buildInfo.kernelInfoArray .clear ();
3643+ buildInfo.unpackedDeviceBinary .release ();
3644+ }
3645+
3646+ TEST (ProgramGenerateDefaultArgsMetadataTests, whenGeneratingDefaultMetadataForArgByValueWithSingleElementEachThenGenerateProperMetadata) {
3647+ MockClDevice device{new MockDevice ()};
3648+ MockProgram program (toClDeviceVector (device));
3649+
3650+ const auto &rootDeviceIndex = device.getRootDeviceIndex ();
3651+ auto &buildInfo = program.buildInfos [rootDeviceIndex];
3652+
3653+ KernelInfo kernelInfo;
3654+ kernelInfo.kernelDescriptor .kernelMetadata .kernelName = " some_kernel" ;
3655+ buildInfo.kernelInfoArray .push_back (&kernelInfo);
3656+
3657+ kernelInfo.kernelDescriptor .payloadMappings .explicitArgs .resize (1 );
3658+ kernelInfo.kernelDescriptor .payloadMappings .explicitArgs .at (0 ).type = ArgDescriptor::ArgTValue;
3659+ auto &argAsVal = kernelInfo.kernelDescriptor .payloadMappings .explicitArgs .at (0 ).as <ArgDescValue>();
3660+ argAsVal.elements .resize (1u );
3661+ argAsVal.elements [0 ].size = 16u ;
3662+
3663+ program.callGenerateDefaultExtendedArgsMetadataOnce (rootDeviceIndex);
3664+ EXPECT_EQ (1u , kernelInfo.kernelDescriptor .explicitArgsExtendedMetadata .size ());
3665+
3666+ const auto &argMetadata = kernelInfo.kernelDescriptor .explicitArgsExtendedMetadata [0 ];
3667+ EXPECT_STREQ (" arg0" , argMetadata.argName .c_str ());
3668+
3669+ auto expectedTypeName = std::string (" __opaque;" + std::to_string (argAsVal.elements [0 ].size ));
3670+ EXPECT_STREQ (expectedTypeName.c_str (), argMetadata.type .c_str ());
3671+
3672+ const auto &argTypeTraits = kernelInfo.kernelDescriptor .payloadMappings .explicitArgs .at (0 ).getTraits ();
3673+ EXPECT_EQ (KernelArgMetadata::AddrPrivate, argTypeTraits.addressQualifier );
3674+ EXPECT_EQ (KernelArgMetadata::AccessNone, argTypeTraits.accessQualifier );
3675+ EXPECT_TRUE (argTypeTraits.typeQualifiers .empty ());
3676+
3677+ buildInfo.kernelInfoArray .clear ();
3678+ buildInfo.unpackedDeviceBinary .release ();
3679+ }
0 commit comments