resolve merge conflicts of 037808f59 to oc-mr1-dev
[platform/upstream/VK-GL-CTS.git] / framework / qphelper / qpTestLog.h
1 #ifndef _QPTESTLOG_H
2 #define _QPTESTLOG_H
3 /*-------------------------------------------------------------------------
4  * drawElements Quality Program Helper Library
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  * \defgroup TestLog
23  * \ingroup TestLog
24  * \{
25  * \file
26  * \brief Test log library
27  *
28  * qpTestLog Conventions:
29  *
30  * Each function takes qpTestLog pointer. Operations are done on that log
31  * instance.
32  *
33  * When function takes a 'name' parameter, that name is expected to
34  * be a unique identifier within the scope of one test case. Test case
35  * begins with a call to qpTestLog_startCase and ends with a call to
36  * qpTestLog_endCase or qpTestLog_terminateCase. The human readable
37  * "name" for a piece of information is given with the parameter
38  * called 'description'.
39  *
40  * All functions writing to the log return a boolean value. False
41  * means that the current write operation failed and the current log
42  * instance should be abandoned.
43  *
44  *//*--------------------------------------------------------------------*/
45
46 #include "deDefs.h"
47
48 typedef struct qpTestLog_s      qpTestLog;
49
50 /* Test results supported by current report version */
51 /* \note Keep in sync with TestCaseStatus in Candy project. */
52 typedef enum qpTestResult_e
53 {
54         QP_TEST_RESULT_PASS = 0,                                /*!< Test case passed.                                                                                                                                  */
55         QP_TEST_RESULT_FAIL,                                    /*!< Implementation produced incorrect results                                                                                  */
56         QP_TEST_RESULT_QUALITY_WARNING,                 /*!< Result is within specification, but is not of high quality                                                 */
57         QP_TEST_RESULT_COMPATIBILITY_WARNING,   /*!< Result is within specification, but likely to cause fragmentation in the market    */
58         QP_TEST_RESULT_PENDING,                                 /*!< The test is still running. Not a valid end result                                                                  */
59         QP_TEST_RESULT_NOT_SUPPORTED,                   /*!< Implementation does not support functionality needed by this test case                             */
60         QP_TEST_RESULT_RESOURCE_ERROR,                  /*!< Implementation fails to pass the test due to lack of resources                                             */
61         QP_TEST_RESULT_INTERNAL_ERROR,                  /*!< Error occurred within Tester Core                                                                                                  */
62         QP_TEST_RESULT_CRASH,                                   /*!< Crash occurred in test execution.                                                                                                  */
63         QP_TEST_RESULT_TIMEOUT,                                 /*!< Timeout occurred in test execution.                                                                                                */
64
65         QP_TEST_RESULT_LAST
66 } qpTestResult;
67
68 /* Test case types. */
69 typedef enum qpTestCaseType_e
70 {
71         QP_TEST_CASE_TYPE_SELF_VALIDATE = 0,    /*!< Self-validating test case                  */
72         QP_TEST_CASE_TYPE_PERFORMANCE,                  /*!< Performace test case                               */
73         QP_TEST_CASE_TYPE_CAPABILITY,                   /*!< Capability score case                              */
74         QP_TEST_CASE_TYPE_ACCURACY,                             /*!< Accuracy test case                                 */
75
76         QP_TEST_CASE_TYPE_LAST
77 } qpTestCaseType;
78
79 /*--------------------------------------------------------------------*//*!
80  * \brief Tag key-value pairs to give cues on proper visualization in GUI
81  *//*--------------------------------------------------------------------*/
82 typedef enum qpKeyValueTag_e
83 {
84         QP_KEY_TAG_NONE = 0,
85         QP_KEY_TAG_PERFORMANCE,
86         QP_KEY_TAG_QUALITY,
87         QP_KEY_TAG_PRECISION,
88         QP_KEY_TAG_TIME,
89
90         /* Add new values here if needed, remember to update relevant code in qpTestLog.c and change format revision */
91
92         QP_KEY_TAG_LAST /* Do not remove */
93 } qpKeyValueTag;
94
95 /*--------------------------------------------------------------------*//*!
96  * \brief Sample value tag for giving hints for analysis
97  *//*--------------------------------------------------------------------*/
98 typedef enum qpSampleValueTag_e
99 {
100         QP_SAMPLE_VALUE_TAG_PREDICTOR = 0,              /*!< Predictor for sample, such as number of operations.        */
101         QP_SAMPLE_VALUE_TAG_RESPONSE,                   /*!< Response, i.e. measured value, such as render time.        */
102
103         /* Add new values here if needed, remember to update relevant code in qpTestLog.c and change format revision */
104
105         QP_SAMPLE_VALUE_TAG_LAST        /* Do not remove */
106 } qpSampleValueTag;
107
108 /* Image compression type. */
109 typedef enum qpImageCompressionMode_e
110 {
111         QP_IMAGE_COMPRESSION_MODE_NONE  = 0,    /*!< Do not compress images.                                    */
112         QP_IMAGE_COMPRESSION_MODE_PNG,                  /*!< Compress images using lossless libpng.             */
113         QP_IMAGE_COMPRESSION_MODE_BEST,                 /*!< Choose the best image compression mode.    */
114
115         QP_IMAGE_COMPRESSION_MODE_LAST
116 } qpImageCompressionMode;
117
118 /*--------------------------------------------------------------------*//*!
119  * \brief Image formats.
120  *
121  * Pixels are handled as a byte stream, i.e., endianess does not
122  * affect component ordering.
123  *//*--------------------------------------------------------------------*/
124 typedef enum qpImageFormat_e
125 {
126         QP_IMAGE_FORMAT_RGB888 = 0,
127         QP_IMAGE_FORMAT_RGBA8888,
128
129         QP_IMAGE_FORMAT_LAST
130 } qpImageFormat;
131
132 /* Test log flags. */
133 typedef enum qpTestLogFlag_e
134 {
135         QP_TEST_LOG_EXCLUDE_IMAGES                      = (1<<0),               /*!< Do not log images. This reduces log size considerably.                     */
136         QP_TEST_LOG_EXCLUDE_SHADER_SOURCES      = (1<<1),               /*!< Do not log shader sources. Helps to reduce log size further.       */
137         QP_TEST_LOG_NO_FLUSH                            = (1<<2)                /*!< Do not do a fflush after writing the log.                                          */
138 } qpTestLogFlag;
139
140 /* Shader type. */
141 typedef enum qpShaderType_e
142 {
143         QP_SHADER_TYPE_VERTEX = 0,
144         QP_SHADER_TYPE_FRAGMENT,
145         QP_SHADER_TYPE_GEOMETRY,
146         QP_SHADER_TYPE_TESS_CONTROL,
147         QP_SHADER_TYPE_TESS_EVALUATION,
148         QP_SHADER_TYPE_COMPUTE,
149
150         QP_SHADER_TYPE_LAST
151 } qpShaderType;
152
153 DE_BEGIN_EXTERN_C
154
155 /* \todo [2013-04-13 pyry] Clean up & document. Do we actually want this? */
156 typedef struct qpEglConfigInfo_s
157 {
158         int                                                     bufferSize;
159         int                                                     redSize;
160         int                                                     greenSize;
161         int                                                     blueSize;
162         int                                                     luminanceSize;
163         int                                                     alphaSize;
164         int                                                     alphaMaskSize;
165         deBool                                          bindToTextureRGB;
166         deBool                                          bindToTextureRGBA;
167         const char*                                     colorBufferType;
168         const char*                                     configCaveat;
169         int                                                     configID;
170         const char*                                     conformant;
171         int                                                     depthSize;
172         int                                                     level;
173         int                                                     maxPBufferWidth;
174         int                                                     maxPBufferHeight;
175         int                                                     maxPBufferPixels;
176         int                                                     maxSwapInterval;
177         int                                                     minSwapInterval;
178         deBool                                          nativeRenderable;
179         const char*                                     renderableType;
180         int                                                     sampleBuffers;
181         int                                                     samples;
182         int                                                     stencilSize;
183         const char*                                     surfaceTypes;
184         const char*                                     transparentType;
185         int                                                     transparentRedValue;
186         int                                                     transparentGreenValue;
187         int                                                     transparentBlueValue;
188 } qpEglConfigInfo;
189
190
191 qpTestLog*              qpTestLog_createFileLog                 (const char* fileName, deUint32 flags);
192 void                    qpTestLog_destroy                               (qpTestLog* log);
193
194 deBool                  qpTestLog_startCase                             (qpTestLog* log, const char* testCasePath, qpTestCaseType testCaseType);
195 deBool                  qpTestLog_endCase                               (qpTestLog* log, qpTestResult result, const char* description);
196 deBool                  qpTestLog_terminateCase                 (qpTestLog* log, qpTestResult result);
197
198 deBool                  qpTestLog_writeMessage                  (qpTestLog* log, const char* format, ...) DE_PRINTF_FUNC_ATTR(2,3);
199 deBool                  qpTestLog_startSection                  (qpTestLog* log, const char* name, const char* description);
200 deBool                  qpTestLog_endSection                    (qpTestLog* log);
201 deBool                  qpTestLog_writeText                             (qpTestLog* log, const char* name, const char* description, qpKeyValueTag tag, const char* value);
202 deBool                  qpTestLog_writeInteger                  (qpTestLog* log, const char* name, const char* description, const char* unit, qpKeyValueTag tag, deInt64 value);
203 deBool                  qpTestLog_writeFloat                    (qpTestLog* log, const char* name, const char* description, const char* unit, qpKeyValueTag tag, float value);
204
205 deBool                  qpTestLog_startImageSet                 (qpTestLog* log, const char* name, const char* description);
206 deBool                  qpTestLog_endImageSet                   (qpTestLog* log);
207 deBool                  qpTestLog_writeImage                    (qpTestLog* log, const char* name, const char* description, qpImageCompressionMode compressionMode, qpImageFormat format, int width, int height, int stride, const void* data);
208
209 deBool                  qpTestLog_startEglConfigSet             (qpTestLog* log, const char* key, const char* description);
210 deBool                  qpTestLog_writeEglConfig                (qpTestLog* log, const qpEglConfigInfo* config);
211 deBool                  qpTestLog_endEglConfigSet               (qpTestLog* log);
212
213 /* \todo [2013-08-26 pyry] Unify ShaderProgram & KernelSource & CompileInfo. */
214
215 deBool                  qpTestLog_startShaderProgram    (qpTestLog* log, deBool linkOk, const char* linkInfoLog);
216 deBool                  qpTestLog_endShaderProgram              (qpTestLog* log);
217 deBool                  qpTestLog_writeShader                   (qpTestLog* log, qpShaderType type, const char* source, deBool compileOk, const char* infoLog);
218
219 deBool                  qpTestLog_writeKernelSource             (qpTestLog* log, const char* source);
220 deBool                  qpTestLog_writeSpirVAssemblySource      (qpTestLog* log, const char* source);
221 deBool                  qpTestLog_writeCompileInfo              (qpTestLog* log, const char* name, const char* description, deBool compileOk, const char* infoLog);
222
223 deBool                  qpTestLog_startSampleList               (qpTestLog* log, const char* name, const char* description);
224 deBool                  qpTestLog_startSampleInfo               (qpTestLog* log);
225 deBool                  qpTestLog_writeValueInfo                (qpTestLog* log, const char* name, const char* description, const char* unit, qpSampleValueTag tag);
226 deBool                  qpTestLog_endSampleInfo                 (qpTestLog* log);
227 deBool                  qpTestLog_startSample                   (qpTestLog* log);
228 deBool                  qpTestLog_writeValueFloat               (qpTestLog* log, double value);
229 deBool                  qpTestLog_writeValueInteger             (qpTestLog* log, deInt64 value);
230 deBool                  qpTestLog_endSample                             (qpTestLog* log);
231 deBool                  qpTestLog_endSampleList                 (qpTestLog* log);
232
233 deUint32                qpTestLog_getLogFlags                   (const qpTestLog* log);
234
235 const char*             qpGetTestResultName                             (qpTestResult result);
236
237 DE_END_EXTERN_C
238
239 /*! \} */
240
241 #endif /* _QPTESTLOG_H */