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