3 /*-------------------------------------------------------------------------
4 * drawElements Quality Program Helper Library
5 * -------------------------------------------
7 * Copyright 2014 The Android Open Source Project
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
13 * http://www.apache.org/licenses/LICENSE-2.0
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.
26 * \brief Test log library
28 * qpTestLog Conventions:
30 * Each function takes qpTestLog pointer. Operations are done on that log
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'.
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.
44 *//*--------------------------------------------------------------------*/
48 typedef struct qpTestLog_s qpTestLog;
50 /* Test results supported by current report version */
51 /* \note Keep in sync with TestCaseStatus in Candy project. */
52 typedef enum qpTestResult_e
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. */
69 /* Test case types. */
70 typedef enum qpTestCaseType_e
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 */
77 QP_TEST_CASE_TYPE_LAST
80 /*--------------------------------------------------------------------*//*!
81 * \brief Tag key-value pairs to give cues on proper visualization in GUI
82 *//*--------------------------------------------------------------------*/
83 typedef enum qpKeyValueTag_e
86 QP_KEY_TAG_PERFORMANCE,
91 /* Add new values here if needed, remember to update relevant code in qpTestLog.c and change format revision */
93 QP_KEY_TAG_LAST /* Do not remove */
96 /*--------------------------------------------------------------------*//*!
97 * \brief Sample value tag for giving hints for analysis
98 *//*--------------------------------------------------------------------*/
99 typedef enum qpSampleValueTag_e
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. */
104 /* Add new values here if needed, remember to update relevant code in qpTestLog.c and change format revision */
106 QP_SAMPLE_VALUE_TAG_LAST /* Do not remove */
109 /* Image compression type. */
110 typedef enum qpImageCompressionMode_e
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. */
116 QP_IMAGE_COMPRESSION_MODE_LAST
117 } qpImageCompressionMode;
119 /*--------------------------------------------------------------------*//*!
120 * \brief Image formats.
122 * Pixels are handled as a byte stream, i.e., endianess does not
123 * affect component ordering.
124 *//*--------------------------------------------------------------------*/
125 typedef enum qpImageFormat_e
127 QP_IMAGE_FORMAT_RGB888 = 0,
128 QP_IMAGE_FORMAT_RGBA8888,
133 /* Test log flags. */
134 typedef enum qpTestLogFlag_e
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. */
144 typedef enum qpShaderType_e
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,
156 QP_SHADER_TYPE_INTERSECTION,
157 QP_SHADER_TYPE_CALLABLE,
166 /* \todo [2013-04-13 pyry] Clean up & document. Do we actually want this? */
167 typedef struct qpEglConfigInfo_s
176 deBool bindToTextureRGB;
177 deBool bindToTextureRGBA;
178 const char* colorBufferType;
179 const char* configCaveat;
181 const char* conformant;
185 int maxPBufferHeight;
186 int maxPBufferPixels;
189 deBool nativeRenderable;
190 const char* renderableType;
194 const char* surfaceTypes;
195 const char* transparentType;
196 int transparentRedValue;
197 int transparentGreenValue;
198 int transparentBlueValue;
202 qpTestLog* qpTestLog_createFileLog (const char* fileName, deUint32 flags);
203 deBool qpTestLog_beginSession (qpTestLog* log, const char* additionalSessionInfo);
204 void qpTestLog_destroy (qpTestLog* log);
206 deBool qpTestLog_startCase (qpTestLog* log, const char* testCasePath, qpTestCaseType testCaseType);
207 deBool qpTestLog_endCase (qpTestLog* log, qpTestResult result, const char* description);
209 deBool qpTestLog_startTestsCasesTime (qpTestLog* log);
210 deBool qpTestLog_endTestsCasesTime (qpTestLog* log);
212 deBool qpTestLog_terminateCase (qpTestLog* log, qpTestResult result);
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);
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);
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);
228 /* \todo [2013-08-26 pyry] Unify ShaderProgram & KernelSource & CompileInfo. */
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);
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);
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);
248 deBool qpTestLog_writeRaw (qpTestLog* log, const char* rawContents);
250 deUint32 qpTestLog_getLogFlags (const qpTestLog* log);
252 const char* qpGetTestResultName (qpTestResult result);
258 #endif /* _QPTESTLOG_H */