1616#include " opencl/test/unit_test/helpers/hw_helper_tests.h"
1717#include " opencl/test/unit_test/mocks/mock_builtins.h"
1818#include " opencl/test/unit_test/mocks/mock_execution_environment.h"
19+ #include " opencl/test/unit_test/mocks/ult_cl_device_factory.h"
1920
2021#include " driver_version.h"
2122#include " gtest/gtest.h"
@@ -41,6 +42,34 @@ struct DeviceGetCapsTest : public ::testing::Test {
4142 MockSipData::calledType = SipKernelType::COUNT;
4243 MockSipData::called = false ;
4344 }
45+
46+ void verifyOpenclCAllVersions (MockClDevice &clDevice) {
47+ auto openclCWithVersion = clDevice.getDeviceInfo ().openclCAllVersions .begin ();
48+
49+ EXPECT_STREQ (" OpenCL C" , openclCWithVersion->name );
50+ EXPECT_EQ (CL_MAKE_VERSION (1u , 0u , 0u ), openclCWithVersion->version );
51+ openclCWithVersion++;
52+ EXPECT_STREQ (" OpenCL C" , openclCWithVersion->name );
53+ EXPECT_EQ (CL_MAKE_VERSION (1u , 1u , 0u ), openclCWithVersion->version );
54+ openclCWithVersion++;
55+ EXPECT_STREQ (" OpenCL C" , openclCWithVersion->name );
56+ EXPECT_EQ (CL_MAKE_VERSION (1u , 2u , 0u ), openclCWithVersion->version );
57+ openclCWithVersion++;
58+
59+ if (clDevice.areOcl21FeaturesEnabled ()) {
60+ EXPECT_STREQ (" OpenCL C" , openclCWithVersion->name );
61+ EXPECT_EQ (CL_MAKE_VERSION (2u , 0u , 0u ), openclCWithVersion->version );
62+ openclCWithVersion++;
63+ }
64+
65+ if (clDevice.getEnabledClVersion () == 30 ) {
66+ EXPECT_STREQ (" OpenCL C" , openclCWithVersion->name );
67+ EXPECT_EQ (CL_MAKE_VERSION (3u , 0u , 0u ), openclCWithVersion->version );
68+ openclCWithVersion++;
69+ }
70+
71+ EXPECT_EQ (clDevice.getDeviceInfo ().openclCAllVersions .end (), openclCWithVersion);
72+ }
4473};
4574
4675TEST_F (DeviceGetCapsTest, WhenCreatingDeviceThenCapsArePopulatedCorrectly) {
@@ -63,6 +92,9 @@ TEST_F(DeviceGetCapsTest, WhenCreatingDeviceThenCapsArePopulatedCorrectly) {
6392 EXPECT_NE (nullptr , caps.profile );
6493 EXPECT_NE (nullptr , caps.clVersion );
6594 EXPECT_NE (nullptr , caps.clCVersion );
95+ EXPECT_NE (0u , caps.numericClVersion );
96+ EXPECT_GT (caps.openclCAllVersions .size (), 0u );
97+ EXPECT_GT (caps.extensionsWithVersion .size (), 0u );
6698
6799 EXPECT_NE (nullptr , caps.spirVersions );
68100 EXPECT_NE (nullptr , caps.deviceExtensions );
@@ -266,7 +298,9 @@ TEST_F(DeviceGetCapsTest, givenForceOclVersion30WhenCapsAreCreatedThenDeviceRepo
266298 const auto &caps = device->getDeviceInfo ();
267299 EXPECT_STREQ (" OpenCL 3.0 NEO " , caps.clVersion );
268300 EXPECT_STREQ (" OpenCL C 3.0 " , caps.clCVersion );
301+ EXPECT_EQ (CL_MAKE_VERSION (3u , 0u , 0u ), caps.numericClVersion );
269302 EXPECT_FALSE (device->ocl21FeaturesEnabled );
303+ verifyOpenclCAllVersions (*device);
270304}
271305
272306TEST_F (DeviceGetCapsTest, givenForceOclVersion21WhenCapsAreCreatedThenDeviceReportsOpenCL21) {
@@ -276,7 +310,9 @@ TEST_F(DeviceGetCapsTest, givenForceOclVersion21WhenCapsAreCreatedThenDeviceRepo
276310 const auto &caps = device->getDeviceInfo ();
277311 EXPECT_STREQ (" OpenCL 2.1 NEO " , caps.clVersion );
278312 EXPECT_STREQ (" OpenCL C 2.0 " , caps.clCVersion );
313+ EXPECT_EQ (CL_MAKE_VERSION (2u , 1u , 0u ), caps.numericClVersion );
279314 EXPECT_TRUE (device->ocl21FeaturesEnabled );
315+ verifyOpenclCAllVersions (*device);
280316}
281317
282318TEST_F (DeviceGetCapsTest, givenForceOclVersion12WhenCapsAreCreatedThenDeviceReportsOpenCL12) {
@@ -286,7 +322,9 @@ TEST_F(DeviceGetCapsTest, givenForceOclVersion12WhenCapsAreCreatedThenDeviceRepo
286322 const auto &caps = device->getDeviceInfo ();
287323 EXPECT_STREQ (" OpenCL 1.2 NEO " , caps.clVersion );
288324 EXPECT_STREQ (" OpenCL C 1.2 " , caps.clCVersion );
325+ EXPECT_EQ (CL_MAKE_VERSION (1u , 2u , 0u ), caps.numericClVersion );
289326 EXPECT_FALSE (device->ocl21FeaturesEnabled );
327+ verifyOpenclCAllVersions (*device);
290328}
291329
292330TEST_F (DeviceGetCapsTest, givenForceOCL21FeaturesSupportEnabledWhenCapsAreCreatedThenDeviceReportsSupportOfOcl21Features) {
@@ -315,14 +353,15 @@ TEST_F(DeviceGetCapsTest, givenForceOcl30AndForceOCL21FeaturesSupportEnabledWhen
315353
316354TEST_F (DeviceGetCapsTest, givenForceInvalidOclVersionWhenCapsAreCreatedThenDeviceWillDefaultToOpenCL12) {
317355 DebugManagerStateRestore dbgRestorer;
318- {
319- DebugManager.flags .ForceOCLVersion .set (1 );
320- auto device = std::make_unique<MockClDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(defaultHwInfo.get ()));
321- const auto &caps = device->getDeviceInfo ();
322- EXPECT_STREQ (" OpenCL 1.2 NEO " , caps.clVersion );
323- EXPECT_STREQ (" OpenCL C 1.2 " , caps.clCVersion );
324- DebugManager.flags .ForceOCLVersion .set (0 );
325- }
356+ DebugManager.flags .ForceOCLVersion .set (1 );
357+
358+ auto device = std::make_unique<MockClDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(defaultHwInfo.get ()));
359+ const auto &caps = device->getDeviceInfo ();
360+ EXPECT_STREQ (" OpenCL 1.2 NEO " , caps.clVersion );
361+ EXPECT_STREQ (" OpenCL C 1.2 " , caps.clCVersion );
362+ EXPECT_EQ (CL_MAKE_VERSION (1u , 2u , 0u ), caps.numericClVersion );
363+ EXPECT_FALSE (device->ocl21FeaturesEnabled );
364+ verifyOpenclCAllVersions (*device);
326365}
327366
328367TEST_F (DeviceGetCapsTest, givenForce32bitAddressingWhenCapsAreCreatedThenDeviceReports32bitAddressingOptimization) {
@@ -738,6 +777,38 @@ TEST_F(DeviceGetCapsTest, WhenDeviceIsCreatedThenVmeIsEnabled) {
738777 EXPECT_TRUE (freshDebugSettingsManager.flags .EnableIntelVme .get ());
739778}
740779
780+ TEST_F (DeviceGetCapsTest, givenVmeRelatedFlagsSetWhenCapsAreCreatedThenDeviceReportCorrectBuiltins) {
781+ DebugManagerStateRestore dbgRestorer;
782+
783+ for (auto isVmeEnabled : ::testing::Bool ()) {
784+ DebugManager.flags .EnableIntelVme .set (isVmeEnabled);
785+ for (auto isAdvancedVmeEnabled : ::testing::Bool ()) {
786+ DebugManager.flags .EnableIntelAdvancedVme .set (isAdvancedVmeEnabled);
787+
788+ UltClDeviceFactory deviceFactory{1 , 0 };
789+ const auto &caps = deviceFactory.rootDevices [0 ]->getDeviceInfo ();
790+ auto builtInKernelWithVersion = caps.builtInKernelsWithVersion .begin ();
791+
792+ if (isVmeEnabled) {
793+ EXPECT_STREQ (" block_motion_estimate_intel" , builtInKernelWithVersion->name );
794+ EXPECT_EQ (CL_MAKE_VERSION (1u , 0u , 0u ), builtInKernelWithVersion->version );
795+ builtInKernelWithVersion++;
796+ }
797+
798+ if (isAdvancedVmeEnabled) {
799+ EXPECT_STREQ (" block_advanced_motion_estimate_check_intel" , builtInKernelWithVersion->name );
800+ EXPECT_EQ (CL_MAKE_VERSION (1u , 0u , 0u ), builtInKernelWithVersion->version );
801+ builtInKernelWithVersion++;
802+ EXPECT_STREQ (" block_advanced_motion_estimate_bidirectional_check_intel" , builtInKernelWithVersion->name );
803+ EXPECT_EQ (CL_MAKE_VERSION (1u , 0u , 0u ), builtInKernelWithVersion->version );
804+ builtInKernelWithVersion++;
805+ }
806+
807+ EXPECT_EQ (caps.builtInKernelsWithVersion .end (), builtInKernelWithVersion);
808+ }
809+ }
810+ }
811+
741812TEST_F (DeviceGetCapsTest, WhenDeviceIsCreatedThenPriorityHintsExtensionIsReported) {
742813 auto device = std::make_unique<MockClDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(defaultHwInfo.get ()));
743814 const auto &caps = device->getDeviceInfo ();
@@ -871,6 +942,20 @@ TEST_F(DeviceGetCapsTest, givenDeviceWhenGettingHostUnifiedMemoryCapThenItDepend
871942 EXPECT_EQ ((localMemoryEnabled == false ), caps.hostUnifiedMemory );
872943}
873944
945+ TEST_F (DeviceGetCapsTest, givenDefaultDeviceWhenQueriedForExtensionsWithVersionThenValuesMatchWithExtensionsString) {
946+ UltClDeviceFactory deviceFactory{1 , 0 };
947+ auto pClDevice = deviceFactory.rootDevices [0 ];
948+ std::string allExtensions;
949+
950+ for (auto extensionWithVersion : pClDevice->getDeviceInfo ().extensionsWithVersion ) {
951+ EXPECT_EQ (CL_MAKE_VERSION (1u , 0u , 0u ), extensionWithVersion.version );
952+ allExtensions += extensionWithVersion.name ;
953+ allExtensions += " " ;
954+ }
955+
956+ EXPECT_STREQ (pClDevice->deviceExtensions .c_str (), allExtensions.c_str ());
957+ }
958+
874959TEST (DeviceGetCaps, givenDeviceThatDoesntHaveFp64WhenDbgFlagEnablesFp64ThenReportFp64Flags) {
875960 DebugManagerStateRestore dbgRestorer;
876961 DebugManager.flags .OverrideDefaultFP64Settings .set (1 );
0 commit comments