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