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