xref: /aosp_15_r20/external/deqp/framework/egl/egluCallLogWrapper.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program EGL Utilities
3*35238bceSAndroid Build Coastguard Worker  * ------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  *
5*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker  *
11*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker  *
19*35238bceSAndroid Build Coastguard Worker  *//*!
20*35238bceSAndroid Build Coastguard Worker  * \file
21*35238bceSAndroid Build Coastguard Worker  * \brief EGL call wrapper for logging.
22*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker 
24*35238bceSAndroid Build Coastguard Worker #include "egluCallLogWrapper.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "egluStrUtil.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "eglwLibrary.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "eglwEnums.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "deStringUtil.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "deInt32.h"
30*35238bceSAndroid Build Coastguard Worker 
31*35238bceSAndroid Build Coastguard Worker namespace eglu
32*35238bceSAndroid Build Coastguard Worker {
33*35238bceSAndroid Build Coastguard Worker 
34*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
35*35238bceSAndroid Build Coastguard Worker using tcu::toHex;
36*35238bceSAndroid Build Coastguard Worker 
CallLogWrapper(const eglw::Library & egl,TestLog & log)37*35238bceSAndroid Build Coastguard Worker CallLogWrapper::CallLogWrapper(const eglw::Library &egl, TestLog &log) : m_egl(egl), m_log(log), m_enableLog(false)
38*35238bceSAndroid Build Coastguard Worker {
39*35238bceSAndroid Build Coastguard Worker }
40*35238bceSAndroid Build Coastguard Worker 
~CallLogWrapper(void)41*35238bceSAndroid Build Coastguard Worker CallLogWrapper::~CallLogWrapper(void)
42*35238bceSAndroid Build Coastguard Worker {
43*35238bceSAndroid Build Coastguard Worker }
44*35238bceSAndroid Build Coastguard Worker 
45*35238bceSAndroid Build Coastguard Worker // Pointer formatter.
46*35238bceSAndroid Build Coastguard Worker 
47*35238bceSAndroid Build Coastguard Worker template <typename T>
48*35238bceSAndroid Build Coastguard Worker class PointerFmt
49*35238bceSAndroid Build Coastguard Worker {
50*35238bceSAndroid Build Coastguard Worker public:
51*35238bceSAndroid Build Coastguard Worker     const T *arr;
52*35238bceSAndroid Build Coastguard Worker     uint32_t size;
53*35238bceSAndroid Build Coastguard Worker 
PointerFmt(const T * arr_,uint32_t size_)54*35238bceSAndroid Build Coastguard Worker     PointerFmt(const T *arr_, uint32_t size_) : arr(arr_), size(size_)
55*35238bceSAndroid Build Coastguard Worker     {
56*35238bceSAndroid Build Coastguard Worker     }
57*35238bceSAndroid Build Coastguard Worker };
58*35238bceSAndroid Build Coastguard Worker 
59*35238bceSAndroid Build Coastguard Worker template <typename T>
operator <<(std::ostream & str,PointerFmt<T> fmt)60*35238bceSAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &str, PointerFmt<T> fmt)
61*35238bceSAndroid Build Coastguard Worker {
62*35238bceSAndroid Build Coastguard Worker     if (fmt.arr != DE_NULL)
63*35238bceSAndroid Build Coastguard Worker     {
64*35238bceSAndroid Build Coastguard Worker         str << "{ ";
65*35238bceSAndroid Build Coastguard Worker         for (uint32_t ndx = 0; ndx < fmt.size; ndx++)
66*35238bceSAndroid Build Coastguard Worker         {
67*35238bceSAndroid Build Coastguard Worker             if (ndx != 0)
68*35238bceSAndroid Build Coastguard Worker                 str << ", ";
69*35238bceSAndroid Build Coastguard Worker             str << fmt.arr[ndx];
70*35238bceSAndroid Build Coastguard Worker         }
71*35238bceSAndroid Build Coastguard Worker         str << " }";
72*35238bceSAndroid Build Coastguard Worker         return str;
73*35238bceSAndroid Build Coastguard Worker     }
74*35238bceSAndroid Build Coastguard Worker     else
75*35238bceSAndroid Build Coastguard Worker         return str << "(null)";
76*35238bceSAndroid Build Coastguard Worker }
77*35238bceSAndroid Build Coastguard Worker 
78*35238bceSAndroid Build Coastguard Worker template <typename T>
getPointerStr(const T * arr,uint32_t size)79*35238bceSAndroid Build Coastguard Worker inline PointerFmt<T> getPointerStr(const T *arr, uint32_t size)
80*35238bceSAndroid Build Coastguard Worker {
81*35238bceSAndroid Build Coastguard Worker     return PointerFmt<T>(arr, size);
82*35238bceSAndroid Build Coastguard Worker }
83*35238bceSAndroid Build Coastguard Worker 
84*35238bceSAndroid Build Coastguard Worker typedef const char *(*GetEnumNameFunc)(int value);
85*35238bceSAndroid Build Coastguard Worker 
86*35238bceSAndroid Build Coastguard Worker // Enum pointer formatter.
87*35238bceSAndroid Build Coastguard Worker 
88*35238bceSAndroid Build Coastguard Worker class EnumPointerFmt
89*35238bceSAndroid Build Coastguard Worker {
90*35238bceSAndroid Build Coastguard Worker public:
91*35238bceSAndroid Build Coastguard Worker     const int *value;
92*35238bceSAndroid Build Coastguard Worker     GetEnumNameFunc getName;
93*35238bceSAndroid Build Coastguard Worker 
EnumPointerFmt(const int * value_,GetEnumNameFunc getName_)94*35238bceSAndroid Build Coastguard Worker     EnumPointerFmt(const int *value_, GetEnumNameFunc getName_) : value(value_), getName(getName_)
95*35238bceSAndroid Build Coastguard Worker     {
96*35238bceSAndroid Build Coastguard Worker     }
97*35238bceSAndroid Build Coastguard Worker };
98*35238bceSAndroid Build Coastguard Worker 
operator <<(std::ostream & str,EnumPointerFmt fmt)99*35238bceSAndroid Build Coastguard Worker inline std::ostream &operator<<(std::ostream &str, EnumPointerFmt fmt)
100*35238bceSAndroid Build Coastguard Worker {
101*35238bceSAndroid Build Coastguard Worker     if (fmt.value)
102*35238bceSAndroid Build Coastguard Worker         return str << tcu::Format::Enum<int, 2>(fmt.getName, *fmt.value);
103*35238bceSAndroid Build Coastguard Worker     else
104*35238bceSAndroid Build Coastguard Worker         return str << "(null)";
105*35238bceSAndroid Build Coastguard Worker }
106*35238bceSAndroid Build Coastguard Worker 
getEnumPointerStr(const int * value,GetEnumNameFunc getName)107*35238bceSAndroid Build Coastguard Worker inline EnumPointerFmt getEnumPointerStr(const int *value, GetEnumNameFunc getName)
108*35238bceSAndroid Build Coastguard Worker {
109*35238bceSAndroid Build Coastguard Worker     return EnumPointerFmt(value, getName);
110*35238bceSAndroid Build Coastguard Worker }
111*35238bceSAndroid Build Coastguard Worker 
112*35238bceSAndroid Build Coastguard Worker // String formatter.
113*35238bceSAndroid Build Coastguard Worker 
114*35238bceSAndroid Build Coastguard Worker class StringFmt
115*35238bceSAndroid Build Coastguard Worker {
116*35238bceSAndroid Build Coastguard Worker public:
117*35238bceSAndroid Build Coastguard Worker     const char *str;
StringFmt(const char * str_)118*35238bceSAndroid Build Coastguard Worker     StringFmt(const char *str_) : str(str_)
119*35238bceSAndroid Build Coastguard Worker     {
120*35238bceSAndroid Build Coastguard Worker     }
121*35238bceSAndroid Build Coastguard Worker };
122*35238bceSAndroid Build Coastguard Worker 
operator <<(std::ostream & str,StringFmt fmt)123*35238bceSAndroid Build Coastguard Worker inline std::ostream &operator<<(std::ostream &str, StringFmt fmt)
124*35238bceSAndroid Build Coastguard Worker {
125*35238bceSAndroid Build Coastguard Worker     return str << (fmt.str ? fmt.str : "NULL");
126*35238bceSAndroid Build Coastguard Worker }
127*35238bceSAndroid Build Coastguard Worker 
getStringStr(const char * value)128*35238bceSAndroid Build Coastguard Worker inline StringFmt getStringStr(const char *value)
129*35238bceSAndroid Build Coastguard Worker {
130*35238bceSAndroid Build Coastguard Worker     return StringFmt(value);
131*35238bceSAndroid Build Coastguard Worker }
132*35238bceSAndroid Build Coastguard Worker 
133*35238bceSAndroid Build Coastguard Worker // Config attrib pointer formatter
134*35238bceSAndroid Build Coastguard Worker 
135*35238bceSAndroid Build Coastguard Worker class ConfigAttribValuePointerFmt
136*35238bceSAndroid Build Coastguard Worker {
137*35238bceSAndroid Build Coastguard Worker public:
138*35238bceSAndroid Build Coastguard Worker     uint32_t attrib;
139*35238bceSAndroid Build Coastguard Worker     const int *value;
ConfigAttribValuePointerFmt(uint32_t attrib_,const int * value_)140*35238bceSAndroid Build Coastguard Worker     ConfigAttribValuePointerFmt(uint32_t attrib_, const int *value_) : attrib(attrib_), value(value_)
141*35238bceSAndroid Build Coastguard Worker     {
142*35238bceSAndroid Build Coastguard Worker     }
143*35238bceSAndroid Build Coastguard Worker };
144*35238bceSAndroid Build Coastguard Worker 
getConfigAttribValuePointerStr(uint32_t attrib,const int * value)145*35238bceSAndroid Build Coastguard Worker inline ConfigAttribValuePointerFmt getConfigAttribValuePointerStr(uint32_t attrib, const int *value)
146*35238bceSAndroid Build Coastguard Worker {
147*35238bceSAndroid Build Coastguard Worker     return ConfigAttribValuePointerFmt(attrib, value);
148*35238bceSAndroid Build Coastguard Worker }
149*35238bceSAndroid Build Coastguard Worker 
operator <<(std::ostream & str,const ConfigAttribValuePointerFmt & fmt)150*35238bceSAndroid Build Coastguard Worker inline std::ostream &operator<<(std::ostream &str, const ConfigAttribValuePointerFmt &fmt)
151*35238bceSAndroid Build Coastguard Worker {
152*35238bceSAndroid Build Coastguard Worker     if (fmt.value)
153*35238bceSAndroid Build Coastguard Worker         return str << getConfigAttribValueStr(fmt.attrib, *fmt.value);
154*35238bceSAndroid Build Coastguard Worker     else
155*35238bceSAndroid Build Coastguard Worker         return str << "NULL";
156*35238bceSAndroid Build Coastguard Worker }
157*35238bceSAndroid Build Coastguard Worker 
158*35238bceSAndroid Build Coastguard Worker // Context attrib pointer formatter
159*35238bceSAndroid Build Coastguard Worker 
160*35238bceSAndroid Build Coastguard Worker class ContextAttribValuePointerFmt
161*35238bceSAndroid Build Coastguard Worker {
162*35238bceSAndroid Build Coastguard Worker public:
163*35238bceSAndroid Build Coastguard Worker     uint32_t attrib;
164*35238bceSAndroid Build Coastguard Worker     const int *value;
ContextAttribValuePointerFmt(uint32_t attrib_,const int * value_)165*35238bceSAndroid Build Coastguard Worker     ContextAttribValuePointerFmt(uint32_t attrib_, const int *value_) : attrib(attrib_), value(value_)
166*35238bceSAndroid Build Coastguard Worker     {
167*35238bceSAndroid Build Coastguard Worker     }
168*35238bceSAndroid Build Coastguard Worker };
169*35238bceSAndroid Build Coastguard Worker 
getContextAttribValuePointerStr(uint32_t attrib,const int * value)170*35238bceSAndroid Build Coastguard Worker inline ContextAttribValuePointerFmt getContextAttribValuePointerStr(uint32_t attrib, const int *value)
171*35238bceSAndroid Build Coastguard Worker {
172*35238bceSAndroid Build Coastguard Worker     return ContextAttribValuePointerFmt(attrib, value);
173*35238bceSAndroid Build Coastguard Worker }
174*35238bceSAndroid Build Coastguard Worker 
operator <<(std::ostream & str,const ContextAttribValuePointerFmt & fmt)175*35238bceSAndroid Build Coastguard Worker inline std::ostream &operator<<(std::ostream &str, const ContextAttribValuePointerFmt &fmt)
176*35238bceSAndroid Build Coastguard Worker {
177*35238bceSAndroid Build Coastguard Worker     if (fmt.value)
178*35238bceSAndroid Build Coastguard Worker         return str << getContextAttribValueStr(fmt.attrib, *fmt.value);
179*35238bceSAndroid Build Coastguard Worker     else
180*35238bceSAndroid Build Coastguard Worker         return str << "NULL";
181*35238bceSAndroid Build Coastguard Worker }
182*35238bceSAndroid Build Coastguard Worker 
183*35238bceSAndroid Build Coastguard Worker // Surface attrib pointer formatter
184*35238bceSAndroid Build Coastguard Worker 
185*35238bceSAndroid Build Coastguard Worker class SurfaceAttribValuePointerFmt
186*35238bceSAndroid Build Coastguard Worker {
187*35238bceSAndroid Build Coastguard Worker public:
188*35238bceSAndroid Build Coastguard Worker     uint32_t attrib;
189*35238bceSAndroid Build Coastguard Worker     const int *value;
SurfaceAttribValuePointerFmt(uint32_t attrib_,const int * value_)190*35238bceSAndroid Build Coastguard Worker     SurfaceAttribValuePointerFmt(uint32_t attrib_, const int *value_) : attrib(attrib_), value(value_)
191*35238bceSAndroid Build Coastguard Worker     {
192*35238bceSAndroid Build Coastguard Worker     }
193*35238bceSAndroid Build Coastguard Worker };
194*35238bceSAndroid Build Coastguard Worker 
getSurfaceAttribValuePointerStr(uint32_t attrib,const int * value)195*35238bceSAndroid Build Coastguard Worker inline SurfaceAttribValuePointerFmt getSurfaceAttribValuePointerStr(uint32_t attrib, const int *value)
196*35238bceSAndroid Build Coastguard Worker {
197*35238bceSAndroid Build Coastguard Worker     return SurfaceAttribValuePointerFmt(attrib, value);
198*35238bceSAndroid Build Coastguard Worker }
199*35238bceSAndroid Build Coastguard Worker 
operator <<(std::ostream & str,const SurfaceAttribValuePointerFmt & fmt)200*35238bceSAndroid Build Coastguard Worker inline std::ostream &operator<<(std::ostream &str, const SurfaceAttribValuePointerFmt &fmt)
201*35238bceSAndroid Build Coastguard Worker {
202*35238bceSAndroid Build Coastguard Worker     if (fmt.value)
203*35238bceSAndroid Build Coastguard Worker         return str << getSurfaceAttribValueStr(fmt.attrib, *fmt.value);
204*35238bceSAndroid Build Coastguard Worker     else
205*35238bceSAndroid Build Coastguard Worker         return str << "NULL";
206*35238bceSAndroid Build Coastguard Worker }
207*35238bceSAndroid Build Coastguard Worker 
208*35238bceSAndroid Build Coastguard Worker // EGLDisplay formatter
209*35238bceSAndroid Build Coastguard Worker 
210*35238bceSAndroid Build Coastguard Worker class EGLDisplayFmt
211*35238bceSAndroid Build Coastguard Worker {
212*35238bceSAndroid Build Coastguard Worker public:
213*35238bceSAndroid Build Coastguard Worker     eglw::EGLDisplay display;
EGLDisplayFmt(eglw::EGLDisplay display_)214*35238bceSAndroid Build Coastguard Worker     EGLDisplayFmt(eglw::EGLDisplay display_) : display(display_)
215*35238bceSAndroid Build Coastguard Worker     {
216*35238bceSAndroid Build Coastguard Worker     }
217*35238bceSAndroid Build Coastguard Worker };
218*35238bceSAndroid Build Coastguard Worker 
getEGLDisplayStr(eglw::EGLDisplay display)219*35238bceSAndroid Build Coastguard Worker inline EGLDisplayFmt getEGLDisplayStr(eglw::EGLDisplay display)
220*35238bceSAndroid Build Coastguard Worker {
221*35238bceSAndroid Build Coastguard Worker     return EGLDisplayFmt(display);
222*35238bceSAndroid Build Coastguard Worker }
223*35238bceSAndroid Build Coastguard Worker 
operator <<(std::ostream & str,const EGLDisplayFmt & fmt)224*35238bceSAndroid Build Coastguard Worker inline std::ostream &operator<<(std::ostream &str, const EGLDisplayFmt &fmt)
225*35238bceSAndroid Build Coastguard Worker {
226*35238bceSAndroid Build Coastguard Worker     if (fmt.display == EGL_NO_DISPLAY)
227*35238bceSAndroid Build Coastguard Worker         return str << "EGL_NO_DISPLAY";
228*35238bceSAndroid Build Coastguard Worker     else
229*35238bceSAndroid Build Coastguard Worker         return str << toHex(fmt.display);
230*35238bceSAndroid Build Coastguard Worker }
231*35238bceSAndroid Build Coastguard Worker 
232*35238bceSAndroid Build Coastguard Worker // EGLSurface formatter
233*35238bceSAndroid Build Coastguard Worker 
234*35238bceSAndroid Build Coastguard Worker class EGLSurfaceFmt
235*35238bceSAndroid Build Coastguard Worker {
236*35238bceSAndroid Build Coastguard Worker public:
237*35238bceSAndroid Build Coastguard Worker     eglw::EGLSurface surface;
EGLSurfaceFmt(eglw::EGLSurface surface_)238*35238bceSAndroid Build Coastguard Worker     EGLSurfaceFmt(eglw::EGLSurface surface_) : surface(surface_)
239*35238bceSAndroid Build Coastguard Worker     {
240*35238bceSAndroid Build Coastguard Worker     }
241*35238bceSAndroid Build Coastguard Worker };
242*35238bceSAndroid Build Coastguard Worker 
getEGLSurfaceStr(eglw::EGLSurface surface)243*35238bceSAndroid Build Coastguard Worker inline EGLSurfaceFmt getEGLSurfaceStr(eglw::EGLSurface surface)
244*35238bceSAndroid Build Coastguard Worker {
245*35238bceSAndroid Build Coastguard Worker     return EGLSurfaceFmt(surface);
246*35238bceSAndroid Build Coastguard Worker }
247*35238bceSAndroid Build Coastguard Worker 
operator <<(std::ostream & str,const EGLSurfaceFmt & fmt)248*35238bceSAndroid Build Coastguard Worker inline std::ostream &operator<<(std::ostream &str, const EGLSurfaceFmt &fmt)
249*35238bceSAndroid Build Coastguard Worker {
250*35238bceSAndroid Build Coastguard Worker     if (fmt.surface == EGL_NO_SURFACE)
251*35238bceSAndroid Build Coastguard Worker         return str << "EGL_NO_SURFACE";
252*35238bceSAndroid Build Coastguard Worker     else
253*35238bceSAndroid Build Coastguard Worker         return str << toHex(fmt.surface);
254*35238bceSAndroid Build Coastguard Worker }
255*35238bceSAndroid Build Coastguard Worker 
256*35238bceSAndroid Build Coastguard Worker // EGLContext formatter
257*35238bceSAndroid Build Coastguard Worker 
258*35238bceSAndroid Build Coastguard Worker class EGLContextFmt
259*35238bceSAndroid Build Coastguard Worker {
260*35238bceSAndroid Build Coastguard Worker public:
261*35238bceSAndroid Build Coastguard Worker     eglw::EGLContext context;
EGLContextFmt(eglw::EGLContext context_)262*35238bceSAndroid Build Coastguard Worker     EGLContextFmt(eglw::EGLContext context_) : context(context_)
263*35238bceSAndroid Build Coastguard Worker     {
264*35238bceSAndroid Build Coastguard Worker     }
265*35238bceSAndroid Build Coastguard Worker };
266*35238bceSAndroid Build Coastguard Worker 
getEGLContextStr(eglw::EGLContext context)267*35238bceSAndroid Build Coastguard Worker inline EGLContextFmt getEGLContextStr(eglw::EGLContext context)
268*35238bceSAndroid Build Coastguard Worker {
269*35238bceSAndroid Build Coastguard Worker     return EGLContextFmt(context);
270*35238bceSAndroid Build Coastguard Worker }
271*35238bceSAndroid Build Coastguard Worker 
operator <<(std::ostream & str,const EGLContextFmt & fmt)272*35238bceSAndroid Build Coastguard Worker inline std::ostream &operator<<(std::ostream &str, const EGLContextFmt &fmt)
273*35238bceSAndroid Build Coastguard Worker {
274*35238bceSAndroid Build Coastguard Worker     if (fmt.context == EGL_NO_CONTEXT)
275*35238bceSAndroid Build Coastguard Worker         return str << "EGL_NO_CONTEXT";
276*35238bceSAndroid Build Coastguard Worker     else
277*35238bceSAndroid Build Coastguard Worker         return str << toHex(fmt.context);
278*35238bceSAndroid Build Coastguard Worker }
279*35238bceSAndroid Build Coastguard Worker 
280*35238bceSAndroid Build Coastguard Worker // API entry-point implementations are auto-generated
281*35238bceSAndroid Build Coastguard Worker #include "egluCallLogWrapper.inl"
282*35238bceSAndroid Build Coastguard Worker 
283*35238bceSAndroid Build Coastguard Worker } // namespace eglu
284