• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
33 namespace tcu
34 {
35 
36 /*--------------------------------------------------------------------*//*!
37  * \brief Run mode tells whether the test program should run the tests or
38  *		  dump out metadata about the tests.
39  *//*--------------------------------------------------------------------*/
40 enum RunMode
41 {
42 	RUNMODE_EXECUTE = 0,			//! Test program executes the tests.
43 	RUNMODE_DUMP_XML_CASELIST,		//! Test program dumps the list of contained test cases in XML format.
44 	RUNMODE_DUMP_TEXT_CASELIST,		//! Test program dumps the list of contained test cases in plain-text format.
45 	RUNMODE_DUMP_STDOUT_CASELIST,	//! Test program dumps the list of contained test cases in plain-text format into stdout.
46 
47 	RUNMODE_LAST
48 };
49 
50 /*--------------------------------------------------------------------*//*!
51  * \brief Should graphical tests show rendering results on screen.
52  *//*--------------------------------------------------------------------*/
53 enum WindowVisibility
54 {
55 	WINDOWVISIBILITY_WINDOWED = 0,
56 	WINDOWVISIBILITY_FULLSCREEN,
57 	WINDOWVISIBILITY_HIDDEN,
58 
59 	WINDOWVISIBILITY_LAST
60 };
61 
62 /*--------------------------------------------------------------------*//*!
63  * \brief The type of rendering surface the tests should be executed on.
64  *//*--------------------------------------------------------------------*/
65 enum SurfaceType
66 {
67 	SURFACETYPE_WINDOW = 0,			//!< Native window.
68 	SURFACETYPE_OFFSCREEN_NATIVE,	//!< Native offscreen surface, such as pixmap.
69 	SURFACETYPE_OFFSCREEN_GENERIC,	//!< Generic offscreen surface, such as pbuffer.
70 	SURFACETYPE_FBO,				//!< Framebuffer object.
71 
72 	SURFACETYPE_LAST
73 };
74 
75 /*--------------------------------------------------------------------*//*!
76  * \brief Screen rotation, always to clockwise direction.
77  *//*--------------------------------------------------------------------*/
78 enum ScreenRotation
79 {
80 	SCREENROTATION_UNSPECIFIED,		//!< Use default / current orientation.
81 	SCREENROTATION_0,				//!< Set rotation to 0 degrees from baseline.
82 	SCREENROTATION_90,
83 	SCREENROTATION_180,
84 	SCREENROTATION_270,
85 
86 	SCREENROTATION_LAST
87 };
88 
89 class CaseTreeNode;
90 class CasePaths;
91 
92 /*--------------------------------------------------------------------*//*!
93  * \brief Test command line
94  *
95  * CommandLine handles argument parsing and provides convinience functions
96  * for querying test parameters.
97  *//*--------------------------------------------------------------------*/
98 class CommandLine
99 {
100 public:
101 									CommandLine					(void);
102 									CommandLine					(int argc, const char* const* argv);
103 	explicit						CommandLine					(const std::string& cmdLine);
104 									~CommandLine				(void);
105 
106 	bool							parse						(int argc, const char* const* argv);
107 	bool							parse						(const std::string& cmdLine);
108 
109 	//! Get log file name (--deqp-log-filename)
110 	const char*						getLogFileName				(void) const;
111 
112 	//! Get logging flags
113 	deUint32						getLogFlags					(void) const;
114 
115 	//! Get run mode (--deqp-runmode)
116 	RunMode							getRunMode					(void) const;
117 
118 	//! Get caselist dump target file pattern (--deqp-caselist-export-file)
119 	const char*						getCaseListExportFile		(void) const;
120 
121 	//! Get default window visibility (--deqp-visibility)
122 	WindowVisibility				getVisibility				(void) const;
123 
124 	//! Get watchdog enable status (--deqp-watchdog)
125 	bool							isWatchDogEnabled			(void) const;
126 
127 	//! Get crash handling enable status (--deqp-crashhandler)
128 	bool							isCrashHandlingEnabled		(void) const;
129 
130 	//! Get base seed for randomization (--deqp-base-seed)
131 	int								getBaseSeed					(void) const;
132 
133 	//! Get test iteration count (--deqp-test-iteration-count)
134 	int								getTestIterationCount		(void) const;
135 
136 	//! Get rendering target width (--deqp-surface-width)
137 	int								getSurfaceWidth				(void) const;
138 
139 	//! Get rendering target height (--deqp-surface-height)
140 	int								getSurfaceHeight			(void) const;
141 
142 	//! Get rendering taget type (--deqp-surface-type)
143 	SurfaceType						getSurfaceType				(void) const;
144 
145 	//! Get screen rotation (--deqp-screen-rotation)
146 	ScreenRotation					getScreenRotation			(void) const;
147 
148 	//! Get GL context factory name (--deqp-gl-context-type)
149 	const char*						getGLContextType			(void) const;
150 
151 	//! Get GL config ID (--deqp-gl-config-id)
152 	int								getGLConfigId				(void) const;
153 
154 	//! Get GL config name (--deqp-gl-config-name)
155 	const char*						getGLConfigName				(void) const;
156 
157 	//! Get GL context flags (--deqp-gl-context-flags)
158 	const char*						getGLContextFlags			(void) const;
159 
160 	//! Get OpenCL platform ID (--deqp-cl-platform-id)
161 	int								getCLPlatformId				(void) const;
162 
163 	//! Get OpenCL device IDs (--deqp-cl-device-ids)
getCLDeviceIds(std::vector<int> & deviceIds) const164 	void							getCLDeviceIds				(std::vector<int>& deviceIds) const	{ deviceIds = getCLDeviceIds(); }
165 	const std::vector<int>&			getCLDeviceIds				(void) const;
166 
167 	//! Get extra OpenCL program build options (--deqp-cl-build-options)
168 	const char*						getCLBuildOptions			(void) const;
169 
170 	//! Get EGL native display factory (--deqp-egl-display-type)
171 	const char*						getEGLDisplayType			(void) const;
172 
173 	//! Get EGL native window factory (--deqp-egl-window-type)
174 	const char*						getEGLWindowType			(void) const;
175 
176 	//! Get EGL native pixmap factory (--deqp-egl-pixmap-type)
177 	const char*						getEGLPixmapType			(void) const;
178 
179 	//! Get Vulkan device ID (--deqp-vk-device-id)
180 	int								getVKDeviceId				(void) const;
181 
182 	//! Enable development-time test case validation checks
183 	bool							isValidationEnabled			(void) const;
184 
185 	//! Should we run tests that exhaust memory (--deqp-test-oom)
186 	bool							isOutOfMemoryTestEnabled(void) const;
187 
188 	//! Check if test group is in supplied test case list.
189 	bool							checkTestGroupName			(const char* groupName) const;
190 
191 	//! Check if test case is in supplied test case list.
192 	bool							checkTestCaseName			(const char* caseName) const;
193 
194 protected:
195 	const de::cmdline::CommandLine&	getCommandLine				(void) const;
196 
197 private:
198 									CommandLine					(const CommandLine&);	// not allowed!
199 	CommandLine&					operator=					(const CommandLine&);	// not allowed!
200 
201 	void							clear						(void);
202 
203 	virtual void					registerExtendedOptions		(de::cmdline::Parser& parser);
204 
205 	de::cmdline::CommandLine		m_cmdLine;
206 	deUint32						m_logFlags;
207 	CaseTreeNode*					m_caseTree;
208 	de::MovePtr<const CasePaths>	m_casePaths;
209 };
210 
211 } // tcu
212 
213 #endif // _TCUCOMMANDLINE_HPP
214