Merge in code from gles32-dev
[platform/upstream/VK-GL-CTS.git] / executor / xeTestCaseResult.hpp
1 #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
33 namespace xe
34 {
35
36 enum 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
56 const char* getTestStatusCodeName (TestStatusCode statusCode);
57
58 namespace ri
59 {
60
61 class Item;
62 class Result;
63 class Text;
64 class Number;
65 class Image;
66 class ImageSet;
67 class VertexShader;
68 class FragmentShader;
69 class ShaderProgram;
70 class ShaderSource;
71 class InfoLog;
72 class EglConfig;
73 class EglConfigSet;
74 class Section;
75 class KernelSource;
76 class CompileInfo;
77 class SampleList;
78 class SampleInfo;
79 class ValueInfo;
80 class Sample;
81 class SampleValue;
82
83 // \todo [2014-02-28 pyry] Make List<T> for items that have only specific subitems.
84
85 class List
86 {
87 public:
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
98 private:
99         std::vector<Item*>              m_items;
100 };
101
102 template <typename T>
103 T* 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
113 class TestCaseResultHeader
114 {
115 public:
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
124 class TestCaseResult : public TestCaseResultHeader
125 {
126 public:
127         ri::List                        resultItems;                    //!< Test log items.
128 };
129
130 // Result items.
131 namespace ri
132 {
133
134 // Result item type.
135 enum 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_SPIRVSOURCE,
146         TYPE_INFOLOG,
147         TYPE_EGLCONFIG,
148         TYPE_EGLCONFIGSET,
149         TYPE_SECTION,
150         TYPE_KERNELSOURCE,
151         TYPE_COMPILEINFO,
152         TYPE_SAMPLELIST,
153         TYPE_SAMPLEINFO,
154         TYPE_VALUEINFO,
155         TYPE_SAMPLE,
156         TYPE_SAMPLEVALUE,
157
158         TYPE_LAST
159 };
160
161 class NumericValue
162 {
163 public:
164         enum Type
165         {
166                 TYPE_EMPTY = 0,
167                 TYPE_INT64,
168                 TYPE_FLOAT64,
169
170                 TYPE_LAST
171         };
172
173                                         NumericValue    (void)                  : m_type(TYPE_EMPTY)    {}
174                                         NumericValue    (deInt64 value) : m_type(TYPE_INT64)    { m_value.int64 = value;        }
175                                         NumericValue    (double value)  : m_type(TYPE_FLOAT64)  { m_value.float64 = value;      }
176
177         Type                    getType                 (void) const    { return m_type; }
178         deInt64                 getInt64                (void) const    { DE_ASSERT(getType() == TYPE_INT64);   return m_value.int64;   }
179         double                  getFloat64              (void) const    { DE_ASSERT(getType() == TYPE_FLOAT64); return m_value.float64; }
180
181 private:
182         Type                    m_type;
183         union
184         {
185                 deInt64         int64;
186                 double          float64;
187         } m_value;
188 };
189
190 std::ostream& operator<< (std::ostream& str, const NumericValue& value);
191
192 class Item
193 {
194 public:
195
196         virtual                 ~Item                           (void) {}
197
198         Type                    getType                         (void) const { return m_type; }
199
200 protected:
201                                         Item                            (Type type) : m_type(type) {}
202
203 private:
204                                         Item                            (const Item& other);
205         Item&                   operator=                       (const Item& other);
206
207         Type                    m_type;
208 };
209
210 class Result : public Item
211 {
212 public:
213                                                 Result                  (void) : Item(TYPE_RESULT), statusCode(TESTSTATUSCODE_LAST) {}
214                                                 ~Result                 (void) {}
215
216         TestStatusCode          statusCode;
217         std::string                     details;
218 };
219
220 class Text : public Item
221 {
222 public:
223                                                 Text                    (void) : Item(TYPE_TEXT) {}
224                                                 ~Text                   (void) {}
225
226         std::string                     text;
227 };
228
229 class Number : public Item
230 {
231 public:
232                                                 Number                  (void) : Item(TYPE_NUMBER) {}
233                                                 ~Number                 (void) {}
234
235         std::string                     name;
236         std::string                     description;
237         std::string                     unit;
238         std::string                     tag;
239         NumericValue            value;
240 };
241
242 class Image : public Item
243 {
244 public:
245         enum Format
246         {
247                 FORMAT_RGB888,
248                 FORMAT_RGBA8888,
249
250                 FORMAT_LAST
251         };
252
253         enum Compression
254         {
255                 COMPRESSION_NONE = 0,
256                 COMPRESSION_PNG,
257
258                 COMPRESSION_LAST
259         };
260
261                                                         Image           (void) : Item(TYPE_IMAGE), width(0), height(0), format(FORMAT_LAST), compression(COMPRESSION_LAST) {}
262                                                         ~Image          (void) {}
263
264         std::string                             name;
265         std::string                             description;
266         int                                             width;
267         int                                             height;
268         Format                                  format;
269         Compression                             compression;
270         std::vector<deUint8>    data;
271 };
272
273 class ImageSet : public Item
274 {
275 public:
276                                                 ImageSet                (void) : Item(TYPE_IMAGESET) {}
277                                                 ~ImageSet               (void) {}
278
279         std::string                     name;
280         std::string                     description;
281         List                            images;
282 };
283
284 class ShaderSource : public Item
285 {
286 public:
287                                                 ShaderSource            (void) : Item(TYPE_SHADERSOURCE) {}
288                                                 ~ShaderSource           (void) {}
289
290         std::string                     source;
291 };
292
293 class SpirVSource : public Item
294 {
295 public:
296                                                 SpirVSource                     (void) : Item(TYPE_SPIRVSOURCE) {}
297                                                 ~SpirVSource            (void) {}
298
299         std::string                     source;
300 };
301
302 class InfoLog : public Item
303 {
304 public:
305                                                 InfoLog                         (void) : Item(TYPE_INFOLOG) {}
306                                                 ~InfoLog                        (void) {}
307
308         std::string                     log;
309 };
310
311 class Shader : public Item
312 {
313 public:
314         enum ShaderType
315         {
316                 SHADERTYPE_VERTEX = 0,
317                 SHADERTYPE_FRAGMENT,
318                 SHADERTYPE_GEOMETRY,
319                 SHADERTYPE_TESS_CONTROL,
320                 SHADERTYPE_TESS_EVALUATION,
321                 SHADERTYPE_COMPUTE,
322
323                 SHADERTYPE_LAST
324         };
325
326                                                 Shader                          (void) : Item(TYPE_SHADER), shaderType(SHADERTYPE_LAST), compileStatus(false) {}
327                                                 ~Shader                         (void) {}
328
329         ShaderType                      shaderType;
330         bool                            compileStatus;
331         ShaderSource            source;
332         InfoLog                         infoLog;
333 };
334
335 class ShaderProgram : public Item
336 {
337 public:
338                                                 ShaderProgram           (void) : Item(TYPE_SHADERPROGRAM), linkStatus(false) {}
339                                                 ~ShaderProgram          (void) {}
340
341         List                            shaders;
342         bool                            linkStatus;
343         InfoLog                         linkInfoLog;
344 };
345
346 class EglConfig : public Item
347 {
348 public:
349                                                 EglConfig                       (void);
350                                                 ~EglConfig                      (void) {}
351
352         int                                     bufferSize;
353         int                                     redSize;
354         int                                     greenSize;
355         int                                     blueSize;
356         int                                     luminanceSize;
357         int                                     alphaSize;
358         int                                     alphaMaskSize;
359         bool                            bindToTextureRGB;
360         bool                            bindToTextureRGBA;
361         std::string                     colorBufferType;
362         std::string                     configCaveat;
363         int                                     configID;
364         std::string                     conformant;
365         int                                     depthSize;
366         int                                     level;
367         int                                     maxPBufferWidth;
368         int                                     maxPBufferHeight;
369         int                                     maxPBufferPixels;
370         int                                     maxSwapInterval;
371         int                                     minSwapInterval;
372         bool                            nativeRenderable;
373         std::string                     renderableType;
374         int                                     sampleBuffers;
375         int                                     samples;
376         int                                     stencilSize;
377         std::string                     surfaceTypes;
378         std::string                     transparentType;
379         int                                     transparentRedValue;
380         int                                     transparentGreenValue;
381         int                                     transparentBlueValue;
382 };
383
384 inline EglConfig::EglConfig (void)
385         : Item                                  (TYPE_EGLCONFIG)
386         , bufferSize                    (0)
387         , redSize                               (0)
388         , greenSize                             (0)
389         , blueSize                              (0)
390         , luminanceSize                 (0)
391         , alphaSize                             (0)
392         , alphaMaskSize                 (0)
393         , bindToTextureRGB              (false)
394         , bindToTextureRGBA             (false)
395         , configID                              (0)
396         , depthSize                             (0)
397         , level                                 (0)
398         , maxPBufferWidth               (0)
399         , maxPBufferHeight              (0)
400         , maxPBufferPixels              (0)
401         , maxSwapInterval               (0)
402         , minSwapInterval               (0)
403         , nativeRenderable              (false)
404         , sampleBuffers                 (0)
405         , samples                               (0)
406         , stencilSize                   (0)
407         , transparentRedValue   (0)
408         , transparentGreenValue (0)
409         , transparentBlueValue  (0)
410 {
411 }
412
413 class EglConfigSet : public Item
414 {
415 public:
416                                                 EglConfigSet            (void) : Item(TYPE_EGLCONFIGSET) {}
417                                                 ~EglConfigSet           (void) {}
418
419         std::string                     name;
420         std::string                     description;
421         List                            configs;
422 };
423
424 class Section : public Item
425 {
426 public:
427                                                 Section                 (void) : Item(TYPE_SECTION) {}
428                                                 ~Section                (void) {}
429
430         std::string                     name;
431         std::string                     description;
432         List                            items;
433 };
434
435 class KernelSource : public Item
436 {
437 public:
438                                                 KernelSource    (void) : Item(TYPE_KERNELSOURCE) {}
439                                                 ~KernelSource   (void) {}
440
441         std::string                     source;
442 };
443
444 class CompileInfo : public Item
445 {
446 public:
447                                                 CompileInfo             (void) : Item(TYPE_COMPILEINFO), compileStatus(false) {}
448                                                 ~CompileInfo    (void) {}
449
450         std::string                     name;
451         std::string                     description;
452         bool                            compileStatus;
453         InfoLog                         infoLog;
454 };
455
456 class ValueInfo : public Item
457 {
458 public:
459         enum ValueTag
460         {
461                 VALUETAG_PREDICTOR,
462                 VALUETAG_RESPONSE,
463
464                 VALUETAG_LAST
465         };
466
467                                                 ValueInfo               (void) : Item(TYPE_VALUEINFO), tag(VALUETAG_LAST) {}
468                                                 ~ValueInfo              (void) {}
469
470         std::string                     name;
471         std::string                     description;
472         std::string                     unit;
473         ValueTag                        tag;
474 };
475
476 class SampleInfo : public Item
477 {
478 public:
479                                                 SampleInfo              (void) : Item(TYPE_SAMPLEINFO) {}
480                                                 ~SampleInfo             (void) {}
481
482         List                            valueInfos;
483 };
484
485 class SampleValue : public Item
486 {
487 public:
488                                                 SampleValue             (void) : Item(TYPE_SAMPLEVALUE) {}
489                                                 ~SampleValue    (void) {}
490
491         NumericValue            value;
492 };
493
494 class Sample : public Item
495 {
496 public:
497                                                 Sample                  (void) : Item(TYPE_SAMPLE) {}
498                                                 ~Sample                 (void) {}
499
500         List                            values;
501 };
502
503 class SampleList : public Item
504 {
505 public:
506                                                 SampleList              (void) : Item(TYPE_SAMPLELIST) {}
507                                                 ~SampleList             (void) {}
508
509         std::string                     name;
510         std::string                     description;
511         SampleInfo                      sampleInfo;
512         List                            samples;
513 };
514
515 } // ri
516 } // xe
517
518 #endif // _XETESTCASERESULT_HPP