am 9252e819: Remove tessellation.user_defined_io.per_patch cases from must pass.
[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_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
160 class NumericValue
161 {
162 public:
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
180 private:
181         Type                    m_type;
182         union
183         {
184                 deInt64         int64;
185                 double          float64;
186         } m_value;
187 };
188
189 std::ostream& operator<< (std::ostream& str, const NumericValue& value);
190
191 class Item
192 {
193 public:
194
195         virtual                 ~Item                           (void) {}
196
197         Type                    getType                         (void) const { return m_type; }
198
199 protected:
200                                         Item                            (Type type) : m_type(type) {}
201
202 private:
203                                         Item                            (const Item& other);
204         Item&                   operator=                       (const Item& other);
205
206         Type                    m_type;
207 };
208
209 class Result : public Item
210 {
211 public:
212                                                 Result                  (void) : Item(TYPE_RESULT), statusCode(TESTSTATUSCODE_LAST) {}
213                                                 ~Result                 (void) {}
214
215         TestStatusCode          statusCode;
216         std::string                     details;
217 };
218
219 class Text : public Item
220 {
221 public:
222                                                 Text                    (void) : Item(TYPE_TEXT) {}
223                                                 ~Text                   (void) {}
224
225         std::string                     text;
226 };
227
228 class Number : public Item
229 {
230 public:
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
241 class Image : public Item
242 {
243 public:
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
272 class ImageSet : public Item
273 {
274 public:
275                                                 ImageSet                (void) : Item(TYPE_IMAGESET) {}
276                                                 ~ImageSet               (void) {}
277
278         std::string                     name;
279         std::string                     description;
280         List                            images;
281 };
282
283 class ShaderSource : public Item
284 {
285 public:
286                                                 ShaderSource            (void) : Item(TYPE_SHADERSOURCE) {}
287                                                 ~ShaderSource           (void) {}
288
289         std::string                     source;
290 };
291
292 class InfoLog : public Item
293 {
294 public:
295                                                 InfoLog                         (void) : Item(TYPE_INFOLOG) {}
296                                                 ~InfoLog                        (void) {}
297
298         std::string                     log;
299 };
300
301 class Shader : public Item
302 {
303 public:
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
325 class ShaderProgram : public Item
326 {
327 public:
328                                                 ShaderProgram           (void) : Item(TYPE_SHADERPROGRAM), linkStatus(false) {}
329                                                 ~ShaderProgram          (void) {}
330
331         List                            shaders;
332         bool                            linkStatus;
333         InfoLog                         linkInfoLog;
334 };
335
336 class EglConfig : public Item
337 {
338 public:
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
374 inline 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
403 class EglConfigSet : public Item
404 {
405 public:
406                                                 EglConfigSet            (void) : Item(TYPE_EGLCONFIGSET) {}
407                                                 ~EglConfigSet           (void) {}
408
409         std::string                     name;
410         std::string                     description;
411         List                            configs;
412 };
413
414 class Section : public Item
415 {
416 public:
417                                                 Section                 (void) : Item(TYPE_SECTION) {}
418                                                 ~Section                (void) {}
419
420         std::string                     name;
421         std::string                     description;
422         List                            items;
423 };
424
425 class KernelSource : public Item
426 {
427 public:
428                                                 KernelSource    (void) : Item(TYPE_KERNELSOURCE) {}
429                                                 ~KernelSource   (void) {}
430
431         std::string                     source;
432 };
433
434 class CompileInfo : public Item
435 {
436 public:
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
446 class ValueInfo : public Item
447 {
448 public:
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
466 class SampleInfo : public Item
467 {
468 public:
469                                                 SampleInfo              (void) : Item(TYPE_SAMPLEINFO) {}
470                                                 ~SampleInfo             (void) {}
471
472         List                            valueInfos;
473 };
474
475 class SampleValue : public Item
476 {
477 public:
478                                                 SampleValue             (void) : Item(TYPE_SAMPLEVALUE) {}
479                                                 ~SampleValue    (void) {}
480
481         NumericValue            value;
482 };
483
484 class Sample : public Item
485 {
486 public:
487                                                 Sample                  (void) : Item(TYPE_SAMPLE) {}
488                                                 ~Sample                 (void) {}
489
490         List                            values;
491 };
492
493 class SampleList : public Item
494 {
495 public:
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