blob: 76c028cbf134d4649318b3be0dd5741b7452a43c [file] [log] [blame]
Jarkko Poyry3c827362014-09-02 11:48:52 +03001#ifndef _XETESTCASERESULT_HPP
2#define _XETESTCASERESULT_HPP
3/*-------------------------------------------------------------------------
4 * drawElements Quality Program Test Executor
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 Test case result models.
24 *//*--------------------------------------------------------------------*/
25
26#include "xeDefs.hpp"
27#include "xeTestCase.hpp"
28
29#include <string>
30#include <vector>
31#include <ostream>
32
33namespace xe
34{
35
36enum TestStatusCode
37{
38 TESTSTATUSCODE_PASS, //!< Test case passed.
39 TESTSTATUSCODE_FAIL, //!< Test case failed (not passed).
40 TESTSTATUSCODE_QUALITY_WARNING, //!< Result within specification, but suspicious quality wise
41 TESTSTATUSCODE_COMPATIBILITY_WARNING, //!< Result within specification, but likely to cause fragmentation
42 TESTSTATUSCODE_PENDING, //!< Not yet started.
43 TESTSTATUSCODE_RUNNING, //!< Currently running (not stored in database).
44 TESTSTATUSCODE_NOT_SUPPORTED, //!< Some feature was not supported in the implementation.
45 TESTSTATUSCODE_RESOURCE_ERROR, //!< A resource error has occurred.
46 TESTSTATUSCODE_INTERNAL_ERROR, //!< An internal error has occurred.
47 TESTSTATUSCODE_CANCELED, //!< User canceled the execution
48 TESTSTATUSCODE_TIMEOUT, //!< Test was killed because of watch dog timeout.
49 TESTSTATUSCODE_CRASH, //!< Test executable crashed before finishing the test.
50 TESTSTATUSCODE_DISABLED, //!< Test case disabled (for current target)
51 TESTSTATUSCODE_TERMINATED, //!< Terminated for other reason.
52
53 TESTSTATUSCODE_LAST
54};
55
56const char* getTestStatusCodeName (TestStatusCode statusCode);
57
58namespace ri
59{
60
61class Item;
62class Result;
63class Text;
64class Number;
65class Image;
66class ImageSet;
67class VertexShader;
68class FragmentShader;
69class ShaderProgram;
70class ShaderSource;
71class InfoLog;
72class EglConfig;
73class EglConfigSet;
74class Section;
75class KernelSource;
76class CompileInfo;
77class SampleList;
78class SampleInfo;
79class ValueInfo;
80class Sample;
81class SampleValue;
82
83// \todo [2014-02-28 pyry] Make List<T> for items that have only specific subitems.
84
85class List
86{
87public:
88 List (void);
89 ~List (void);
90
91 int getNumItems (void) const { return (int)m_items.size(); }
92 const Item& getItem (int ndx) const { return *m_items[ndx]; }
93 Item& getItem (int ndx) { return *m_items[ndx]; }
94
95 template <typename T>
96 T* allocItem (void);
97
98private:
99 std::vector<Item*> m_items;
100};
101
102template <typename T>
103T* List::allocItem (void)
104{
105 m_items.reserve(m_items.size()+1);
106 T* item = new T();
107 m_items.push_back(static_cast<ri::Item*>(item));
108 return item;
109}
110
111} // ri
112
113class TestCaseResultHeader
114{
115public:
116 TestCaseResultHeader (void) : caseType(TESTCASETYPE_LAST), statusCode(TESTSTATUSCODE_LAST) {}
117
118 std::string casePath; //!< Full test case path.
119 TestCaseType caseType; //!< Test case type.
120 TestStatusCode statusCode; //!< Test status code.
121 std::string statusDetails; //!< Status description.
122};
123
124class TestCaseResult : public TestCaseResultHeader
125{
126public:
127 ri::List resultItems; //!< Test log items.
128};
129
130// Result items.
131namespace ri
132{
133
134// Result item type.
135enum Type
136{
137 TYPE_RESULT = 0,
138 TYPE_TEXT,
139 TYPE_NUMBER,
140 TYPE_IMAGE,
141 TYPE_IMAGESET,
142 TYPE_SHADER,
143 TYPE_SHADERPROGRAM,
144 TYPE_SHADERSOURCE,
145 TYPE_INFOLOG,
146 TYPE_EGLCONFIG,
147 TYPE_EGLCONFIGSET,
148 TYPE_SECTION,
149 TYPE_KERNELSOURCE,
150 TYPE_COMPILEINFO,
151 TYPE_SAMPLELIST,
152 TYPE_SAMPLEINFO,
153 TYPE_VALUEINFO,
154 TYPE_SAMPLE,
155 TYPE_SAMPLEVALUE,
156
157 TYPE_LAST
158};
159
160class NumericValue
161{
162public:
163 enum Type
164 {
165 TYPE_EMPTY = 0,
166 TYPE_INT64,
167 TYPE_FLOAT64,
168
169 TYPE_LAST
170 };
171
172 NumericValue (void) : m_type(TYPE_EMPTY) {}
173 NumericValue (deInt64 value) : m_type(TYPE_INT64) { m_value.int64 = value; }
174 NumericValue (double value) : m_type(TYPE_FLOAT64) { m_value.float64 = value; }
175
176 Type getType (void) const { return m_type; }
177 deInt64 getInt64 (void) const { DE_ASSERT(getType() == TYPE_INT64); return m_value.int64; }
178 double getFloat64 (void) const { DE_ASSERT(getType() == TYPE_FLOAT64); return m_value.float64; }
179
180private:
181 Type m_type;
182 union
183 {
184 deInt64 int64;
185 double float64;
186 } m_value;
187};
188
189std::ostream& operator<< (std::ostream& str, const NumericValue& value);
190
191class Item
192{
193public:
194
195 virtual ~Item (void) {}
196
197 Type getType (void) const { return m_type; }
198
199protected:
200 Item (Type type) : m_type(type) {}
201
202private:
203 Item (const Item& other);
204 Item& operator= (const Item& other);
205
206 Type m_type;
207};
208
209class Result : public Item
210{
211public:
212 Result (void) : Item(TYPE_RESULT), statusCode(TESTSTATUSCODE_LAST) {}
213 ~Result (void) {}
214
215 TestStatusCode statusCode;
216 std::string details;
217};
218
219class Text : public Item
220{
221public:
222 Text (void) : Item(TYPE_TEXT) {}
223 ~Text (void) {}
224
225 std::string text;
226};
227
228class Number : public Item
229{
230public:
231 Number (void) : Item(TYPE_NUMBER) {}
232 ~Number (void) {}
233
234 std::string name;
235 std::string description;
236 std::string unit;
237 std::string tag;
238 NumericValue value;
239};
240
241class Image : public Item
242{
243public:
244 enum Format
245 {
246 FORMAT_RGB888,
247 FORMAT_RGBA8888,
248
249 FORMAT_LAST
250 };
251
252 enum Compression
253 {
254 COMPRESSION_NONE = 0,
255 COMPRESSION_PNG,
256
257 COMPRESSION_LAST
258 };
259
260 Image (void) : Item(TYPE_IMAGE), width(0), height(0), format(FORMAT_LAST), compression(COMPRESSION_LAST) {}
261 ~Image (void) {}
262
263 std::string name;
264 std::string description;
265 int width;
266 int height;
267 Format format;
268 Compression compression;
269 std::vector<deUint8> data;
270};
271
272class ImageSet : public Item
273{
274public:
275 ImageSet (void) : Item(TYPE_IMAGESET) {}
276 ~ImageSet (void) {}
277
278 std::string name;
279 std::string description;
280 List images;
281};
282
283class ShaderSource : public Item
284{
285public:
286 ShaderSource (void) : Item(TYPE_SHADERSOURCE) {}
287 ~ShaderSource (void) {}
288
289 std::string source;
290};
291
292class InfoLog : public Item
293{
294public:
295 InfoLog (void) : Item(TYPE_INFOLOG) {}
296 ~InfoLog (void) {}
297
298 std::string log;
299};
300
301class Shader : public Item
302{
303public:
304 enum ShaderType
305 {
306 SHADERTYPE_VERTEX = 0,
307 SHADERTYPE_FRAGMENT,
308 SHADERTYPE_GEOMETRY,
309 SHADERTYPE_TESS_CONTROL,
310 SHADERTYPE_TESS_EVALUATION,
311 SHADERTYPE_COMPUTE,
312
313 SHADERTYPE_LAST
314 };
315
316 Shader (void) : Item(TYPE_SHADER), shaderType(SHADERTYPE_LAST), compileStatus(false) {}
317 ~Shader (void) {}
318
319 ShaderType shaderType;
320 bool compileStatus;
321 ShaderSource source;
322 InfoLog infoLog;
323};
324
325class ShaderProgram : public Item
326{
327public:
328 ShaderProgram (void) : Item(TYPE_SHADERPROGRAM), linkStatus(false) {}
329 ~ShaderProgram (void) {}
330
331 List shaders;
332 bool linkStatus;
333 InfoLog linkInfoLog;
334};
335
336class EglConfig : public Item
337{
338public:
339 EglConfig (void);
340 ~EglConfig (void) {}
341
342 int bufferSize;
343 int redSize;
344 int greenSize;
345 int blueSize;
346 int luminanceSize;
347 int alphaSize;
348 int alphaMaskSize;
349 bool bindToTextureRGB;
350 bool bindToTextureRGBA;
351 std::string colorBufferType;
352 std::string configCaveat;
353 int configID;
354 std::string conformant;
355 int depthSize;
356 int level;
357 int maxPBufferWidth;
358 int maxPBufferHeight;
359 int maxPBufferPixels;
360 int maxSwapInterval;
361 int minSwapInterval;
362 bool nativeRenderable;
363 std::string renderableType;
364 int sampleBuffers;
365 int samples;
366 int stencilSize;
367 std::string surfaceTypes;
368 std::string transparentType;
369 int transparentRedValue;
370 int transparentGreenValue;
371 int transparentBlueValue;
372};
373
374inline EglConfig::EglConfig (void)
375 : Item (TYPE_EGLCONFIG)
376 , bufferSize (0)
377 , redSize (0)
378 , greenSize (0)
379 , blueSize (0)
380 , luminanceSize (0)
381 , alphaSize (0)
382 , alphaMaskSize (0)
383 , bindToTextureRGB (false)
384 , bindToTextureRGBA (false)
385 , configID (0)
386 , depthSize (0)
387 , level (0)
388 , maxPBufferWidth (0)
389 , maxPBufferHeight (0)
390 , maxPBufferPixels (0)
391 , maxSwapInterval (0)
392 , minSwapInterval (0)
393 , nativeRenderable (false)
394 , sampleBuffers (0)
395 , samples (0)
396 , stencilSize (0)
397 , transparentRedValue (0)
398 , transparentGreenValue (0)
399 , transparentBlueValue (0)
400{
401}
402
403class EglConfigSet : public Item
404{
405public:
406 EglConfigSet (void) : Item(TYPE_EGLCONFIGSET) {}
407 ~EglConfigSet (void) {}
408
409 std::string name;
410 std::string description;
411 List configs;
412};
413
414class Section : public Item
415{
416public:
417 Section (void) : Item(TYPE_SECTION) {}
418 ~Section (void) {}
419
420 std::string name;
421 std::string description;
422 List items;
423};
424
425class KernelSource : public Item
426{
427public:
428 KernelSource (void) : Item(TYPE_KERNELSOURCE) {}
429 ~KernelSource (void) {}
430
431 std::string source;
432};
433
434class CompileInfo : public Item
435{
436public:
437 CompileInfo (void) : Item(TYPE_COMPILEINFO), compileStatus(false) {}
438 ~CompileInfo (void) {}
439
440 std::string name;
441 std::string description;
442 bool compileStatus;
443 InfoLog infoLog;
444};
445
446class ValueInfo : public Item
447{
448public:
449 enum ValueTag
450 {
451 VALUETAG_PREDICTOR,
452 VALUETAG_RESPONSE,
453
454 VALUETAG_LAST
455 };
456
457 ValueInfo (void) : Item(TYPE_VALUEINFO), tag(VALUETAG_LAST) {}
458 ~ValueInfo (void) {}
459
460 std::string name;
461 std::string description;
462 std::string unit;
463 ValueTag tag;
464};
465
466class SampleInfo : public Item
467{
468public:
469 SampleInfo (void) : Item(TYPE_SAMPLEINFO) {}
470 ~SampleInfo (void) {}
471
472 List valueInfos;
473};
474
475class SampleValue : public Item
476{
477public:
478 SampleValue (void) : Item(TYPE_SAMPLEVALUE) {}
479 ~SampleValue (void) {}
480
481 NumericValue value;
482};
483
484class Sample : public Item
485{
486public:
487 Sample (void) : Item(TYPE_SAMPLE) {}
488 ~Sample (void) {}
489
490 List values;
491};
492
493class SampleList : public Item
494{
495public:
496 SampleList (void) : Item(TYPE_SAMPLELIST) {}
497 ~SampleList (void) {}
498
499 std::string name;
500 std::string description;
501 SampleInfo sampleInfo;
502 List samples;
503};
504
505} // ri
506} // xe
507
508#endif // _XETESTCASERESULT_HPP