1e5c31af7Sopenharmony_ci/*------------------------------------------------------------------------- 2e5c31af7Sopenharmony_ci * OpenGL Conformance Test Suite 3e5c31af7Sopenharmony_ci * ----------------------------- 4e5c31af7Sopenharmony_ci * 5e5c31af7Sopenharmony_ci * Copyright (c) 2016 Google Inc. 6e5c31af7Sopenharmony_ci * Copyright (c) 2016 The Khronos Group Inc. 7e5c31af7Sopenharmony_ci * 8e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 9e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License. 10e5c31af7Sopenharmony_ci * You may obtain a copy of the License at 11e5c31af7Sopenharmony_ci * 12e5c31af7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 13e5c31af7Sopenharmony_ci * 14e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 15e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 16e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and 18e5c31af7Sopenharmony_ci * limitations under the License. 19e5c31af7Sopenharmony_ci * 20e5c31af7Sopenharmony_ci */ /*! 21e5c31af7Sopenharmony_ci * \file 22e5c31af7Sopenharmony_ci * \brief CTS runner main(). 23e5c31af7Sopenharmony_ci */ /*-------------------------------------------------------------------*/ 24e5c31af7Sopenharmony_ci 25e5c31af7Sopenharmony_ci#include "deString.h" 26e5c31af7Sopenharmony_ci#include "deUniquePtr.hpp" 27e5c31af7Sopenharmony_ci#include "glcTestRunner.hpp" 28e5c31af7Sopenharmony_ci#include "tcuPlatform.hpp" 29e5c31af7Sopenharmony_ci#include "tcuResource.hpp" 30e5c31af7Sopenharmony_ci 31e5c31af7Sopenharmony_ci#include <cstdio> 32e5c31af7Sopenharmony_ci#include <cstdlib> 33e5c31af7Sopenharmony_ci 34e5c31af7Sopenharmony_ci// See tcuMain.cpp 35e5c31af7Sopenharmony_citcu::Platform* createPlatform(void); 36e5c31af7Sopenharmony_ci 37e5c31af7Sopenharmony_cistruct CommandLine 38e5c31af7Sopenharmony_ci{ 39e5c31af7Sopenharmony_ci CommandLine(void) : runType(glu::ApiType::es(2, 0)), flags(0) 40e5c31af7Sopenharmony_ci { 41e5c31af7Sopenharmony_ci } 42e5c31af7Sopenharmony_ci 43e5c31af7Sopenharmony_ci glu::ApiType runType; 44e5c31af7Sopenharmony_ci std::string waiverPath; 45e5c31af7Sopenharmony_ci std::string dstLogDir; 46e5c31af7Sopenharmony_ci deUint32 flags; 47e5c31af7Sopenharmony_ci}; 48e5c31af7Sopenharmony_ci 49e5c31af7Sopenharmony_cistatic bool parseCommandLine(CommandLine& cmdLine, int argc, const char* const* argv) 50e5c31af7Sopenharmony_ci{ 51e5c31af7Sopenharmony_ci for (int argNdx = 1; argNdx < argc; argNdx++) 52e5c31af7Sopenharmony_ci { 53e5c31af7Sopenharmony_ci const char* arg = argv[argNdx]; 54e5c31af7Sopenharmony_ci 55e5c31af7Sopenharmony_ci if (deStringBeginsWith(arg, "--type=")) 56e5c31af7Sopenharmony_ci { 57e5c31af7Sopenharmony_ci static const struct 58e5c31af7Sopenharmony_ci { 59e5c31af7Sopenharmony_ci const char* name; 60e5c31af7Sopenharmony_ci glu::ApiType runType; 61e5c31af7Sopenharmony_ci } runTypes[] = { { "es2", glu::ApiType::es(2, 0) }, { "es3", glu::ApiType::es(3, 0) }, 62e5c31af7Sopenharmony_ci { "es31", glu::ApiType::es(3, 1) }, { "es32", glu::ApiType::es(3, 2) }, 63e5c31af7Sopenharmony_ci { "gl30", glu::ApiType::core(3, 0) }, { "gl31", glu::ApiType::core(3, 1) }, 64e5c31af7Sopenharmony_ci { "gl32", glu::ApiType::core(3, 2) }, { "gl33", glu::ApiType::core(3, 3) }, 65e5c31af7Sopenharmony_ci { "gl40", glu::ApiType::core(4, 0) }, { "gl41", glu::ApiType::core(4, 1) }, 66e5c31af7Sopenharmony_ci { "gl42", glu::ApiType::core(4, 2) }, { "gl43", glu::ApiType::core(4, 3) }, 67e5c31af7Sopenharmony_ci { "gl44", glu::ApiType::core(4, 4) }, { "gl45", glu::ApiType::core(4, 5) }, 68e5c31af7Sopenharmony_ci { "gl46", glu::ApiType::core(4, 6) } }; 69e5c31af7Sopenharmony_ci 70e5c31af7Sopenharmony_ci const char* value = arg + 7; 71e5c31af7Sopenharmony_ci int ndx = 0; 72e5c31af7Sopenharmony_ci 73e5c31af7Sopenharmony_ci for (; ndx < DE_LENGTH_OF_ARRAY(runTypes); ndx++) 74e5c31af7Sopenharmony_ci { 75e5c31af7Sopenharmony_ci if (deStringEqual(runTypes[ndx].name, value)) 76e5c31af7Sopenharmony_ci { 77e5c31af7Sopenharmony_ci cmdLine.runType = runTypes[ndx].runType; 78e5c31af7Sopenharmony_ci break; 79e5c31af7Sopenharmony_ci } 80e5c31af7Sopenharmony_ci } 81e5c31af7Sopenharmony_ci 82e5c31af7Sopenharmony_ci if (ndx >= DE_LENGTH_OF_ARRAY(runTypes)) 83e5c31af7Sopenharmony_ci return false; 84e5c31af7Sopenharmony_ci } 85e5c31af7Sopenharmony_ci else if (deStringBeginsWith(arg, "--waivers=")) 86e5c31af7Sopenharmony_ci { 87e5c31af7Sopenharmony_ci const char* value = arg + 10; 88e5c31af7Sopenharmony_ci cmdLine.waiverPath = value; 89e5c31af7Sopenharmony_ci } 90e5c31af7Sopenharmony_ci else if (deStringBeginsWith(arg, "--logdir=")) 91e5c31af7Sopenharmony_ci { 92e5c31af7Sopenharmony_ci const char* value = arg + 9; 93e5c31af7Sopenharmony_ci cmdLine.dstLogDir = value; 94e5c31af7Sopenharmony_ci } 95e5c31af7Sopenharmony_ci else if (deStringBeginsWith(arg, "--summary")) 96e5c31af7Sopenharmony_ci { 97e5c31af7Sopenharmony_ci cmdLine.flags = glcts::TestRunner::PRINT_SUMMARY; 98e5c31af7Sopenharmony_ci } 99e5c31af7Sopenharmony_ci else if (deStringEqual(arg, "--verbose")) 100e5c31af7Sopenharmony_ci cmdLine.flags = glcts::TestRunner::VERBOSE_ALL; 101e5c31af7Sopenharmony_ci else 102e5c31af7Sopenharmony_ci return false; 103e5c31af7Sopenharmony_ci } 104e5c31af7Sopenharmony_ci 105e5c31af7Sopenharmony_ci return true; 106e5c31af7Sopenharmony_ci} 107e5c31af7Sopenharmony_ci 108e5c31af7Sopenharmony_cistatic void printHelp(const char* binName) 109e5c31af7Sopenharmony_ci{ 110e5c31af7Sopenharmony_ci printf("%s:\n", binName); 111e5c31af7Sopenharmony_ci printf(" --type=[esN[M]|glNM] Conformance test run type. Choose from\n"); 112e5c31af7Sopenharmony_ci printf(" ES: es2, es3, es31, es32\n"); 113e5c31af7Sopenharmony_ci printf(" GL: gl30, gl31, gl32, gl33, gl40, gl41, gl42, gl43, gl44, gl45, gl46\n"); 114e5c31af7Sopenharmony_ci printf(" --waivers=[path] Path to xml file containing waived tests\n"); 115e5c31af7Sopenharmony_ci printf(" --logdir=[path] Destination directory for log files\n"); 116e5c31af7Sopenharmony_ci printf(" --summary Print summary without running the tests\n"); 117e5c31af7Sopenharmony_ci printf(" --verbose Print out and log more information\n"); 118e5c31af7Sopenharmony_ci} 119e5c31af7Sopenharmony_ci 120e5c31af7Sopenharmony_ciint main(int argc, char** argv) 121e5c31af7Sopenharmony_ci{ 122e5c31af7Sopenharmony_ci CommandLine cmdLine; 123e5c31af7Sopenharmony_ci int exitStatus = EXIT_SUCCESS; 124e5c31af7Sopenharmony_ci 125e5c31af7Sopenharmony_ci if (!parseCommandLine(cmdLine, argc, argv)) 126e5c31af7Sopenharmony_ci { 127e5c31af7Sopenharmony_ci printHelp(argv[0]); 128e5c31af7Sopenharmony_ci return -1; 129e5c31af7Sopenharmony_ci } 130e5c31af7Sopenharmony_ci 131e5c31af7Sopenharmony_ci try 132e5c31af7Sopenharmony_ci { 133e5c31af7Sopenharmony_ci de::UniquePtr<tcu::Platform> platform(createPlatform()); 134e5c31af7Sopenharmony_ci tcu::DirArchive archive("."); 135e5c31af7Sopenharmony_ci glcts::TestRunner runner(static_cast<tcu::Platform&>(*platform.get()), archive, cmdLine.waiverPath.c_str(), 136e5c31af7Sopenharmony_ci cmdLine.dstLogDir.c_str(), cmdLine.runType, cmdLine.flags); 137e5c31af7Sopenharmony_ci 138e5c31af7Sopenharmony_ci for (;;) 139e5c31af7Sopenharmony_ci { 140e5c31af7Sopenharmony_ci if (!runner.iterate()) 141e5c31af7Sopenharmony_ci { 142e5c31af7Sopenharmony_ci if (!runner.isConformant()) 143e5c31af7Sopenharmony_ci { 144e5c31af7Sopenharmony_ci exitStatus = EXIT_FAILURE; 145e5c31af7Sopenharmony_ci } 146e5c31af7Sopenharmony_ci 147e5c31af7Sopenharmony_ci break; 148e5c31af7Sopenharmony_ci } 149e5c31af7Sopenharmony_ci } 150e5c31af7Sopenharmony_ci } 151e5c31af7Sopenharmony_ci catch (const std::exception& e) 152e5c31af7Sopenharmony_ci { 153e5c31af7Sopenharmony_ci printf("ERROR: %s\n", e.what()); 154e5c31af7Sopenharmony_ci return -1; 155e5c31af7Sopenharmony_ci } 156e5c31af7Sopenharmony_ci 157e5c31af7Sopenharmony_ci return exitStatus; 158e5c31af7Sopenharmony_ci} 159