1 #ifndef _TCUCOMMANDLINE_HPP 2 #define _TCUCOMMANDLINE_HPP 3 /*------------------------------------------------------------------------- 4 * drawElements Quality Program Tester Core 5 * ---------------------------------------- 6 * 7 * Copyright 2014 The Android Open Source Project 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 *//*! 22 * \file 23 * \brief Command line parsing. 24 *//*--------------------------------------------------------------------*/ 25 26 #include "tcuDefs.hpp" 27 #include "deCommandLine.hpp" 28 #include "deUniquePtr.hpp" 29 30 #include <string> 31 #include <vector> 32 #include <istream> 33 34 namespace tcu 35 { 36 37 /*--------------------------------------------------------------------*//*! 38 * \brief Run mode tells whether the test program should run the tests or 39 * dump out metadata about the tests. 40 *//*--------------------------------------------------------------------*/ 41 enum RunMode 42 { 43 RUNMODE_EXECUTE = 0, //! Test program executes the tests. 44 RUNMODE_DUMP_XML_CASELIST, //! Test program dumps the list of contained test cases in XML format. 45 RUNMODE_DUMP_TEXT_CASELIST, //! Test program dumps the list of contained test cases in plain-text format. 46 RUNMODE_DUMP_STDOUT_CASELIST, //! Test program dumps the list of contained test cases in plain-text format into stdout. 47 48 RUNMODE_LAST 49 }; 50 51 /*--------------------------------------------------------------------*//*! 52 * \brief Should graphical tests show rendering results on screen. 53 *//*--------------------------------------------------------------------*/ 54 enum WindowVisibility 55 { 56 WINDOWVISIBILITY_WINDOWED = 0, 57 WINDOWVISIBILITY_FULLSCREEN, 58 WINDOWVISIBILITY_HIDDEN, 59 60 WINDOWVISIBILITY_LAST 61 }; 62 63 /*--------------------------------------------------------------------*//*! 64 * \brief The type of rendering surface the tests should be executed on. 65 *//*--------------------------------------------------------------------*/ 66 enum SurfaceType 67 { 68 SURFACETYPE_WINDOW = 0, //!< Native window. 69 SURFACETYPE_OFFSCREEN_NATIVE, //!< Native offscreen surface, such as pixmap. 70 SURFACETYPE_OFFSCREEN_GENERIC, //!< Generic offscreen surface, such as pbuffer. 71 SURFACETYPE_FBO, //!< Framebuffer object. 72 73 SURFACETYPE_LAST 74 }; 75 76 /*--------------------------------------------------------------------*//*! 77 * \brief Screen rotation, always to clockwise direction. 78 *//*--------------------------------------------------------------------*/ 79 enum ScreenRotation 80 { 81 SCREENROTATION_UNSPECIFIED, //!< Use default / current orientation. 82 SCREENROTATION_0, //!< Set rotation to 0 degrees from baseline. 83 SCREENROTATION_90, 84 SCREENROTATION_180, 85 SCREENROTATION_270, 86 87 SCREENROTATION_LAST 88 }; 89 90 class CaseTreeNode; 91 class CasePaths; 92 class Archive; 93 94 class CaseListFilter 95 { 96 public: 97 CaseListFilter (const de::cmdline::CommandLine& cmdLine, const tcu::Archive& archive); 98 CaseListFilter (void); 99 ~CaseListFilter (void); 100 101 //! Check if test group is in supplied test case list. 102 bool checkTestGroupName (const char* groupName) const; 103 104 //! Check if test case is in supplied test case list. 105 bool checkTestCaseName (const char* caseName) const; 106 107 private: 108 CaseListFilter (const CaseListFilter&); // not allowed! 109 CaseListFilter& operator= (const CaseListFilter&); // not allowed! 110 111 CaseTreeNode* m_caseTree; 112 de::MovePtr<const CasePaths> m_casePaths; 113 }; 114 115 /*--------------------------------------------------------------------*//*! 116 * \brief Test command line 117 * 118 * CommandLine handles argument parsing and provides convinience functions 119 * for querying test parameters. 120 *//*--------------------------------------------------------------------*/ 121 class CommandLine 122 { 123 public: 124 CommandLine (void); 125 CommandLine (int argc, const char* const* argv); 126 explicit CommandLine (const std::string& cmdLine); 127 ~CommandLine (void); 128 129 bool parse (int argc, const char* const* argv); 130 bool parse (const std::string& cmdLine); 131 132 //! Get log file name (--deqp-log-filename) 133 const char* getLogFileName (void) const; 134 135 //! Get logging flags 136 deUint32 getLogFlags (void) const; 137 138 //! Get run mode (--deqp-runmode) 139 RunMode getRunMode (void) const; 140 141 //! Get caselist dump target file pattern (--deqp-caselist-export-file) 142 const char* getCaseListExportFile (void) const; 143 144 //! Get default window visibility (--deqp-visibility) 145 WindowVisibility getVisibility (void) const; 146 147 //! Get watchdog enable status (--deqp-watchdog) 148 bool isWatchDogEnabled (void) const; 149 150 //! Get crash handling enable status (--deqp-crashhandler) 151 bool isCrashHandlingEnabled (void) const; 152 153 //! Get base seed for randomization (--deqp-base-seed) 154 int getBaseSeed (void) const; 155 156 //! Get test iteration count (--deqp-test-iteration-count) 157 int getTestIterationCount (void) const; 158 159 //! Get rendering target width (--deqp-surface-width) 160 int getSurfaceWidth (void) const; 161 162 //! Get rendering target height (--deqp-surface-height) 163 int getSurfaceHeight (void) const; 164 165 //! Get rendering taget type (--deqp-surface-type) 166 SurfaceType getSurfaceType (void) const; 167 168 //! Get screen rotation (--deqp-screen-rotation) 169 ScreenRotation getScreenRotation (void) const; 170 171 //! Get GL context factory name (--deqp-gl-context-type) 172 const char* getGLContextType (void) const; 173 174 //! Get GL config ID (--deqp-gl-config-id) 175 int getGLConfigId (void) const; 176 177 //! Get GL config name (--deqp-gl-config-name) 178 const char* getGLConfigName (void) const; 179 180 //! Get GL context flags (--deqp-gl-context-flags) 181 const char* getGLContextFlags (void) const; 182 183 //! Get OpenCL platform ID (--deqp-cl-platform-id) 184 int getCLPlatformId (void) const; 185 186 //! Get OpenCL device IDs (--deqp-cl-device-ids) getCLDeviceIds(std::vector<int> & deviceIds) const187 void getCLDeviceIds (std::vector<int>& deviceIds) const { deviceIds = getCLDeviceIds(); } 188 const std::vector<int>& getCLDeviceIds (void) const; 189 190 //! Get extra OpenCL program build options (--deqp-cl-build-options) 191 const char* getCLBuildOptions (void) const; 192 193 //! Get EGL native display factory (--deqp-egl-display-type) 194 const char* getEGLDisplayType (void) const; 195 196 //! Get EGL native window factory (--deqp-egl-window-type) 197 const char* getEGLWindowType (void) const; 198 199 //! Get EGL native pixmap factory (--deqp-egl-pixmap-type) 200 const char* getEGLPixmapType (void) const; 201 202 //! Get Vulkan device ID (--deqp-vk-device-id) 203 int getVKDeviceId (void) const; 204 205 //! Get Vulkan device group ID (--deqp-vk-device-group-id) 206 int getVKDeviceGroupId (void) const; 207 208 //! Enable development-time test case validation checks 209 bool isValidationEnabled (void) const; 210 211 //! Should we run tests that exhaust memory (--deqp-test-oom) 212 bool isOutOfMemoryTestEnabled (void) const; 213 214 //! Should the shader cache be enabled (--deqp-shadercache) 215 bool isShadercacheEnabled (void) const; 216 217 //! Get the filename for shader cache (--deqp-shadercache-filename) 218 const char* getShaderCacheFilename (void) const; 219 220 //! Should the shader cache be truncated before run (--deqp-shadercache-truncate) 221 bool isShaderCacheTruncateEnabled (void) const; 222 223 //! Get shader optimization recipe (--deqp-optimization-recipe) 224 int getOptimizationRecipe (void) const; 225 226 //! Enable optimizing of spir-v (--deqp-optimize-spirv) 227 bool isSpirvOptimizationEnabled (void) const; 228 229 //! Enable RenderDoc frame markers (--deqp-renderdoc) 230 bool isRenderDocEnabled (void) const; 231 232 /*--------------------------------------------------------------------*//*! 233 * \brief Creates case list filter 234 * \param archive Resources 235 * 236 * Creates case list filter based on one of the following parameters: 237 * 238 * --deqp-case 239 * --deqp-caselist 240 * --deqp-caselist-file 241 * --deqp-caselist-resource 242 * --deqp-stdin-caselist 243 * 244 * Throws std::invalid_argument if parsing fails. 245 *//*--------------------------------------------------------------------*/ 246 de::MovePtr<CaseListFilter> createCaseListFilter (const tcu::Archive& archive) const; 247 248 protected: 249 const de::cmdline::CommandLine& getCommandLine (void) const; 250 251 private: 252 CommandLine (const CommandLine&); // not allowed! 253 CommandLine& operator= (const CommandLine&); // not allowed! 254 255 void clear (void); 256 257 virtual void registerExtendedOptions (de::cmdline::Parser& parser); 258 259 de::cmdline::CommandLine m_cmdLine; 260 deUint32 m_logFlags; 261 }; 262 263 } // tcu 264 265 #endif // _TCUCOMMANDLINE_HPP 266