• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*-------------------------------------------------------------------------
2  * drawElements Quality Program Tester Core
3  * ----------------------------------------
4  *
5  * Copyright 2016 The Android Open Source Project
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  *//*!
20  * \file
21  * \brief Win32 platform port.
22  *//*--------------------------------------------------------------------*/
23 
24 #include "tcuWin32Platform.hpp"
25 #include "tcuWGLContextFactory.hpp"
26 #include "tcuWin32EGLNativeDisplayFactory.hpp"
27 #include "egluGLContextFactory.hpp"
28 
29 // MinGW doesn't define this in its headers, but
30 // still has the export in the libs.
31 #if defined(__MINGW32__)
32 extern "C" WINUSERAPI WINBOOL WINAPI SetProcessDPIAware(VOID);
33 #endif
34 
35 namespace tcu
36 {
37 namespace win32
38 {
39 
Platform(void)40 Platform::Platform (void)
41 	: m_instance		(GetModuleHandle(NULL))
42 	, m_vulkanPlatform	(m_instance)
43 {
44 	// Set process priority to lower.
45 	SetPriorityClass(GetCurrentProcess(), BELOW_NORMAL_PRIORITY_CLASS);
46 
47 
48 	// Set process to be DPI aware
49 	// This is requried for VK tests that manually enter exclusive mode
50 	// using VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT
51 	if (SetProcessDPIAware() == 0)
52 	{
53 		TCU_FAIL("SetProcessDPIAware  function failed");
54 	}
55 
56 	{
57 		wgl::ContextFactory* factory = DE_NULL;
58 
59 		try
60 		{
61 			factory = new wgl::ContextFactory(m_instance);
62 		}
63 		catch (const std::exception& e)
64 		{
65 			print("Warning: WGL not supported: %s\n", e.what());
66 		}
67 
68 		if (factory)
69 		{
70 			try
71 			{
72 				m_contextFactoryRegistry.registerFactory(factory);
73 			}
74 			catch (...)
75 			{
76 				delete factory;
77 				throw;
78 			}
79 		}
80 	}
81 
82 	m_nativeDisplayFactoryRegistry.registerFactory(new win32::EGLNativeDisplayFactory(m_instance));
83 	m_contextFactoryRegistry.registerFactory(new eglu::GLContextFactory(m_nativeDisplayFactoryRegistry));
84 }
85 
~Platform(void)86 Platform::~Platform (void)
87 {
88 }
89 
processEvents(void)90 bool Platform::processEvents (void)
91 {
92 	MSG msg;
93 	while (PeekMessage(&msg, (HWND)-1, 0, 0, PM_REMOVE))
94 	{
95 		DispatchMessage(&msg);
96 		if (msg.message == WM_QUIT)
97 			return false;
98 	}
99 	return true;
100 }
101 
102 } // win32
103 } // tcu
104 
105 // Create platform
createPlatform(void)106 tcu::Platform* createPlatform (void)
107 {
108 	return new tcu::win32::Platform();
109 }
110