16ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang// 26ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved. 36ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang// Use of this source code is governed by a BSD-style license that can be 46ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang// found in the LICENSE file. 56ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang// 66ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang 76ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang#include "gles_conformance_tests.h" 86ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang 96ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang#include "gtest/gtest.h" 106ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang 116ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang#include <EGL/egl.h> 126ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang#include <EGL/eglext.h> 136ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang 146ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang#include <map> 156ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang#include <string> 166ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang#include <vector> 176ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang 186ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang#define CONFORMANCE_TESTS_ES2 2 196ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang#define CONFORMANCE_TESTS_ES3 3 206ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang 216ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Langint main(int argc, char** argv) 226ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang{ 236ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang testing::InitGoogleTest(&argc, argv); 246ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang 256ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang typedef std::pair<std::string, EGLNativeDisplayType> NameDisplayTypePair; 266ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang typedef std::map<std::string, EGLNativeDisplayType> DisplayTypeMap; 276ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang DisplayTypeMap allDisplays; 286ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang 296ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang#if CONFORMANCE_TESTS_TYPE == CONFORMANCE_TESTS_ES2 306ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang allDisplays["d3d9"] = EGL_DEFAULT_DISPLAY; 316ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang allDisplays["d3d11"] = EGL_D3D11_ONLY_DISPLAY_ANGLE; 326ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang#elif CONFORMANCE_TESTS_TYPE == CONFORMANCE_TESTS_ES3 336ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang allDisplays["d3d11"] = EGL_D3D11_ONLY_DISPLAY_ANGLE; 346ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang#else 356ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang# error "Unknown CONFORMANCE_TESTS_TYPE" 366ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang#endif 376ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang 386ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang // Iterate through the command line arguments and check if they are config names 396ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang std::vector<NameDisplayTypePair> requestedDisplays; 406ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang for (size_t i = 1; i < static_cast<size_t>(argc); i++) 416ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang { 426ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang DisplayTypeMap::const_iterator iter = allDisplays.find(argv[i]); 436ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang if (iter != allDisplays.end()) 446ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang { 456ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang requestedDisplays.push_back(*iter); 466ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang } 476ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang } 486ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang 496ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang // If no configs were requested, run them all 506ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang if (requestedDisplays.empty()) 516ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang { 526ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang for (DisplayTypeMap::const_iterator i = allDisplays.begin(); i != allDisplays.end(); i++) 536ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang { 546ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang requestedDisplays.push_back(*i); 556ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang } 566ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang } 576ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang 586ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang // Run each requested config 596ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang int rt = 0; 606ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang for (size_t i = 0; i < requestedDisplays.size(); i++) 616ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang { 626ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang ConformanceConfig config = { 64, 64, requestedDisplays[i].second }; 636ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang SetCurrentConfig(config); 646ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang 656ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang std::cout << "Running test configuration \"" << requestedDisplays[i].first << "\".\n"; 666ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang 676ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang rt |= RUN_ALL_TESTS(); 686ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang } 696ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang 706ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang return rt; 716ba49d9460a0071f1e95ba09a428addb9e3931b0Geoff Lang} 72