xref: /aosp_15_r20/external/deqp/framework/common/tcuTestLog.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker #ifndef _TCUTESTLOG_HPP
2*35238bceSAndroid Build Coastguard Worker #define _TCUTESTLOG_HPP
3*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program Tester Core
5*35238bceSAndroid Build Coastguard Worker  * ----------------------------------------
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 The Android Open Source Project
8*35238bceSAndroid Build Coastguard Worker  *
9*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
10*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
11*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
14*35238bceSAndroid Build Coastguard Worker  *
15*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
16*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
17*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
19*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
20*35238bceSAndroid Build Coastguard Worker  *
21*35238bceSAndroid Build Coastguard Worker  *//*!
22*35238bceSAndroid Build Coastguard Worker  * \file
23*35238bceSAndroid Build Coastguard Worker  * \brief Test Log C++ Wrapper.
24*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
25*35238bceSAndroid Build Coastguard Worker 
26*35238bceSAndroid Build Coastguard Worker #include "tcuDefs.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "qpTestLog.h"
28*35238bceSAndroid Build Coastguard Worker #include "tcuTexture.hpp"
29*35238bceSAndroid Build Coastguard Worker 
30*35238bceSAndroid Build Coastguard Worker #include <sstream>
31*35238bceSAndroid Build Coastguard Worker 
32*35238bceSAndroid Build Coastguard Worker namespace tcu
33*35238bceSAndroid Build Coastguard Worker {
34*35238bceSAndroid Build Coastguard Worker 
35*35238bceSAndroid Build Coastguard Worker class Surface;
36*35238bceSAndroid Build Coastguard Worker class MessageBuilder;
37*35238bceSAndroid Build Coastguard Worker class LogImageSet;
38*35238bceSAndroid Build Coastguard Worker class LogImage;
39*35238bceSAndroid Build Coastguard Worker class LogSection;
40*35238bceSAndroid Build Coastguard Worker class LogShaderProgram;
41*35238bceSAndroid Build Coastguard Worker class LogShader;
42*35238bceSAndroid Build Coastguard Worker class LogSpirVAssemblySource;
43*35238bceSAndroid Build Coastguard Worker class LogKernelSource;
44*35238bceSAndroid Build Coastguard Worker class LogSampleList;
45*35238bceSAndroid Build Coastguard Worker class LogValueInfo;
46*35238bceSAndroid Build Coastguard Worker class SampleBuilder;
47*35238bceSAndroid Build Coastguard Worker template <typename T>
48*35238bceSAndroid Build Coastguard Worker class LogNumber;
49*35238bceSAndroid Build Coastguard Worker 
50*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
51*35238bceSAndroid Build Coastguard Worker  * \brief Test log
52*35238bceSAndroid Build Coastguard Worker  *
53*35238bceSAndroid Build Coastguard Worker  * TestLog provides convinient C++ API for logging. The API has been designed
54*35238bceSAndroid Build Coastguard Worker  * around stream operators much like STL iostream library. The following
55*35238bceSAndroid Build Coastguard Worker  * examples demonstrate how to use TestLog.
56*35238bceSAndroid Build Coastguard Worker  *
57*35238bceSAndroid Build Coastguard Worker  * \code
58*35238bceSAndroid Build Coastguard Worker  * TestLog& log = m_testCtx.getLog();
59*35238bceSAndroid Build Coastguard Worker  *
60*35238bceSAndroid Build Coastguard Worker  * // Write message to log.
61*35238bceSAndroid Build Coastguard Worker  * log << TestLog::Message << "Hello, World!" << TestLog::EndMessage;
62*35238bceSAndroid Build Coastguard Worker  * int myNumber = 3;
63*35238bceSAndroid Build Coastguard Worker  * log << TestLog::Message << "Diff is " << myNumber << TestLog::EndMessage;
64*35238bceSAndroid Build Coastguard Worker  *
65*35238bceSAndroid Build Coastguard Worker  * // Write image
66*35238bceSAndroid Build Coastguard Worker  * Surface myImage(256, 256);
67*35238bceSAndroid Build Coastguard Worker  * log << TestLog::Image("TestImage", "My test image", myImage);
68*35238bceSAndroid Build Coastguard Worker  *
69*35238bceSAndroid Build Coastguard Worker  * // Multiple commands can be combined:
70*35238bceSAndroid Build Coastguard Worker  * log << TestLog::Section("Details", "Test case details")
71*35238bceSAndroid Build Coastguard Worker  *     << TestLog::Message << "Here be dragons" << TestLog::EndMessage
72*35238bceSAndroid Build Coastguard Worker  *     << TestLog::ImageSet("Result", "Result images")
73*35238bceSAndroid Build Coastguard Worker  *     << TestLog::Image("ImageA", "Image A", imageA)
74*35238bceSAndroid Build Coastguard Worker  *     << TestLog::Image("ImageB", "Image B", imageB)
75*35238bceSAndroid Build Coastguard Worker  *     << TestLog::EndImageSet << TestLog::EndSection;
76*35238bceSAndroid Build Coastguard Worker  * \endcode
77*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
78*35238bceSAndroid Build Coastguard Worker class TestLog
79*35238bceSAndroid Build Coastguard Worker {
80*35238bceSAndroid Build Coastguard Worker public:
81*35238bceSAndroid Build Coastguard Worker     // Tokens
82*35238bceSAndroid Build Coastguard Worker     static const class BeginMessageToken
83*35238bceSAndroid Build Coastguard Worker     {
84*35238bceSAndroid Build Coastguard Worker     } Message;
85*35238bceSAndroid Build Coastguard Worker     static const class EndMessageToken
86*35238bceSAndroid Build Coastguard Worker     {
87*35238bceSAndroid Build Coastguard Worker     } EndMessage;
88*35238bceSAndroid Build Coastguard Worker     static const class EndImageSetToken
89*35238bceSAndroid Build Coastguard Worker     {
90*35238bceSAndroid Build Coastguard Worker     } EndImageSet;
91*35238bceSAndroid Build Coastguard Worker     static const class EndSectionToken
92*35238bceSAndroid Build Coastguard Worker     {
93*35238bceSAndroid Build Coastguard Worker     } EndSection;
94*35238bceSAndroid Build Coastguard Worker     static const class EndShaderProgramToken
95*35238bceSAndroid Build Coastguard Worker     {
96*35238bceSAndroid Build Coastguard Worker     } EndShaderProgram;
97*35238bceSAndroid Build Coastguard Worker     static const class SampleInfoToken
98*35238bceSAndroid Build Coastguard Worker     {
99*35238bceSAndroid Build Coastguard Worker     } SampleInfo;
100*35238bceSAndroid Build Coastguard Worker     static const class EndSampleInfoToken
101*35238bceSAndroid Build Coastguard Worker     {
102*35238bceSAndroid Build Coastguard Worker     } EndSampleInfo;
103*35238bceSAndroid Build Coastguard Worker     static const class BeginSampleToken
104*35238bceSAndroid Build Coastguard Worker     {
105*35238bceSAndroid Build Coastguard Worker     } Sample;
106*35238bceSAndroid Build Coastguard Worker     static const class EndSampleToken
107*35238bceSAndroid Build Coastguard Worker     {
108*35238bceSAndroid Build Coastguard Worker     } EndSample;
109*35238bceSAndroid Build Coastguard Worker     static const class EndSampleListToken
110*35238bceSAndroid Build Coastguard Worker     {
111*35238bceSAndroid Build Coastguard Worker     } EndSampleList;
112*35238bceSAndroid Build Coastguard Worker 
113*35238bceSAndroid Build Coastguard Worker     // Typedefs.
114*35238bceSAndroid Build Coastguard Worker     typedef LogImageSet ImageSet;
115*35238bceSAndroid Build Coastguard Worker     typedef LogImage Image;
116*35238bceSAndroid Build Coastguard Worker     typedef LogSection Section;
117*35238bceSAndroid Build Coastguard Worker     typedef LogShaderProgram ShaderProgram;
118*35238bceSAndroid Build Coastguard Worker     typedef LogShader Shader;
119*35238bceSAndroid Build Coastguard Worker     typedef LogSpirVAssemblySource SpirVAssemblySource;
120*35238bceSAndroid Build Coastguard Worker     typedef LogKernelSource KernelSource;
121*35238bceSAndroid Build Coastguard Worker     typedef LogSampleList SampleList;
122*35238bceSAndroid Build Coastguard Worker     typedef LogValueInfo ValueInfo;
123*35238bceSAndroid Build Coastguard Worker     typedef LogNumber<float> Float;
124*35238bceSAndroid Build Coastguard Worker     typedef LogNumber<int64_t> Integer;
125*35238bceSAndroid Build Coastguard Worker 
126*35238bceSAndroid Build Coastguard Worker     explicit TestLog(const char *fileName, uint32_t flags = 0);
127*35238bceSAndroid Build Coastguard Worker     ~TestLog(void);
128*35238bceSAndroid Build Coastguard Worker 
129*35238bceSAndroid Build Coastguard Worker     void writeSessionInfo(std::string additionalInfo = "");
130*35238bceSAndroid Build Coastguard Worker 
131*35238bceSAndroid Build Coastguard Worker     MessageBuilder operator<<(const BeginMessageToken &);
132*35238bceSAndroid Build Coastguard Worker     MessageBuilder message(void);
133*35238bceSAndroid Build Coastguard Worker 
134*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const ImageSet &imageSet);
135*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const Image &image);
136*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const EndImageSetToken &);
137*35238bceSAndroid Build Coastguard Worker 
138*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const Section &section);
139*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const EndSectionToken &);
140*35238bceSAndroid Build Coastguard Worker 
141*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const ShaderProgram &shaderProgram);
142*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const EndShaderProgramToken &);
143*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const Shader &shader);
144*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const SpirVAssemblySource &module);
145*35238bceSAndroid Build Coastguard Worker 
146*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const KernelSource &kernelSrc);
147*35238bceSAndroid Build Coastguard Worker 
148*35238bceSAndroid Build Coastguard Worker     template <typename T>
149*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const LogNumber<T> &number);
150*35238bceSAndroid Build Coastguard Worker 
151*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const SampleList &sampleList);
152*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const SampleInfoToken &);
153*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const ValueInfo &valueInfo);
154*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const EndSampleInfoToken &);
155*35238bceSAndroid Build Coastguard Worker     SampleBuilder operator<<(const BeginSampleToken &);
156*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const EndSampleListToken &);
157*35238bceSAndroid Build Coastguard Worker 
158*35238bceSAndroid Build Coastguard Worker     // Raw api
159*35238bceSAndroid Build Coastguard Worker     void writeMessage(const char *message);
160*35238bceSAndroid Build Coastguard Worker 
161*35238bceSAndroid Build Coastguard Worker     void startImageSet(const char *name, const char *description);
162*35238bceSAndroid Build Coastguard Worker     void endImageSet(void);
163*35238bceSAndroid Build Coastguard Worker     void writeImage(const char *name, const char *description, const ConstPixelBufferAccess &surface, const Vec4 &scale,
164*35238bceSAndroid Build Coastguard Worker                     const Vec4 &bias, qpImageCompressionMode compressionMode = QP_IMAGE_COMPRESSION_MODE_BEST);
165*35238bceSAndroid Build Coastguard Worker     void writeImage(const char *name, const char *description, qpImageCompressionMode compressionMode,
166*35238bceSAndroid Build Coastguard Worker                     qpImageFormat format, int width, int height, int stride, const void *data);
167*35238bceSAndroid Build Coastguard Worker 
168*35238bceSAndroid Build Coastguard Worker     void startSection(const char *name, const char *description);
169*35238bceSAndroid Build Coastguard Worker     void endSection(void);
170*35238bceSAndroid Build Coastguard Worker 
171*35238bceSAndroid Build Coastguard Worker     void startShaderProgram(bool linkOk, const char *linkInfoLog);
172*35238bceSAndroid Build Coastguard Worker     void endShaderProgram(void);
173*35238bceSAndroid Build Coastguard Worker     void writeShader(qpShaderType type, const char *source, bool compileOk, const char *infoLog);
174*35238bceSAndroid Build Coastguard Worker     void writeSpirVAssemblySource(const char *source);
175*35238bceSAndroid Build Coastguard Worker     void writeKernelSource(const char *source);
176*35238bceSAndroid Build Coastguard Worker     void writeCompileInfo(const char *name, const char *description, bool compileOk, const char *infoLog);
177*35238bceSAndroid Build Coastguard Worker 
178*35238bceSAndroid Build Coastguard Worker     void writeFloat(const char *name, const char *description, const char *unit, qpKeyValueTag tag, float value);
179*35238bceSAndroid Build Coastguard Worker     void writeInteger(const char *name, const char *description, const char *unit, qpKeyValueTag tag, int64_t value);
180*35238bceSAndroid Build Coastguard Worker 
181*35238bceSAndroid Build Coastguard Worker     void startEglConfigSet(const char *name, const char *description);
182*35238bceSAndroid Build Coastguard Worker     void writeEglConfig(const qpEglConfigInfo *config);
183*35238bceSAndroid Build Coastguard Worker     void endEglConfigSet(void);
184*35238bceSAndroid Build Coastguard Worker 
185*35238bceSAndroid Build Coastguard Worker     void startCase(const char *testCasePath, qpTestCaseType testCaseType);
186*35238bceSAndroid Build Coastguard Worker     void endCase(qpTestResult result, const char *description);
187*35238bceSAndroid Build Coastguard Worker     void terminateCase(qpTestResult result);
188*35238bceSAndroid Build Coastguard Worker 
189*35238bceSAndroid Build Coastguard Worker     void startTestsCasesTime(void);
190*35238bceSAndroid Build Coastguard Worker     void endTestsCasesTime(void);
191*35238bceSAndroid Build Coastguard Worker 
192*35238bceSAndroid Build Coastguard Worker     void startSampleList(const std::string &name, const std::string &description);
193*35238bceSAndroid Build Coastguard Worker     void startSampleInfo(void);
194*35238bceSAndroid Build Coastguard Worker     void writeValueInfo(const std::string &name, const std::string &description, const std::string &unit,
195*35238bceSAndroid Build Coastguard Worker                         qpSampleValueTag tag);
196*35238bceSAndroid Build Coastguard Worker     void endSampleInfo(void);
197*35238bceSAndroid Build Coastguard Worker     void startSample(void);
198*35238bceSAndroid Build Coastguard Worker     void writeSampleValue(double value);
199*35238bceSAndroid Build Coastguard Worker     void writeSampleValue(int64_t value);
200*35238bceSAndroid Build Coastguard Worker     void endSample(void);
201*35238bceSAndroid Build Coastguard Worker     void endSampleList(void);
202*35238bceSAndroid Build Coastguard Worker 
203*35238bceSAndroid Build Coastguard Worker     void writeRaw(const char *rawContents);
204*35238bceSAndroid Build Coastguard Worker 
205*35238bceSAndroid Build Coastguard Worker     bool isShaderLoggingEnabled(void);
206*35238bceSAndroid Build Coastguard Worker 
207*35238bceSAndroid Build Coastguard Worker     void supressLogging(bool value);
208*35238bceSAndroid Build Coastguard Worker     bool isSupressLogging(void);
209*35238bceSAndroid Build Coastguard Worker 
210*35238bceSAndroid Build Coastguard Worker private:
211*35238bceSAndroid Build Coastguard Worker     TestLog(const TestLog &other);            // Not allowed!
212*35238bceSAndroid Build Coastguard Worker     TestLog &operator=(const TestLog &other); // Not allowed!
213*35238bceSAndroid Build Coastguard Worker 
214*35238bceSAndroid Build Coastguard Worker     qpTestLog *m_log;
215*35238bceSAndroid Build Coastguard Worker     bool m_logSupressed;
216*35238bceSAndroid Build Coastguard Worker     bool m_skipAdditionalDataInLog;
217*35238bceSAndroid Build Coastguard Worker };
218*35238bceSAndroid Build Coastguard Worker 
219*35238bceSAndroid Build Coastguard Worker class MessageBuilder
220*35238bceSAndroid Build Coastguard Worker {
221*35238bceSAndroid Build Coastguard Worker public:
MessageBuilder(TestLog * log)222*35238bceSAndroid Build Coastguard Worker     explicit MessageBuilder(TestLog *log) : m_log(log)
223*35238bceSAndroid Build Coastguard Worker     {
224*35238bceSAndroid Build Coastguard Worker     }
~MessageBuilder(void)225*35238bceSAndroid Build Coastguard Worker     ~MessageBuilder(void)
226*35238bceSAndroid Build Coastguard Worker     {
227*35238bceSAndroid Build Coastguard Worker     }
228*35238bceSAndroid Build Coastguard Worker 
toString(void) const229*35238bceSAndroid Build Coastguard Worker     std::string toString(void) const
230*35238bceSAndroid Build Coastguard Worker     {
231*35238bceSAndroid Build Coastguard Worker         return m_str.str();
232*35238bceSAndroid Build Coastguard Worker     }
233*35238bceSAndroid Build Coastguard Worker 
234*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const TestLog::EndMessageToken &);
235*35238bceSAndroid Build Coastguard Worker 
236*35238bceSAndroid Build Coastguard Worker     template <typename T>
237*35238bceSAndroid Build Coastguard Worker     MessageBuilder &operator<<(const T &value);
238*35238bceSAndroid Build Coastguard Worker 
239*35238bceSAndroid Build Coastguard Worker     MessageBuilder(const MessageBuilder &other);
240*35238bceSAndroid Build Coastguard Worker     MessageBuilder &operator=(const MessageBuilder &other);
241*35238bceSAndroid Build Coastguard Worker 
242*35238bceSAndroid Build Coastguard Worker private:
243*35238bceSAndroid Build Coastguard Worker     TestLog *m_log;
244*35238bceSAndroid Build Coastguard Worker     std::ostringstream m_str;
245*35238bceSAndroid Build Coastguard Worker };
246*35238bceSAndroid Build Coastguard Worker 
247*35238bceSAndroid Build Coastguard Worker class SampleBuilder
248*35238bceSAndroid Build Coastguard Worker {
249*35238bceSAndroid Build Coastguard Worker public:
SampleBuilder(TestLog * log)250*35238bceSAndroid Build Coastguard Worker     SampleBuilder(TestLog *log) : m_log(log)
251*35238bceSAndroid Build Coastguard Worker     {
252*35238bceSAndroid Build Coastguard Worker     }
253*35238bceSAndroid Build Coastguard Worker 
operator <<(int v)254*35238bceSAndroid Build Coastguard Worker     SampleBuilder &operator<<(int v)
255*35238bceSAndroid Build Coastguard Worker     {
256*35238bceSAndroid Build Coastguard Worker         m_values.push_back(Value((int64_t)v));
257*35238bceSAndroid Build Coastguard Worker         return *this;
258*35238bceSAndroid Build Coastguard Worker     }
operator <<(int64_t v)259*35238bceSAndroid Build Coastguard Worker     SampleBuilder &operator<<(int64_t v)
260*35238bceSAndroid Build Coastguard Worker     {
261*35238bceSAndroid Build Coastguard Worker         m_values.push_back(Value(v));
262*35238bceSAndroid Build Coastguard Worker         return *this;
263*35238bceSAndroid Build Coastguard Worker     }
operator <<(float v)264*35238bceSAndroid Build Coastguard Worker     SampleBuilder &operator<<(float v)
265*35238bceSAndroid Build Coastguard Worker     {
266*35238bceSAndroid Build Coastguard Worker         m_values.push_back(Value((double)v));
267*35238bceSAndroid Build Coastguard Worker         return *this;
268*35238bceSAndroid Build Coastguard Worker     }
operator <<(double v)269*35238bceSAndroid Build Coastguard Worker     SampleBuilder &operator<<(double v)
270*35238bceSAndroid Build Coastguard Worker     {
271*35238bceSAndroid Build Coastguard Worker         m_values.push_back(Value(v));
272*35238bceSAndroid Build Coastguard Worker         return *this;
273*35238bceSAndroid Build Coastguard Worker     }
274*35238bceSAndroid Build Coastguard Worker 
275*35238bceSAndroid Build Coastguard Worker     TestLog &operator<<(const TestLog::EndSampleToken &);
276*35238bceSAndroid Build Coastguard Worker 
277*35238bceSAndroid Build Coastguard Worker private:
278*35238bceSAndroid Build Coastguard Worker     struct Value
279*35238bceSAndroid Build Coastguard Worker     {
280*35238bceSAndroid Build Coastguard Worker         enum Type
281*35238bceSAndroid Build Coastguard Worker         {
282*35238bceSAndroid Build Coastguard Worker             TYPE_INT64 = 0,
283*35238bceSAndroid Build Coastguard Worker             TYPE_FLOAT64,
284*35238bceSAndroid Build Coastguard Worker             TYPE_LAST
285*35238bceSAndroid Build Coastguard Worker         };
286*35238bceSAndroid Build Coastguard Worker 
287*35238bceSAndroid Build Coastguard Worker         Type type;
288*35238bceSAndroid Build Coastguard Worker         union
289*35238bceSAndroid Build Coastguard Worker         {
290*35238bceSAndroid Build Coastguard Worker             int64_t int64;
291*35238bceSAndroid Build Coastguard Worker             double float64;
292*35238bceSAndroid Build Coastguard Worker         } value;
293*35238bceSAndroid Build Coastguard Worker 
Valuetcu::SampleBuilder::Value294*35238bceSAndroid Build Coastguard Worker         Value(void) : type(TYPE_LAST)
295*35238bceSAndroid Build Coastguard Worker         {
296*35238bceSAndroid Build Coastguard Worker             value.int64 = 0;
297*35238bceSAndroid Build Coastguard Worker         }
Valuetcu::SampleBuilder::Value298*35238bceSAndroid Build Coastguard Worker         Value(double v) : type(TYPE_FLOAT64)
299*35238bceSAndroid Build Coastguard Worker         {
300*35238bceSAndroid Build Coastguard Worker             value.float64 = v;
301*35238bceSAndroid Build Coastguard Worker         }
Valuetcu::SampleBuilder::Value302*35238bceSAndroid Build Coastguard Worker         Value(int64_t v) : type(TYPE_INT64)
303*35238bceSAndroid Build Coastguard Worker         {
304*35238bceSAndroid Build Coastguard Worker             value.int64 = v;
305*35238bceSAndroid Build Coastguard Worker         }
306*35238bceSAndroid Build Coastguard Worker     };
307*35238bceSAndroid Build Coastguard Worker 
308*35238bceSAndroid Build Coastguard Worker     TestLog *m_log;
309*35238bceSAndroid Build Coastguard Worker     std::vector<Value> m_values;
310*35238bceSAndroid Build Coastguard Worker };
311*35238bceSAndroid Build Coastguard Worker 
312*35238bceSAndroid Build Coastguard Worker class LogImageSet
313*35238bceSAndroid Build Coastguard Worker {
314*35238bceSAndroid Build Coastguard Worker public:
LogImageSet(const std::string & name,const std::string & description)315*35238bceSAndroid Build Coastguard Worker     LogImageSet(const std::string &name, const std::string &description) : m_name(name), m_description(description)
316*35238bceSAndroid Build Coastguard Worker     {
317*35238bceSAndroid Build Coastguard Worker     }
318*35238bceSAndroid Build Coastguard Worker 
319*35238bceSAndroid Build Coastguard Worker     void write(TestLog &log) const;
320*35238bceSAndroid Build Coastguard Worker 
321*35238bceSAndroid Build Coastguard Worker private:
322*35238bceSAndroid Build Coastguard Worker     std::string m_name;
323*35238bceSAndroid Build Coastguard Worker     std::string m_description;
324*35238bceSAndroid Build Coastguard Worker };
325*35238bceSAndroid Build Coastguard Worker 
326*35238bceSAndroid Build Coastguard Worker // \note Doesn't take copy of surface contents
327*35238bceSAndroid Build Coastguard Worker class LogImage
328*35238bceSAndroid Build Coastguard Worker {
329*35238bceSAndroid Build Coastguard Worker public:
330*35238bceSAndroid Build Coastguard Worker     LogImage(const std::string &name, const std::string &description, const Surface &surface,
331*35238bceSAndroid Build Coastguard Worker              qpImageCompressionMode compression = QP_IMAGE_COMPRESSION_MODE_BEST);
332*35238bceSAndroid Build Coastguard Worker 
333*35238bceSAndroid Build Coastguard Worker     LogImage(const std::string &name, const std::string &description, const ConstPixelBufferAccess &access,
334*35238bceSAndroid Build Coastguard Worker              qpImageCompressionMode compression = QP_IMAGE_COMPRESSION_MODE_BEST);
335*35238bceSAndroid Build Coastguard Worker 
336*35238bceSAndroid Build Coastguard Worker     LogImage(const std::string &name, const std::string &description, const ConstPixelBufferAccess &access,
337*35238bceSAndroid Build Coastguard Worker              const Vec4 &scale, const Vec4 &bias, qpImageCompressionMode compression = QP_IMAGE_COMPRESSION_MODE_BEST);
338*35238bceSAndroid Build Coastguard Worker 
339*35238bceSAndroid Build Coastguard Worker     void write(TestLog &log) const;
340*35238bceSAndroid Build Coastguard Worker 
341*35238bceSAndroid Build Coastguard Worker private:
342*35238bceSAndroid Build Coastguard Worker     std::string m_name;
343*35238bceSAndroid Build Coastguard Worker     std::string m_description;
344*35238bceSAndroid Build Coastguard Worker     ConstPixelBufferAccess m_access;
345*35238bceSAndroid Build Coastguard Worker     Vec4 m_scale;
346*35238bceSAndroid Build Coastguard Worker     Vec4 m_bias;
347*35238bceSAndroid Build Coastguard Worker     qpImageCompressionMode m_compression;
348*35238bceSAndroid Build Coastguard Worker };
349*35238bceSAndroid Build Coastguard Worker 
350*35238bceSAndroid Build Coastguard Worker class LogSection
351*35238bceSAndroid Build Coastguard Worker {
352*35238bceSAndroid Build Coastguard Worker public:
LogSection(const std::string & name,const std::string & description)353*35238bceSAndroid Build Coastguard Worker     LogSection(const std::string &name, const std::string &description) : m_name(name), m_description(description)
354*35238bceSAndroid Build Coastguard Worker     {
355*35238bceSAndroid Build Coastguard Worker     }
356*35238bceSAndroid Build Coastguard Worker 
357*35238bceSAndroid Build Coastguard Worker     void write(TestLog &log) const;
358*35238bceSAndroid Build Coastguard Worker 
359*35238bceSAndroid Build Coastguard Worker private:
360*35238bceSAndroid Build Coastguard Worker     std::string m_name;
361*35238bceSAndroid Build Coastguard Worker     std::string m_description;
362*35238bceSAndroid Build Coastguard Worker };
363*35238bceSAndroid Build Coastguard Worker 
364*35238bceSAndroid Build Coastguard Worker class LogShaderProgram
365*35238bceSAndroid Build Coastguard Worker {
366*35238bceSAndroid Build Coastguard Worker public:
LogShaderProgram(bool linkOk,const std::string & linkInfoLog)367*35238bceSAndroid Build Coastguard Worker     LogShaderProgram(bool linkOk, const std::string &linkInfoLog) : m_linkOk(linkOk), m_linkInfoLog(linkInfoLog)
368*35238bceSAndroid Build Coastguard Worker     {
369*35238bceSAndroid Build Coastguard Worker     }
370*35238bceSAndroid Build Coastguard Worker 
371*35238bceSAndroid Build Coastguard Worker     void write(TestLog &log) const;
372*35238bceSAndroid Build Coastguard Worker 
373*35238bceSAndroid Build Coastguard Worker private:
374*35238bceSAndroid Build Coastguard Worker     bool m_linkOk;
375*35238bceSAndroid Build Coastguard Worker     std::string m_linkInfoLog;
376*35238bceSAndroid Build Coastguard Worker };
377*35238bceSAndroid Build Coastguard Worker 
378*35238bceSAndroid Build Coastguard Worker class LogShader
379*35238bceSAndroid Build Coastguard Worker {
380*35238bceSAndroid Build Coastguard Worker public:
LogShader(qpShaderType type,const std::string & source,bool compileOk,const std::string & infoLog)381*35238bceSAndroid Build Coastguard Worker     LogShader(qpShaderType type, const std::string &source, bool compileOk, const std::string &infoLog)
382*35238bceSAndroid Build Coastguard Worker         : m_type(type)
383*35238bceSAndroid Build Coastguard Worker         , m_source(source)
384*35238bceSAndroid Build Coastguard Worker         , m_compileOk(compileOk)
385*35238bceSAndroid Build Coastguard Worker         , m_infoLog(infoLog)
386*35238bceSAndroid Build Coastguard Worker     {
387*35238bceSAndroid Build Coastguard Worker     }
388*35238bceSAndroid Build Coastguard Worker 
389*35238bceSAndroid Build Coastguard Worker     void write(TestLog &log) const;
390*35238bceSAndroid Build Coastguard Worker 
391*35238bceSAndroid Build Coastguard Worker private:
392*35238bceSAndroid Build Coastguard Worker     qpShaderType m_type;
393*35238bceSAndroid Build Coastguard Worker     std::string m_source;
394*35238bceSAndroid Build Coastguard Worker     bool m_compileOk;
395*35238bceSAndroid Build Coastguard Worker     std::string m_infoLog;
396*35238bceSAndroid Build Coastguard Worker };
397*35238bceSAndroid Build Coastguard Worker 
398*35238bceSAndroid Build Coastguard Worker class LogSpirVAssemblySource
399*35238bceSAndroid Build Coastguard Worker {
400*35238bceSAndroid Build Coastguard Worker public:
LogSpirVAssemblySource(const std::string & source)401*35238bceSAndroid Build Coastguard Worker     LogSpirVAssemblySource(const std::string &source) : m_source(source)
402*35238bceSAndroid Build Coastguard Worker     {
403*35238bceSAndroid Build Coastguard Worker     }
404*35238bceSAndroid Build Coastguard Worker 
405*35238bceSAndroid Build Coastguard Worker     void write(TestLog &log) const;
406*35238bceSAndroid Build Coastguard Worker 
407*35238bceSAndroid Build Coastguard Worker private:
408*35238bceSAndroid Build Coastguard Worker     std::string m_source;
409*35238bceSAndroid Build Coastguard Worker };
410*35238bceSAndroid Build Coastguard Worker 
411*35238bceSAndroid Build Coastguard Worker class LogKernelSource
412*35238bceSAndroid Build Coastguard Worker {
413*35238bceSAndroid Build Coastguard Worker public:
LogKernelSource(const std::string & source)414*35238bceSAndroid Build Coastguard Worker     explicit LogKernelSource(const std::string &source) : m_source(source)
415*35238bceSAndroid Build Coastguard Worker     {
416*35238bceSAndroid Build Coastguard Worker     }
417*35238bceSAndroid Build Coastguard Worker 
418*35238bceSAndroid Build Coastguard Worker     void write(TestLog &log) const;
419*35238bceSAndroid Build Coastguard Worker 
420*35238bceSAndroid Build Coastguard Worker private:
421*35238bceSAndroid Build Coastguard Worker     std::string m_source;
422*35238bceSAndroid Build Coastguard Worker };
423*35238bceSAndroid Build Coastguard Worker 
424*35238bceSAndroid Build Coastguard Worker class LogSampleList
425*35238bceSAndroid Build Coastguard Worker {
426*35238bceSAndroid Build Coastguard Worker public:
LogSampleList(const std::string & name,const std::string & description)427*35238bceSAndroid Build Coastguard Worker     LogSampleList(const std::string &name, const std::string &description) : m_name(name), m_description(description)
428*35238bceSAndroid Build Coastguard Worker     {
429*35238bceSAndroid Build Coastguard Worker     }
430*35238bceSAndroid Build Coastguard Worker 
431*35238bceSAndroid Build Coastguard Worker     void write(TestLog &log) const;
432*35238bceSAndroid Build Coastguard Worker 
433*35238bceSAndroid Build Coastguard Worker private:
434*35238bceSAndroid Build Coastguard Worker     std::string m_name;
435*35238bceSAndroid Build Coastguard Worker     std::string m_description;
436*35238bceSAndroid Build Coastguard Worker };
437*35238bceSAndroid Build Coastguard Worker 
438*35238bceSAndroid Build Coastguard Worker class LogValueInfo
439*35238bceSAndroid Build Coastguard Worker {
440*35238bceSAndroid Build Coastguard Worker public:
LogValueInfo(const std::string & name,const std::string & description,const std::string & unit,qpSampleValueTag tag)441*35238bceSAndroid Build Coastguard Worker     LogValueInfo(const std::string &name, const std::string &description, const std::string &unit, qpSampleValueTag tag)
442*35238bceSAndroid Build Coastguard Worker         : m_name(name)
443*35238bceSAndroid Build Coastguard Worker         , m_description(description)
444*35238bceSAndroid Build Coastguard Worker         , m_unit(unit)
445*35238bceSAndroid Build Coastguard Worker         , m_tag(tag)
446*35238bceSAndroid Build Coastguard Worker     {
447*35238bceSAndroid Build Coastguard Worker     }
448*35238bceSAndroid Build Coastguard Worker 
449*35238bceSAndroid Build Coastguard Worker     void write(TestLog &log) const;
450*35238bceSAndroid Build Coastguard Worker 
451*35238bceSAndroid Build Coastguard Worker private:
452*35238bceSAndroid Build Coastguard Worker     std::string m_name;
453*35238bceSAndroid Build Coastguard Worker     std::string m_description;
454*35238bceSAndroid Build Coastguard Worker     std::string m_unit;
455*35238bceSAndroid Build Coastguard Worker     qpSampleValueTag m_tag;
456*35238bceSAndroid Build Coastguard Worker };
457*35238bceSAndroid Build Coastguard Worker 
458*35238bceSAndroid Build Coastguard Worker template <typename T>
459*35238bceSAndroid Build Coastguard Worker class LogNumber
460*35238bceSAndroid Build Coastguard Worker {
461*35238bceSAndroid Build Coastguard Worker public:
LogNumber(const std::string & name,const std::string & desc,const std::string & unit,qpKeyValueTag tag,T value)462*35238bceSAndroid Build Coastguard Worker     LogNumber(const std::string &name, const std::string &desc, const std::string &unit, qpKeyValueTag tag, T value)
463*35238bceSAndroid Build Coastguard Worker         : m_name(name)
464*35238bceSAndroid Build Coastguard Worker         , m_desc(desc)
465*35238bceSAndroid Build Coastguard Worker         , m_unit(unit)
466*35238bceSAndroid Build Coastguard Worker         , m_tag(tag)
467*35238bceSAndroid Build Coastguard Worker         , m_value(value)
468*35238bceSAndroid Build Coastguard Worker     {
469*35238bceSAndroid Build Coastguard Worker     }
470*35238bceSAndroid Build Coastguard Worker 
471*35238bceSAndroid Build Coastguard Worker     void write(TestLog &log) const;
472*35238bceSAndroid Build Coastguard Worker 
473*35238bceSAndroid Build Coastguard Worker private:
474*35238bceSAndroid Build Coastguard Worker     std::string m_name;
475*35238bceSAndroid Build Coastguard Worker     std::string m_desc;
476*35238bceSAndroid Build Coastguard Worker     std::string m_unit;
477*35238bceSAndroid Build Coastguard Worker     qpKeyValueTag m_tag;
478*35238bceSAndroid Build Coastguard Worker     T m_value;
479*35238bceSAndroid Build Coastguard Worker };
480*35238bceSAndroid Build Coastguard Worker 
481*35238bceSAndroid Build Coastguard Worker // Section helper that closes section when leaving scope.
482*35238bceSAndroid Build Coastguard Worker class ScopedLogSection
483*35238bceSAndroid Build Coastguard Worker {
484*35238bceSAndroid Build Coastguard Worker public:
ScopedLogSection(TestLog & log,const std::string & name,const std::string & description)485*35238bceSAndroid Build Coastguard Worker     ScopedLogSection(TestLog &log, const std::string &name, const std::string &description) : m_log(log)
486*35238bceSAndroid Build Coastguard Worker     {
487*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::Section(name, description);
488*35238bceSAndroid Build Coastguard Worker     }
489*35238bceSAndroid Build Coastguard Worker 
~ScopedLogSection(void)490*35238bceSAndroid Build Coastguard Worker     ~ScopedLogSection(void)
491*35238bceSAndroid Build Coastguard Worker     {
492*35238bceSAndroid Build Coastguard Worker         m_log << TestLog::EndSection;
493*35238bceSAndroid Build Coastguard Worker     }
494*35238bceSAndroid Build Coastguard Worker 
495*35238bceSAndroid Build Coastguard Worker private:
496*35238bceSAndroid Build Coastguard Worker     TestLog &m_log;
497*35238bceSAndroid Build Coastguard Worker };
498*35238bceSAndroid Build Coastguard Worker 
499*35238bceSAndroid Build Coastguard Worker // TestLog stream operators.
500*35238bceSAndroid Build Coastguard Worker 
operator <<(const ImageSet & imageSet)501*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const ImageSet &imageSet)
502*35238bceSAndroid Build Coastguard Worker {
503*35238bceSAndroid Build Coastguard Worker     imageSet.write(*this);
504*35238bceSAndroid Build Coastguard Worker     return *this;
505*35238bceSAndroid Build Coastguard Worker }
operator <<(const Image & image)506*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const Image &image)
507*35238bceSAndroid Build Coastguard Worker {
508*35238bceSAndroid Build Coastguard Worker     image.write(*this);
509*35238bceSAndroid Build Coastguard Worker     return *this;
510*35238bceSAndroid Build Coastguard Worker }
operator <<(const EndImageSetToken &)511*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const EndImageSetToken &)
512*35238bceSAndroid Build Coastguard Worker {
513*35238bceSAndroid Build Coastguard Worker     endImageSet();
514*35238bceSAndroid Build Coastguard Worker     return *this;
515*35238bceSAndroid Build Coastguard Worker }
operator <<(const Section & section)516*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const Section &section)
517*35238bceSAndroid Build Coastguard Worker {
518*35238bceSAndroid Build Coastguard Worker     section.write(*this);
519*35238bceSAndroid Build Coastguard Worker     return *this;
520*35238bceSAndroid Build Coastguard Worker }
operator <<(const EndSectionToken &)521*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const EndSectionToken &)
522*35238bceSAndroid Build Coastguard Worker {
523*35238bceSAndroid Build Coastguard Worker     endSection();
524*35238bceSAndroid Build Coastguard Worker     return *this;
525*35238bceSAndroid Build Coastguard Worker }
operator <<(const ShaderProgram & shaderProg)526*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const ShaderProgram &shaderProg)
527*35238bceSAndroid Build Coastguard Worker {
528*35238bceSAndroid Build Coastguard Worker     shaderProg.write(*this);
529*35238bceSAndroid Build Coastguard Worker     return *this;
530*35238bceSAndroid Build Coastguard Worker }
operator <<(const EndShaderProgramToken &)531*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const EndShaderProgramToken &)
532*35238bceSAndroid Build Coastguard Worker {
533*35238bceSAndroid Build Coastguard Worker     endShaderProgram();
534*35238bceSAndroid Build Coastguard Worker     return *this;
535*35238bceSAndroid Build Coastguard Worker }
operator <<(const Shader & shader)536*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const Shader &shader)
537*35238bceSAndroid Build Coastguard Worker {
538*35238bceSAndroid Build Coastguard Worker     shader.write(*this);
539*35238bceSAndroid Build Coastguard Worker     return *this;
540*35238bceSAndroid Build Coastguard Worker }
operator <<(const SpirVAssemblySource & module)541*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const SpirVAssemblySource &module)
542*35238bceSAndroid Build Coastguard Worker {
543*35238bceSAndroid Build Coastguard Worker     module.write(*this);
544*35238bceSAndroid Build Coastguard Worker     return *this;
545*35238bceSAndroid Build Coastguard Worker }
operator <<(const KernelSource & kernelSrc)546*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const KernelSource &kernelSrc)
547*35238bceSAndroid Build Coastguard Worker {
548*35238bceSAndroid Build Coastguard Worker     kernelSrc.write(*this);
549*35238bceSAndroid Build Coastguard Worker     return *this;
550*35238bceSAndroid Build Coastguard Worker }
operator <<(const SampleList & sampleList)551*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const SampleList &sampleList)
552*35238bceSAndroid Build Coastguard Worker {
553*35238bceSAndroid Build Coastguard Worker     sampleList.write(*this);
554*35238bceSAndroid Build Coastguard Worker     return *this;
555*35238bceSAndroid Build Coastguard Worker }
operator <<(const SampleInfoToken &)556*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const SampleInfoToken &)
557*35238bceSAndroid Build Coastguard Worker {
558*35238bceSAndroid Build Coastguard Worker     startSampleInfo();
559*35238bceSAndroid Build Coastguard Worker     return *this;
560*35238bceSAndroid Build Coastguard Worker }
operator <<(const ValueInfo & valueInfo)561*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const ValueInfo &valueInfo)
562*35238bceSAndroid Build Coastguard Worker {
563*35238bceSAndroid Build Coastguard Worker     valueInfo.write(*this);
564*35238bceSAndroid Build Coastguard Worker     return *this;
565*35238bceSAndroid Build Coastguard Worker }
operator <<(const EndSampleInfoToken &)566*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const EndSampleInfoToken &)
567*35238bceSAndroid Build Coastguard Worker {
568*35238bceSAndroid Build Coastguard Worker     endSampleInfo();
569*35238bceSAndroid Build Coastguard Worker     return *this;
570*35238bceSAndroid Build Coastguard Worker }
operator <<(const EndSampleListToken &)571*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const EndSampleListToken &)
572*35238bceSAndroid Build Coastguard Worker {
573*35238bceSAndroid Build Coastguard Worker     endSampleList();
574*35238bceSAndroid Build Coastguard Worker     return *this;
575*35238bceSAndroid Build Coastguard Worker }
576*35238bceSAndroid Build Coastguard Worker 
577*35238bceSAndroid Build Coastguard Worker template <typename T>
operator <<(const LogNumber<T> & number)578*35238bceSAndroid Build Coastguard Worker inline TestLog &TestLog::operator<<(const LogNumber<T> &number)
579*35238bceSAndroid Build Coastguard Worker {
580*35238bceSAndroid Build Coastguard Worker     number.write(*this);
581*35238bceSAndroid Build Coastguard Worker     return *this;
582*35238bceSAndroid Build Coastguard Worker }
583*35238bceSAndroid Build Coastguard Worker 
operator <<(TestLog & log,const std::exception & e)584*35238bceSAndroid Build Coastguard Worker inline TestLog &operator<<(TestLog &log, const std::exception &e)
585*35238bceSAndroid Build Coastguard Worker {
586*35238bceSAndroid Build Coastguard Worker     // \todo [2012-10-18 pyry] Print type info?
587*35238bceSAndroid Build Coastguard Worker     return log << TestLog::Message << e.what() << TestLog::EndMessage;
588*35238bceSAndroid Build Coastguard Worker }
589*35238bceSAndroid Build Coastguard Worker 
590*35238bceSAndroid Build Coastguard Worker // Utility class inline implementations.
591*35238bceSAndroid Build Coastguard Worker 
592*35238bceSAndroid Build Coastguard Worker template <typename T>
operator <<(const T & value)593*35238bceSAndroid Build Coastguard Worker inline MessageBuilder &MessageBuilder::operator<<(const T &value)
594*35238bceSAndroid Build Coastguard Worker {
595*35238bceSAndroid Build Coastguard Worker     // Overload stream operator to implement custom format
596*35238bceSAndroid Build Coastguard Worker     m_str << value;
597*35238bceSAndroid Build Coastguard Worker     return *this;
598*35238bceSAndroid Build Coastguard Worker }
599*35238bceSAndroid Build Coastguard Worker 
operator <<(const BeginMessageToken &)600*35238bceSAndroid Build Coastguard Worker inline MessageBuilder TestLog::operator<<(const BeginMessageToken &)
601*35238bceSAndroid Build Coastguard Worker {
602*35238bceSAndroid Build Coastguard Worker     return MessageBuilder(this);
603*35238bceSAndroid Build Coastguard Worker }
604*35238bceSAndroid Build Coastguard Worker 
message(void)605*35238bceSAndroid Build Coastguard Worker inline MessageBuilder TestLog::message(void)
606*35238bceSAndroid Build Coastguard Worker {
607*35238bceSAndroid Build Coastguard Worker     return MessageBuilder(this);
608*35238bceSAndroid Build Coastguard Worker }
609*35238bceSAndroid Build Coastguard Worker 
operator <<(const BeginSampleToken &)610*35238bceSAndroid Build Coastguard Worker inline SampleBuilder TestLog::operator<<(const BeginSampleToken &)
611*35238bceSAndroid Build Coastguard Worker {
612*35238bceSAndroid Build Coastguard Worker     return SampleBuilder(this);
613*35238bceSAndroid Build Coastguard Worker }
614*35238bceSAndroid Build Coastguard Worker 
write(TestLog & log) const615*35238bceSAndroid Build Coastguard Worker inline void LogImageSet::write(TestLog &log) const
616*35238bceSAndroid Build Coastguard Worker {
617*35238bceSAndroid Build Coastguard Worker     log.startImageSet(m_name.c_str(), m_description.c_str());
618*35238bceSAndroid Build Coastguard Worker }
619*35238bceSAndroid Build Coastguard Worker 
write(TestLog & log) const620*35238bceSAndroid Build Coastguard Worker inline void LogSection::write(TestLog &log) const
621*35238bceSAndroid Build Coastguard Worker {
622*35238bceSAndroid Build Coastguard Worker     log.startSection(m_name.c_str(), m_description.c_str());
623*35238bceSAndroid Build Coastguard Worker }
624*35238bceSAndroid Build Coastguard Worker 
write(TestLog & log) const625*35238bceSAndroid Build Coastguard Worker inline void LogShaderProgram::write(TestLog &log) const
626*35238bceSAndroid Build Coastguard Worker {
627*35238bceSAndroid Build Coastguard Worker     log.startShaderProgram(m_linkOk, m_linkInfoLog.c_str());
628*35238bceSAndroid Build Coastguard Worker }
629*35238bceSAndroid Build Coastguard Worker 
write(TestLog & log) const630*35238bceSAndroid Build Coastguard Worker inline void LogShader::write(TestLog &log) const
631*35238bceSAndroid Build Coastguard Worker {
632*35238bceSAndroid Build Coastguard Worker     log.writeShader(m_type, m_source.c_str(), m_compileOk, m_infoLog.c_str());
633*35238bceSAndroid Build Coastguard Worker }
634*35238bceSAndroid Build Coastguard Worker 
write(TestLog & log) const635*35238bceSAndroid Build Coastguard Worker inline void LogSpirVAssemblySource::write(TestLog &log) const
636*35238bceSAndroid Build Coastguard Worker {
637*35238bceSAndroid Build Coastguard Worker     log.writeSpirVAssemblySource(m_source.c_str());
638*35238bceSAndroid Build Coastguard Worker }
639*35238bceSAndroid Build Coastguard Worker 
write(TestLog & log) const640*35238bceSAndroid Build Coastguard Worker inline void LogKernelSource::write(TestLog &log) const
641*35238bceSAndroid Build Coastguard Worker {
642*35238bceSAndroid Build Coastguard Worker     log.writeKernelSource(m_source.c_str());
643*35238bceSAndroid Build Coastguard Worker }
644*35238bceSAndroid Build Coastguard Worker 
write(TestLog & log) const645*35238bceSAndroid Build Coastguard Worker inline void LogSampleList::write(TestLog &log) const
646*35238bceSAndroid Build Coastguard Worker {
647*35238bceSAndroid Build Coastguard Worker     log.startSampleList(m_name, m_description);
648*35238bceSAndroid Build Coastguard Worker }
649*35238bceSAndroid Build Coastguard Worker 
write(TestLog & log) const650*35238bceSAndroid Build Coastguard Worker inline void LogValueInfo::write(TestLog &log) const
651*35238bceSAndroid Build Coastguard Worker {
652*35238bceSAndroid Build Coastguard Worker     log.writeValueInfo(m_name, m_description, m_unit, m_tag);
653*35238bceSAndroid Build Coastguard Worker }
654*35238bceSAndroid Build Coastguard Worker 
655*35238bceSAndroid Build Coastguard Worker template <>
write(TestLog & log) const656*35238bceSAndroid Build Coastguard Worker inline void LogNumber<float>::write(TestLog &log) const
657*35238bceSAndroid Build Coastguard Worker {
658*35238bceSAndroid Build Coastguard Worker     log.writeFloat(m_name.c_str(), m_desc.c_str(), m_unit.c_str(), m_tag, m_value);
659*35238bceSAndroid Build Coastguard Worker }
660*35238bceSAndroid Build Coastguard Worker 
661*35238bceSAndroid Build Coastguard Worker template <>
write(TestLog & log) const662*35238bceSAndroid Build Coastguard Worker inline void LogNumber<int64_t>::write(TestLog &log) const
663*35238bceSAndroid Build Coastguard Worker {
664*35238bceSAndroid Build Coastguard Worker     log.writeInteger(m_name.c_str(), m_desc.c_str(), m_unit.c_str(), m_tag, m_value);
665*35238bceSAndroid Build Coastguard Worker }
666*35238bceSAndroid Build Coastguard Worker 
667*35238bceSAndroid Build Coastguard Worker } // namespace tcu
668*35238bceSAndroid Build Coastguard Worker 
669*35238bceSAndroid Build Coastguard Worker #endif // _TCUTESTLOG_HPP
670