tcuWin32Platform.cpp revision 8852c82a1ffa4760985c17cc6875d5d521daf343
13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program Tester Core
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ----------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 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"
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#if defined(DEQP_SUPPORT_EGL)
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#	include "tcuWin32EGLNativeDisplayFactory.hpp"
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#	include "egluGLContextFactory.hpp"
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace tcu
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
353c827367444ee418f129b2c238299f49d3264554Jarkko PoyryWin32Platform::Win32Platform (void)
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: m_instance(GetModuleHandle(NULL))
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Set process priority to lower.
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	SetPriorityClass(GetCurrentProcess(), BELOW_NORMAL_PRIORITY_CLASS);
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
418852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry	{
428852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry		WGLContextFactory* factory = DE_NULL;
438852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry
448852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry		try
458852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry		{
468852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry			factory = new WGLContextFactory(m_instance);
478852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry		}
488852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry		catch (const std::exception& e)
498852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry		{
508852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry			print("Warning: WGL not supported: %s\n", e.what());
518852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry		}
528852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry
538852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry		if (factory)
548852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry		{
558852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry			try
568852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry			{
578852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry				m_contextFactoryRegistry.registerFactory(factory);
588852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry			}
598852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry			catch (...)
608852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry			{
618852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry				delete factory;
628852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry				throw;
638852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry			}
648852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry		}
658852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry	}
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#if defined(DEQP_SUPPORT_EGL)
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_nativeDisplayFactoryRegistry.registerFactory(new Win32EGLNativeDisplayFactory(m_instance));
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_contextFactoryRegistry.registerFactory(new eglu::GLContextFactory(m_nativeDisplayFactoryRegistry));
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
733c827367444ee418f129b2c238299f49d3264554Jarkko PoyryWin32Platform::~Win32Platform (void)
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool Win32Platform::processEvents (void)
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	MSG msg;
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	while (PeekMessage(&msg, (HWND)-1, 0, 0, PM_REMOVE))
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		DispatchMessage(&msg);
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (msg.message == WM_QUIT)
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return false;
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return true;
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // tcu
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Create platform
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::Platform* createPlatform (void)
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return new tcu::Win32Platform();
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
96