13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program Tester Core
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ----------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
50e94e01a42e51498efc714634e2ad050ede9f3ecPyry Haulos * Copyright 2016 The Android Open Source Project
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Win32 platform port.
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuWin32Platform.hpp"
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuWGLContextFactory.hpp"
260e94e01a42e51498efc714634e2ad050ede9f3ecPyry Haulos#include "tcuWin32EGLNativeDisplayFactory.hpp"
270e94e01a42e51498efc714634e2ad050ede9f3ecPyry Haulos#include "egluGLContextFactory.hpp"
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace tcu
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
310e94e01a42e51498efc714634e2ad050ede9f3ecPyry Haulosnamespace win32
324ca810727d8a06a57daf1cc9d0712284a858a40aPyry Haulos{
3312021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos
340e94e01a42e51498efc714634e2ad050ede9f3ecPyry HaulosPlatform::Platform (void)
3512021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos	: m_instance		(GetModuleHandle(NULL))
3612021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos	, m_vulkanPlatform	(m_instance)
3712021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos{
3812021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos	// Set process priority to lower.
3912021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos	SetPriorityClass(GetCurrentProcess(), BELOW_NORMAL_PRIORITY_CLASS);
4012021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos
4112021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos	{
420e94e01a42e51498efc714634e2ad050ede9f3ecPyry Haulos		wgl::ContextFactory* factory = DE_NULL;
4312021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos
4412021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos		try
4512021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos		{
460e94e01a42e51498efc714634e2ad050ede9f3ecPyry Haulos			factory = new wgl::ContextFactory(m_instance);
4712021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos		}
4812021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos		catch (const std::exception& e)
4912021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos		{
5012021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos			print("Warning: WGL not supported: %s\n", e.what());
5112021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos		}
5212021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos
5312021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos		if (factory)
5412021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos		{
5512021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos			try
5612021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos			{
5712021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos				m_contextFactoryRegistry.registerFactory(factory);
5812021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos			}
5912021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos			catch (...)
6012021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos			{
6112021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos				delete factory;
6212021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos				throw;
6312021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos			}
6412021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos		}
6512021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos	}
6612021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos
670e94e01a42e51498efc714634e2ad050ede9f3ecPyry Haulos	m_nativeDisplayFactoryRegistry.registerFactory(new win32::EGLNativeDisplayFactory(m_instance));
6812021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos	m_contextFactoryRegistry.registerFactory(new eglu::GLContextFactory(m_nativeDisplayFactoryRegistry));
6912021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos}
7012021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos
710e94e01a42e51498efc714634e2ad050ede9f3ecPyry HaulosPlatform::~Platform (void)
7212021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos{
7312021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos}
7412021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos
750e94e01a42e51498efc714634e2ad050ede9f3ecPyry Haulosbool Platform::processEvents (void)
7612021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos{
7712021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos	MSG msg;
7812021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos	while (PeekMessage(&msg, (HWND)-1, 0, 0, PM_REMOVE))
7912021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos	{
8012021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos		DispatchMessage(&msg);
8112021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos		if (msg.message == WM_QUIT)
8212021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos			return false;
8312021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos	}
8412021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos	return true;
8512021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos}
8612021ac26c6d6f8923f526bd7635dcf68e0c4061Pyry Haulos
870e94e01a42e51498efc714634e2ad050ede9f3ecPyry Haulos} // win32
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // tcu
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Create platform
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::Platform* createPlatform (void)
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
930e94e01a42e51498efc714634e2ad050ede9f3ecPyry Haulos	return new tcu::win32::Platform();
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
95