| #ifndef _TCUCOMMANDLINE_HPP |
| #define _TCUCOMMANDLINE_HPP |
| /*------------------------------------------------------------------------- |
| * drawElements Quality Program Tester Core |
| * ---------------------------------------- |
| * |
| * Copyright 2014 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| *//*! |
| * \file |
| * \brief Command line parsing. |
| *//*--------------------------------------------------------------------*/ |
| |
| #include "tcuDefs.hpp" |
| #include "deCommandLine.hpp" |
| #include "tcuTestCase.hpp" |
| #include "deUniquePtr.hpp" |
| |
| #include <string> |
| #include <vector> |
| #include <istream> |
| |
| namespace tcu |
| { |
| |
| /*--------------------------------------------------------------------*//*! |
| * \brief Run mode tells whether the test program should run the tests or |
| * dump out metadata about the tests. |
| *//*--------------------------------------------------------------------*/ |
| enum RunMode |
| { |
| RUNMODE_EXECUTE = 0, //! Test program executes the tests. |
| RUNMODE_DUMP_XML_CASELIST, //! Test program dumps the list of contained test cases in XML format. |
| RUNMODE_DUMP_TEXT_CASELIST, //! Test program dumps the list of contained test cases in plain-text format. |
| RUNMODE_DUMP_STDOUT_CASELIST, //! Test program dumps the list of contained test cases in plain-text format into stdout. |
| RUNMODE_VERIFY_AMBER_COHERENCY, //! Test program verifies that amber tests have coherent capability requirements |
| |
| RUNMODE_LAST |
| }; |
| |
| /*--------------------------------------------------------------------*//*! |
| * \brief Should graphical tests show rendering results on screen. |
| *//*--------------------------------------------------------------------*/ |
| enum WindowVisibility |
| { |
| WINDOWVISIBILITY_WINDOWED = 0, |
| WINDOWVISIBILITY_FULLSCREEN, |
| WINDOWVISIBILITY_HIDDEN, |
| |
| WINDOWVISIBILITY_LAST |
| }; |
| |
| /*--------------------------------------------------------------------*//*! |
| * \brief The type of rendering surface the tests should be executed on. |
| *//*--------------------------------------------------------------------*/ |
| enum SurfaceType |
| { |
| SURFACETYPE_WINDOW = 0, //!< Native window. |
| SURFACETYPE_OFFSCREEN_NATIVE, //!< Native offscreen surface, such as pixmap. |
| SURFACETYPE_OFFSCREEN_GENERIC, //!< Generic offscreen surface, such as pbuffer. |
| SURFACETYPE_FBO, //!< Framebuffer object. |
| |
| SURFACETYPE_LAST |
| }; |
| |
| /*--------------------------------------------------------------------*//*! |
| * \brief Screen rotation, always to clockwise direction. |
| *//*--------------------------------------------------------------------*/ |
| enum ScreenRotation |
| { |
| SCREENROTATION_UNSPECIFIED, //!< Use default / current orientation. |
| SCREENROTATION_0, //!< Set rotation to 0 degrees from baseline. |
| SCREENROTATION_90, |
| SCREENROTATION_180, |
| SCREENROTATION_270, |
| |
| SCREENROTATION_LAST |
| }; |
| |
| class CaseTreeNode; |
| class CasePaths; |
| class Archive; |
| |
| // Match a single path component against a pattern component that may contain *-wildcards. |
| bool matchWildcards(std::string::const_iterator patternStart, std::string::const_iterator patternEnd, |
| std::string::const_iterator pathStart, std::string::const_iterator pathEnd, bool allowPrefix); |
| |
| class CaseListFilter |
| { |
| public: |
| CaseListFilter(const de::cmdline::CommandLine &cmdLine, const tcu::Archive &archive); |
| CaseListFilter(void); |
| ~CaseListFilter(void); |
| |
| //! Check if test group is in supplied test case list. |
| bool checkTestGroupName(const char *groupName) const; |
| |
| //! Check if test case is in supplied test case list. |
| bool checkTestCaseName(const char *caseName) const; |
| |
| //! Check if test group passes the case fraction filter. |
| bool checkCaseFraction(int i, const std::string &testCaseName) const; |
| |
| //! Check if test case runner is of supplied type |
| bool checkRunnerType(tcu::TestRunnerType type) const |
| { |
| return ((m_runnerType & type) == m_runnerType); |
| } |
| |
| private: |
| CaseListFilter(const CaseListFilter &); // not allowed! |
| CaseListFilter &operator=(const CaseListFilter &); // not allowed! |
| |
| CaseTreeNode *m_caseTree; |
| de::MovePtr<const CasePaths> m_casePaths; |
| std::vector<int> m_caseFraction; |
| de::MovePtr<const CasePaths> m_caseFractionMandatoryTests; |
| tcu::TestRunnerType m_runnerType; |
| }; |
| |
| /*--------------------------------------------------------------------*//*! |
| * \brief Test command line |
| * |
| * CommandLine handles argument parsing and provides convinience functions |
| * for querying test parameters. |
| *//*--------------------------------------------------------------------*/ |
| class CommandLine |
| { |
| public: |
| CommandLine(void); |
| CommandLine(int argc, const char *const *argv); |
| explicit CommandLine(const std::string &cmdLine); |
| virtual ~CommandLine(void); |
| |
| bool parse(int argc, const char *const *argv); |
| bool parse(const std::string &cmdLine); |
| |
| const std::string &getApplicationName(void) const; |
| const std::string &getInitialCmdLine(void) const; |
| |
| //! Is quiet mode active? |
| bool quietMode(void) const; |
| |
| //! Get log file name (--deqp-log-filename) |
| const char *getLogFileName(void) const; |
| |
| //! Get logging flags |
| uint32_t getLogFlags(void) const; |
| |
| //! Get run mode (--deqp-runmode) |
| RunMode getRunMode(void) const; |
| |
| //! Get caselist dump target file pattern (--deqp-caselist-export-file) |
| const char *getCaseListExportFile(void) const; |
| |
| //! Get default window visibility (--deqp-visibility) |
| WindowVisibility getVisibility(void) const; |
| |
| //! Get watchdog enable status (--deqp-watchdog) |
| bool isWatchDogEnabled(void) const; |
| |
| //! Get crash handling enable status (--deqp-crashhandler) |
| bool isCrashHandlingEnabled(void) const; |
| |
| //! Get base seed for randomization (--deqp-base-seed) |
| int getBaseSeed(void) const; |
| |
| //! Get test iteration count (--deqp-test-iteration-count) |
| int getTestIterationCount(void) const; |
| |
| //! Get rendering target width (--deqp-surface-width) |
| int getSurfaceWidth(void) const; |
| |
| //! Get rendering target height (--deqp-surface-height) |
| int getSurfaceHeight(void) const; |
| |
| //! Get rendering taget type (--deqp-surface-type) |
| SurfaceType getSurfaceType(void) const; |
| |
| //! Get screen rotation (--deqp-screen-rotation) |
| ScreenRotation getScreenRotation(void) const; |
| |
| //! Get GL context factory name (--deqp-gl-context-type) |
| const char *getGLContextType(void) const; |
| |
| //! Get GL config ID (--deqp-gl-config-id) |
| int getGLConfigId(void) const; |
| |
| //! Get GL config name (--deqp-gl-config-name) |
| const char *getGLConfigName(void) const; |
| |
| //! Get GL context flags (--deqp-gl-context-flags) |
| const char *getGLContextFlags(void) const; |
| |
| //! Get OpenCL platform ID (--deqp-cl-platform-id) |
| int getCLPlatformId(void) const; |
| |
| //! Get OpenCL device IDs (--deqp-cl-device-ids) |
| void getCLDeviceIds(std::vector<int> &deviceIds) const |
| { |
| deviceIds = getCLDeviceIds(); |
| } |
| const std::vector<int> &getCLDeviceIds(void) const; |
| |
| //! Get extra OpenCL program build options (--deqp-cl-build-options) |
| const char *getCLBuildOptions(void) const; |
| |
| //! Get EGL native display factory (--deqp-egl-display-type) |
| const char *getEGLDisplayType(void) const; |
| |
| //! Get EGL native window factory (--deqp-egl-window-type) |
| const char *getEGLWindowType(void) const; |
| |
| //! Get EGL native pixmap factory (--deqp-egl-pixmap-type) |
| const char *getEGLPixmapType(void) const; |
| |
| //! Get Vulkan device ID (--deqp-vk-device-id) |
| int getVKDeviceId(void) const; |
| |
| //! Get Vulkan device group ID (--deqp-vk-device-group-id) |
| int getVKDeviceGroupId(void) const; |
| |
| //! Enable development-time test case validation checks |
| bool isValidationEnabled(void) const; |
| |
| //! Enable SPIRV validation checks (--deqp-spirv-validation) |
| bool isSpirvValidationEnabled(void) const; |
| |
| //! Print validation errors to standard error or keep them in the log only. |
| bool printValidationErrors(void) const; |
| |
| //! Enable runtime check for duplicate case names in test hierarchy |
| bool checkDuplicateCaseNames(void) const; |
| |
| //! Log of decompiled SPIR-V shader source (--deqp-log-decompiled-spirv) |
| bool isLogDecompiledSpirvEnabled(void) const; |
| |
| //! Should we run tests that exhaust memory (--deqp-test-oom) |
| bool isOutOfMemoryTestEnabled(void) const; |
| |
| //! Should the shader cache be enabled (--deqp-shadercache) |
| bool isShadercacheEnabled(void) const; |
| |
| //! Get the filename for shader cache (--deqp-shadercache-filename) |
| const char *getShaderCacheFilename(void) const; |
| |
| //! Should the shader cache be truncated before run (--deqp-shadercache-truncate) |
| bool isShaderCacheTruncateEnabled(void) const; |
| |
| //! Should the shader cache use inter process communication (IPC) (--deqp-shadercache-ipc) |
| bool isShaderCacheIPCEnabled(void) const; |
| |
| //! Get shader optimization recipe (--deqp-optimization-recipe) |
| int getOptimizationRecipe(void) const; |
| |
| //! Enable optimizing of spir-v (--deqp-optimize-spirv) |
| bool isSpirvOptimizationEnabled(void) const; |
| |
| //! Enable RenderDoc frame markers (--deqp-renderdoc) |
| bool isRenderDocEnabled(void) const; |
| |
| //! Get waiver file name (--deqp-waiver-file) |
| const char *getWaiverFileName(void) const; |
| |
| //! Get case list fraction |
| const std::vector<int> &getCaseFraction(void) const; |
| |
| //! Get must-list filename |
| const char *getCaseFractionMandatoryTests(void) const; |
| |
| //! Get archive directory path |
| const char *getArchiveDir(void) const; |
| |
| //! Get runner type (--deqp-runner-type) |
| tcu::TestRunnerType getRunnerType(void) const; |
| |
| //! Should the run be terminated on first failure (--deqp-terminate-on-fail) |
| bool isTerminateOnFailEnabled(void) const; |
| |
| //! Should the run be terminated on first device lost (--deqp-terminate-on-device-lost) |
| bool isTerminateOnDeviceLostEnabled(void) const; |
| |
| //! Start as subprocess ( Vulkan SC ) |
| bool isSubProcess(void) const; |
| |
| //! Define default number of tests performed in main process ( Vulkan SC ) |
| int getSubprocessTestCount(void) const; |
| |
| //! Config file defining number of tests performed in subprocess for specific test branches |
| const char *getSubprocessConfigFile(void) const; |
| |
| //! Optional server address that will be responsible for (among other things) compiling shaders ( Vulkan SC ) |
| const char *getServerAddress(void) const; |
| |
| //! Define minimum size of a single command pool ( Vulkan SC ) |
| int getCommandPoolMinSize(void) const; |
| |
| //! Define minimum size of a single command buffer ( Vulkan SC ) |
| int getCommandBufferMinSize(void) const; |
| |
| //! Define default size for single command in command buffer ( Vulkan SC ) |
| int getCommandDefaultSize(void) const; |
| |
| //! Define default size for single pipeline ( Vulkan SC ) |
| int getPipelineDefaultSize(void) const; |
| |
| //! Path to offline pipeline compiler executable |
| const char *getPipelineCompilerPath(void) const; |
| |
| //! Directory containing input and output pipeline compiler files |
| const char *getPipelineCompilerDataDir(void) const; |
| |
| //! Additional args for offline pipeline compiler |
| const char *getPipelineCompilerArgs(void) const; |
| |
| //! Output pipeline cache file produced by offline pipeline compiler |
| const char *getPipelineCompilerOutputFile(void) const; |
| |
| //! Log file for offline pipeline compiler |
| const char *getPipelineCompilerLogFile(void) const; |
| |
| //! Prefix for offline pipeline compiler input files |
| const char *getPipelineCompilerFilePrefix(void) const; |
| |
| //! Path to Vulkan library (e.g. loader library vulkan-1.dll) |
| const char *getVkLibraryPath(void) const; |
| |
| //! File that provides a default set of application parameters |
| const char *getAppParamsInputFilePath(void) const; |
| |
| //! Perform tests for devices implementing compute-only functionality |
| bool isComputeOnly(void) const; |
| |
| /*--------------------------------------------------------------------*//*! |
| * \brief Creates case list filter |
| * \param archive Resources |
| * |
| * Creates case list filter based on one of the following parameters: |
| * |
| * --deqp-case |
| * --deqp-caselist |
| * --deqp-caselist-file |
| * --deqp-caselist-resource |
| * --deqp-stdin-caselist |
| * |
| * Throws std::invalid_argument if parsing fails. |
| *//*--------------------------------------------------------------------*/ |
| de::MovePtr<CaseListFilter> createCaseListFilter(const tcu::Archive &archive) const; |
| |
| protected: |
| const de::cmdline::CommandLine &getCommandLine(void) const; |
| |
| private: |
| CommandLine(const CommandLine &); // not allowed! |
| CommandLine &operator=(const CommandLine &); // not allowed! |
| |
| void clear(void); |
| |
| virtual void registerExtendedOptions(de::cmdline::Parser &parser); |
| |
| std::string m_appName; |
| de::cmdline::CommandLine m_cmdLine; |
| uint32_t m_logFlags; |
| |
| std::string m_initialCmdLine; |
| bool m_hadHelpSpecified; |
| }; |
| |
| } // namespace tcu |
| |
| #endif // _TCUCOMMANDLINE_HPP |