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