Fix missing dependency on sparse binds
[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         QP_TEST_RESULT_WAIVER,                                  /*!< Status code reported by waived test.                                                                                               */
65
66         QP_TEST_RESULT_LAST
67 } qpTestResult;
68
69 /* Test case types. */
70 typedef enum qpTestCaseType_e
71 {
72         QP_TEST_CASE_TYPE_SELF_VALIDATE = 0,    /*!< Self-validating test case                  */
73         QP_TEST_CASE_TYPE_PERFORMANCE,                  /*!< Performace test case                               */
74         QP_TEST_CASE_TYPE_CAPABILITY,                   /*!< Capability score case                              */
75         QP_TEST_CASE_TYPE_ACCURACY,                             /*!< Accuracy test case                                 */
76
77         QP_TEST_CASE_TYPE_LAST
78 } qpTestCaseType;
79
80 /*--------------------------------------------------------------------*//*!
81  * \brief Tag key-value pairs to give cues on proper visualization in GUI
82  *//*--------------------------------------------------------------------*/
83 typedef enum qpKeyValueTag_e
84 {
85         QP_KEY_TAG_NONE = 0,
86         QP_KEY_TAG_PERFORMANCE,
87         QP_KEY_TAG_QUALITY,
88         QP_KEY_TAG_PRECISION,
89         QP_KEY_TAG_TIME,
90
91         /* Add new values here if needed, remember to update relevant code in qpTestLog.c and change format revision */
92
93         QP_KEY_TAG_LAST /* Do not remove */
94 } qpKeyValueTag;
95
96 /*--------------------------------------------------------------------*//*!
97  * \brief Sample value tag for giving hints for analysis
98  *//*--------------------------------------------------------------------*/
99 typedef enum qpSampleValueTag_e
100 {
101         QP_SAMPLE_VALUE_TAG_PREDICTOR = 0,              /*!< Predictor for sample, such as number of operations.        */
102         QP_SAMPLE_VALUE_TAG_RESPONSE,                   /*!< Response, i.e. measured value, such as render time.        */
103
104         /* Add new values here if needed, remember to update relevant code in qpTestLog.c and change format revision */
105
106         QP_SAMPLE_VALUE_TAG_LAST        /* Do not remove */
107 } qpSampleValueTag;
108
109 /* Image compression type. */
110 typedef enum qpImageCompressionMode_e
111 {
112         QP_IMAGE_COMPRESSION_MODE_NONE  = 0,    /*!< Do not compress images.                                    */
113         QP_IMAGE_COMPRESSION_MODE_PNG,                  /*!< Compress images using lossless libpng.             */
114         QP_IMAGE_COMPRESSION_MODE_BEST,                 /*!< Choose the best image compression mode.    */
115
116         QP_IMAGE_COMPRESSION_MODE_LAST
117 } qpImageCompressionMode;
118
119 /*--------------------------------------------------------------------*//*!
120  * \brief Image formats.
121  *
122  * Pixels are handled as a byte stream, i.e., endianess does not
123  * affect component ordering.
124  *//*--------------------------------------------------------------------*/
125 typedef enum qpImageFormat_e
126 {
127         QP_IMAGE_FORMAT_RGB888 = 0,
128         QP_IMAGE_FORMAT_RGBA8888,
129
130         QP_IMAGE_FORMAT_LAST
131 } qpImageFormat;
132
133 /* Test log flags. */
134 typedef enum qpTestLogFlag_e
135 {
136         QP_TEST_LOG_EXCLUDE_IMAGES                      = (1<<0),               /*!< Do not log images. This reduces log size considerably.                     */
137         QP_TEST_LOG_EXCLUDE_SHADER_SOURCES      = (1<<1),               /*!< Do not log shader sources. Helps to reduce log size further.       */
138         QP_TEST_LOG_NO_FLUSH                            = (1<<2),               /*!< Do not do a fflush after writing the log.                                          */
139         QP_TEST_LOG_EXCLUDE_EMPTY_LOGINFO       = (1<<3),               /*!< Do not log empty shader compile or link loginfo.                           */
140         QP_TEST_LOG_NO_INITIAL_OUTPUT           = (1<<4)                /*!< Do not push data to cout when initializing log.                            */
141 } qpTestLogFlag;
142
143 /* Shader type. */
144 typedef enum qpShaderType_e
145 {
146         QP_SHADER_TYPE_VERTEX = 0,
147         QP_SHADER_TYPE_FRAGMENT,
148         QP_SHADER_TYPE_GEOMETRY,
149         QP_SHADER_TYPE_TESS_CONTROL,
150         QP_SHADER_TYPE_TESS_EVALUATION,
151         QP_SHADER_TYPE_COMPUTE,
152         QP_SHADER_TYPE_RAYGEN,
153         QP_SHADER_TYPE_ANY_HIT,
154         QP_SHADER_TYPE_CLOSEST_HIT,
155         QP_SHADER_TYPE_MISS,
156         QP_SHADER_TYPE_INTERSECTION,
157         QP_SHADER_TYPE_CALLABLE,
158         QP_SHADER_TYPE_TASK,
159         QP_SHADER_TYPE_MESH,
160
161         QP_SHADER_TYPE_LAST
162 } qpShaderType;
163
164 DE_BEGIN_EXTERN_C
165
166 /* \todo [2013-04-13 pyry] Clean up & document. Do we actually want this? */
167 typedef struct qpEglConfigInfo_s
168 {
169         int                                                     bufferSize;
170         int                                                     redSize;
171         int                                                     greenSize;
172         int                                                     blueSize;
173         int                                                     luminanceSize;
174         int                                                     alphaSize;
175         int                                                     alphaMaskSize;
176         deBool                                          bindToTextureRGB;
177         deBool                                          bindToTextureRGBA;
178         const char*                                     colorBufferType;
179         const char*                                     configCaveat;
180         int                                                     configID;
181         const char*                                     conformant;
182         int                                                     depthSize;
183         int                                                     level;
184         int                                                     maxPBufferWidth;
185         int                                                     maxPBufferHeight;
186         int                                                     maxPBufferPixels;
187         int                                                     maxSwapInterval;
188         int                                                     minSwapInterval;
189         deBool                                          nativeRenderable;
190         const char*                                     renderableType;
191         int                                                     sampleBuffers;
192         int                                                     samples;
193         int                                                     stencilSize;
194         const char*                                     surfaceTypes;
195         const char*                                     transparentType;
196         int                                                     transparentRedValue;
197         int                                                     transparentGreenValue;
198         int                                                     transparentBlueValue;
199 } qpEglConfigInfo;
200
201
202 qpTestLog*              qpTestLog_createFileLog                 (const char* fileName, deUint32 flags);
203 deBool                  qpTestLog_beginSession                  (qpTestLog* log, const char* additionalSessionInfo);
204 void                    qpTestLog_destroy                               (qpTestLog* log);
205
206 deBool                  qpTestLog_startCase                             (qpTestLog* log, const char* testCasePath, qpTestCaseType testCaseType);
207 deBool                  qpTestLog_endCase                               (qpTestLog* log, qpTestResult result, const char* description);
208
209 deBool                  qpTestLog_startTestsCasesTime   (qpTestLog* log);
210 deBool                  qpTestLog_endTestsCasesTime             (qpTestLog* log);
211
212 deBool                  qpTestLog_terminateCase                 (qpTestLog* log, qpTestResult result);
213
214 deBool                  qpTestLog_startSection                  (qpTestLog* log, const char* name, const char* description);
215 deBool                  qpTestLog_endSection                    (qpTestLog* log);
216 deBool                  qpTestLog_writeText                             (qpTestLog* log, const char* name, const char* description, qpKeyValueTag tag, const char* value);
217 deBool                  qpTestLog_writeInteger                  (qpTestLog* log, const char* name, const char* description, const char* unit, qpKeyValueTag tag, deInt64 value);
218 deBool                  qpTestLog_writeFloat                    (qpTestLog* log, const char* name, const char* description, const char* unit, qpKeyValueTag tag, float value);
219
220 deBool                  qpTestLog_startImageSet                 (qpTestLog* log, const char* name, const char* description);
221 deBool                  qpTestLog_endImageSet                   (qpTestLog* log);
222 deBool                  qpTestLog_writeImage                    (qpTestLog* log, const char* name, const char* description, qpImageCompressionMode compressionMode, qpImageFormat format, int width, int height, int stride, const void* data);
223
224 deBool                  qpTestLog_startEglConfigSet             (qpTestLog* log, const char* key, const char* description);
225 deBool                  qpTestLog_writeEglConfig                (qpTestLog* log, const qpEglConfigInfo* config);
226 deBool                  qpTestLog_endEglConfigSet               (qpTestLog* log);
227
228 /* \todo [2013-08-26 pyry] Unify ShaderProgram & KernelSource & CompileInfo. */
229
230 deBool                  qpTestLog_startShaderProgram    (qpTestLog* log, deBool linkOk, const char* linkInfoLog);
231 deBool                  qpTestLog_endShaderProgram              (qpTestLog* log);
232 deBool                  qpTestLog_writeShader                   (qpTestLog* log, qpShaderType type, const char* source, deBool compileOk, const char* infoLog);
233
234 deBool                  qpTestLog_writeKernelSource             (qpTestLog* log, const char* source);
235 deBool                  qpTestLog_writeSpirVAssemblySource      (qpTestLog* log, const char* source);
236 deBool                  qpTestLog_writeCompileInfo              (qpTestLog* log, const char* name, const char* description, deBool compileOk, const char* infoLog);
237
238 deBool                  qpTestLog_startSampleList               (qpTestLog* log, const char* name, const char* description);
239 deBool                  qpTestLog_startSampleInfo               (qpTestLog* log);
240 deBool                  qpTestLog_writeValueInfo                (qpTestLog* log, const char* name, const char* description, const char* unit, qpSampleValueTag tag);
241 deBool                  qpTestLog_endSampleInfo                 (qpTestLog* log);
242 deBool                  qpTestLog_startSample                   (qpTestLog* log);
243 deBool                  qpTestLog_writeValueFloat               (qpTestLog* log, double value);
244 deBool                  qpTestLog_writeValueInteger             (qpTestLog* log, deInt64 value);
245 deBool                  qpTestLog_endSample                             (qpTestLog* log);
246 deBool                  qpTestLog_endSampleList                 (qpTestLog* log);
247
248 deBool                  qpTestLog_writeRaw                              (qpTestLog* log, const char* rawContents);
249
250 deUint32                qpTestLog_getLogFlags                   (const qpTestLog* log);
251
252 const char*             qpGetTestResultName                             (qpTestResult result);
253
254 DE_END_EXTERN_C
255
256 /*! \} */
257
258 #endif /* _QPTESTLOG_H */