77
88#include " shared/source/helpers/hw_info.h"
99#include " shared/source/os_interface/device_factory.h"
10+ #include " shared/source/os_interface/windows/os_interface.h"
1011#include " shared/test/unit_test/mocks/mock_device.h"
1112
1213#include " opencl/source/cl_device/cl_device.h"
1314#include " opencl/test/unit_test/api/cl_api_tests.h"
1415#include " opencl/test/unit_test/mocks/mock_platform.h"
16+ #include " opencl/test/unit_test/mocks/mock_wddm.h"
1517#include " opencl/test/unit_test/sharings/gl/gl_dll_helper.h"
1618
1719using namespace NEO ;
1820
19- typedef api_tests clGetGLContextInfoKHR_ ;
21+ using clGetGLContextInfoKhrTest = api_tests ;
2022
2123namespace ULT {
2224
23- TEST_F (clGetGLContextInfoKHR_, successWithDefaultPlatform) {
25+ TEST_F (clGetGLContextInfoKhrTest, successWithDefaultPlatform) {
26+ VariableBackup<UltHwConfig> backup (&ultHwConfig);
27+ ultHwConfig.useMockedPrepareDeviceEnvironmentsFunc = false ;
28+
29+ auto defaultPlatform = std::make_unique<MockPlatform>();
30+ defaultPlatform->initializeWithNewDevices ();
31+ platformsImpl[0 ] = std::move (defaultPlatform);
2432 auto expectedDevice = ::platform ()->getClDevice (0 );
2533 cl_device_id retDevice = 0 ;
2634 size_t retSize = 0 ;
@@ -44,6 +52,9 @@ using clGetGLContextInfoKHRNonDefaultPlatform = ::testing::Test;
4452TEST_F (clGetGLContextInfoKHRNonDefaultPlatform, successWithNonDefaultPlatform) {
4553 platformsImpl.clear ();
4654
55+ VariableBackup<UltHwConfig> backup (&ultHwConfig);
56+ ultHwConfig.useMockedPrepareDeviceEnvironmentsFunc = false ;
57+
4758 cl_int retVal = CL_SUCCESS;
4859
4960 auto nonDefaultPlatform = std::make_unique<MockPlatform>();
@@ -68,7 +79,7 @@ TEST_F(clGetGLContextInfoKHRNonDefaultPlatform, successWithNonDefaultPlatform) {
6879 EXPECT_EQ (sizeof (cl_device_id), retSize);
6980}
7081
71- TEST_F (clGetGLContextInfoKHR_ , invalidParam) {
82+ TEST_F (clGetGLContextInfoKhrTest , invalidParam) {
7283 cl_device_id retDevice = 0 ;
7384 size_t retSize = 0 ;
7485 const cl_context_properties properties[] = {CL_GL_CONTEXT_KHR, 1 , CL_WGL_HDC_KHR, 2 , 0 };
@@ -79,7 +90,7 @@ TEST_F(clGetGLContextInfoKHR_, invalidParam) {
7990 EXPECT_EQ (0u , retSize);
8091}
8192
82- TEST_F (clGetGLContextInfoKHR_ , givenContextFromNoIntelOpenGlDriverWhenCallClGetGLContextInfoKHRThenReturnClInvalidContext) {
93+ TEST_F (clGetGLContextInfoKhrTest , givenContextFromNoIntelOpenGlDriverWhenCallClGetGLContextInfoKHRThenReturnClInvalidContext) {
8394 cl_device_id retDevice = 0 ;
8495 size_t retSize = 0 ;
8596 const cl_context_properties properties[] = {CL_GL_CONTEXT_KHR, 1 , CL_WGL_HDC_KHR, 2 , 0 };
@@ -92,7 +103,7 @@ TEST_F(clGetGLContextInfoKHR_, givenContextFromNoIntelOpenGlDriverWhenCallClGetG
92103 EXPECT_EQ (0u , retSize);
93104}
94105
95- TEST_F (clGetGLContextInfoKHR_ , givenNullVersionFromIntelOpenGlDriverWhenCallClGetGLContextInfoKHRThenReturnClInvalidContext) {
106+ TEST_F (clGetGLContextInfoKhrTest , givenNullVersionFromIntelOpenGlDriverWhenCallClGetGLContextInfoKHRThenReturnClInvalidContext) {
96107 cl_device_id retDevice = 0 ;
97108 size_t retSize = 0 ;
98109 const cl_context_properties properties[] = {CL_GL_CONTEXT_KHR, 1 , CL_WGL_HDC_KHR, 2 , 0 };
@@ -105,7 +116,7 @@ TEST_F(clGetGLContextInfoKHR_, givenNullVersionFromIntelOpenGlDriverWhenCallClGe
105116 EXPECT_EQ (0u , retSize);
106117}
107118
108- TEST_F (clGetGLContextInfoKHR_ , GivenIncorrectPropertiesWhenCallclGetGLContextInfoKHRThenReturnClInvalidGlShareGroupRererencKhr) {
119+ TEST_F (clGetGLContextInfoKhrTest , GivenIncorrectPropertiesWhenCallclGetGLContextInfoKHRThenReturnClInvalidGlShareGroupRererencKhr) {
109120 cl_device_id retDevice = 0 ;
110121 size_t retSize = 0 ;
111122 retVal = clGetGLContextInfoKHR (nullptr , 0 , sizeof (cl_device_id), &retDevice, &retSize);
@@ -120,4 +131,58 @@ TEST_F(clGetGLContextInfoKHR_, GivenIncorrectPropertiesWhenCallclGetGLContextInf
120131 EXPECT_EQ (CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR, retVal);
121132}
122133
134+ TEST_F (clGetGLContextInfoKHRNonDefaultPlatform, whenVerificationOfHdcHandleFailsThenInvalidGlReferenceErrorIsReturned) {
135+ platformsImpl.clear ();
136+
137+ VariableBackup<UltHwConfig> backup (&ultHwConfig);
138+ ultHwConfig.useMockedPrepareDeviceEnvironmentsFunc = false ;
139+
140+ cl_int retVal = CL_SUCCESS;
141+
142+ auto nonDefaultPlatform = std::make_unique<MockPlatform>();
143+ nonDefaultPlatform->initializeWithNewDevices ();
144+ cl_platform_id nonDefaultPlatformCl = nonDefaultPlatform.get ();
145+
146+ auto device = nonDefaultPlatform->getClDevice (0 );
147+
148+ static_cast <WddmMock *>(device->getRootDeviceEnvironment ().osInterface ->get ()->getWddm ())->verifyHdcReturnValue = false ;
149+ size_t retSize = 0 ;
150+ cl_device_id retDevice = 0 ;
151+
152+ const cl_context_properties properties[] = {CL_GL_CONTEXT_KHR, 1 , CL_WGL_HDC_KHR, 2 , CL_CONTEXT_PLATFORM, reinterpret_cast <cl_context_properties>(nonDefaultPlatformCl), 0 };
153+ retVal = clGetGLContextInfoKHR (properties, CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR, sizeof (cl_device_id), &retDevice, &retSize);
154+
155+ EXPECT_EQ (CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR, retVal);
156+ }
157+ TEST_F (clGetGLContextInfoKHRNonDefaultPlatform, whenVerificationOfHdcHandleFailsForFirstDeviceButSucceedsForSecondOneThenReturnTheSecondDevice) {
158+ platformsImpl.clear ();
159+
160+ DebugManagerStateRestore restorer;
161+ DebugManager.flags .CreateMultipleRootDevices .set (2 );
162+ VariableBackup<UltHwConfig> backup (&ultHwConfig);
163+ ultHwConfig.useMockedPrepareDeviceEnvironmentsFunc = false ;
164+
165+ cl_int retVal = CL_SUCCESS;
166+
167+ auto nonDefaultPlatform = std::make_unique<MockPlatform>();
168+ nonDefaultPlatform->initializeWithNewDevices ();
169+ cl_platform_id nonDefaultPlatformCl = nonDefaultPlatform.get ();
170+
171+ auto device0 = nonDefaultPlatform->getClDevice (0 );
172+ auto device1 = nonDefaultPlatform->getClDevice (0 );
173+ cl_device_id expectedDevice = device1;
174+
175+ static_cast <WddmMock *>(device0->getRootDeviceEnvironment ().osInterface ->get ()->getWddm ())->verifyHdcReturnValue = false ;
176+ static_cast <WddmMock *>(device1->getRootDeviceEnvironment ().osInterface ->get ()->getWddm ())->verifyHdcReturnValue = true ;
177+ size_t retSize = 0 ;
178+ cl_device_id retDevice = 0 ;
179+
180+ const cl_context_properties properties[] = {CL_GL_CONTEXT_KHR, 1 , CL_WGL_HDC_KHR, 2 , CL_CONTEXT_PLATFORM, reinterpret_cast <cl_context_properties>(nonDefaultPlatformCl), 0 };
181+ retVal = clGetGLContextInfoKHR (properties, CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR, sizeof (cl_device_id), &retDevice, &retSize);
182+
183+ EXPECT_EQ (CL_SUCCESS, retVal);
184+ EXPECT_EQ (expectedDevice, retDevice);
185+ EXPECT_EQ (sizeof (cl_device_id), retSize);
186+ }
187+
123188} // namespace ULT
0 commit comments