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 String Utilities.
22  *//*--------------------------------------------------------------------*/
23 
24 #include "egluStrUtil.hpp"
25 #include "eglwEnums.hpp"
26 
27 namespace eglu
28 {
29 
operator <<(std::ostream & str,const ConfigAttribValueFmt & attribFmt)30 std::ostream& operator<< (std::ostream& str, const ConfigAttribValueFmt& attribFmt)
31 {
32 	switch (attribFmt.attribute)
33 	{
34 		case EGL_COLOR_BUFFER_TYPE:
35 			return str << getColorBufferTypeStr(attribFmt.value);
36 
37 		case EGL_CONFIG_CAVEAT:
38 			return str << getConfigCaveatStr(attribFmt.value);
39 
40 		case EGL_CONFORMANT:
41 		case EGL_RENDERABLE_TYPE:
42 			return str << getAPIBitsStr(attribFmt.value);
43 
44 		case EGL_SURFACE_TYPE:
45 			return str << getSurfaceBitsStr(attribFmt.value);
46 
47 		case EGL_MATCH_NATIVE_PIXMAP:
48 			if (attribFmt.value == EGL_NONE)
49 				return str << "EGL_NONE";
50 			else
51 				return str << tcu::toHex(attribFmt.value);
52 
53 		case EGL_TRANSPARENT_TYPE:
54 			return str << getTransparentTypeStr(attribFmt.value);
55 
56 		case EGL_BIND_TO_TEXTURE_RGB:
57 		case EGL_BIND_TO_TEXTURE_RGBA:
58 		case EGL_NATIVE_RENDERABLE:
59 			return str << getBoolDontCareStr(attribFmt.value);
60 
61 		case EGL_ALPHA_MASK_SIZE:
62 		case EGL_ALPHA_SIZE:
63 		case EGL_BLUE_SIZE:
64 		case EGL_BUFFER_SIZE:
65 		case EGL_CONFIG_ID:
66 		case EGL_DEPTH_SIZE:
67 		case EGL_GREEN_SIZE:
68 		case EGL_LEVEL:
69 		case EGL_LUMINANCE_SIZE:
70 		case EGL_MAX_SWAP_INTERVAL:
71 		case EGL_MIN_SWAP_INTERVAL:
72 		case EGL_RED_SIZE:
73 		case EGL_SAMPLE_BUFFERS:
74 		case EGL_SAMPLES:
75 		case EGL_STENCIL_SIZE:
76 		case EGL_TRANSPARENT_RED_VALUE:
77 		case EGL_TRANSPARENT_GREEN_VALUE:
78 		case EGL_TRANSPARENT_BLUE_VALUE:
79 			return str << (int)attribFmt.value;
80 
81 		default:
82 			return str << tcu::toHex(attribFmt.value);
83 	}
84 }
85 
operator <<(std::ostream & str,const ContextAttribValueFmt & attribFmt)86 std::ostream& operator<< (std::ostream& str, const ContextAttribValueFmt& attribFmt)
87 {
88 	switch (attribFmt.attribute)
89 	{
90 		case EGL_CONFIG_ID:
91 		case EGL_CONTEXT_CLIENT_VERSION:
92 			return str << (int)attribFmt.value;
93 
94 		case EGL_CONTEXT_CLIENT_TYPE:
95 			return str << getAPIStr(attribFmt.value);
96 
97 		case EGL_RENDER_BUFFER:
98 			return str << getRenderBufferStr(attribFmt.value);
99 
100 		default:
101 			return str << tcu::toHex(attribFmt.value);
102 	}
103 }
104 
operator <<(std::ostream & str,const SurfaceAttribValueFmt & attribFmt)105 std::ostream& operator<< (std::ostream& str, const SurfaceAttribValueFmt& attribFmt)
106 {
107 	switch (attribFmt.attribute)
108 	{
109 		case EGL_CONFIG_ID:
110 		case EGL_WIDTH:
111 		case EGL_HEIGHT:
112 		case EGL_HORIZONTAL_RESOLUTION:
113 		case EGL_VERTICAL_RESOLUTION:
114 		case EGL_PIXEL_ASPECT_RATIO:
115 			return str << (int)attribFmt.value;
116 
117 		case EGL_LARGEST_PBUFFER:
118 		case EGL_MIPMAP_TEXTURE:
119 			return str << getBoolDontCareStr(attribFmt.value);
120 
121 		case EGL_MULTISAMPLE_RESOLVE:
122 			return str << getMultisampleResolveStr(attribFmt.value);
123 
124 		case EGL_RENDER_BUFFER:
125 			return str << getRenderBufferStr(attribFmt.value);
126 
127 		case EGL_SWAP_BEHAVIOR:
128 			return str << getSwapBehaviorStr(attribFmt.value);
129 
130 		case EGL_TEXTURE_FORMAT:
131 			return str << getTextureFormatStr(attribFmt.value);
132 
133 		case EGL_TEXTURE_TARGET:
134 			return str << getTextureTargetStr(attribFmt.value);
135 
136 		case EGL_ALPHA_FORMAT:
137 			return str << getAlphaFormatStr(attribFmt.value);
138 
139 		case EGL_COLORSPACE:
140 			return str << getColorspaceStr(attribFmt.value);
141 
142 		default:
143 			return str << tcu::toHex(attribFmt.value);
144 	}
145 }
146 
operator <<(std::ostream & str,const ConfigAttribListFmt & fmt)147 std::ostream& operator<< (std::ostream& str, const ConfigAttribListFmt& fmt)
148 {
149 	int pos = 0;
150 
151 	str << "{ ";
152 
153 	for (;;)
154 	{
155 		int attrib = fmt.attribs[pos];
156 
157 		if (pos != 0)
158 			str << ", ";
159 
160 		if (attrib == EGL_NONE)
161 		{
162 			// Terminate.
163 			str << "EGL_NONE";
164 			break;
165 		}
166 
167 		const char*	attribName = getConfigAttribName(attrib);
168 
169 		if (attribName)
170 		{
171 			// Valid attribute, print value.
172 			str << attribName << ", " << getConfigAttribValueStr(attrib, fmt.attribs[pos+1]);
173 			pos += 2;
174 		}
175 		else
176 		{
177 			// Invalid attribute. Terminate parsing.
178 			str << tcu::toHex(attrib) << ", ???";
179 			break;
180 		}
181 	}
182 
183 	str << " }";
184 	return str;
185 }
186 
operator <<(std::ostream & str,const SurfaceAttribListFmt & fmt)187 std::ostream& operator<< (std::ostream& str, const SurfaceAttribListFmt& fmt)
188 {
189 	int pos = 0;
190 
191 	str << "{ ";
192 
193 	for (;;)
194 	{
195 		int attrib = fmt.attribs[pos];
196 
197 		if (pos != 0)
198 			str << ", ";
199 
200 		if (attrib == EGL_NONE)
201 		{
202 			// Terminate.
203 			str << "EGL_NONE";
204 			break;
205 		}
206 
207 		const char*	attribName = getSurfaceAttribName(attrib);
208 
209 		if (attribName)
210 		{
211 			// Valid attribute, print value.
212 			str << attribName << ", " << getSurfaceAttribValueStr(attrib, fmt.attribs[pos+1]);
213 			pos += 2;
214 		}
215 		else
216 		{
217 			// Invalid attribute. Terminate parsing.
218 			str << tcu::toHex(attrib) << ", ???";
219 			break;
220 		}
221 	}
222 
223 	str << " }";
224 	return str;
225 }
226 
operator <<(std::ostream & str,const ContextAttribListFmt & fmt)227 std::ostream& operator<< (std::ostream& str, const ContextAttribListFmt& fmt)
228 {
229 	int pos = 0;
230 
231 	str << "{ ";
232 
233 	for (;;)
234 	{
235 		int attrib = fmt.attribs[pos];
236 
237 		if (pos != 0)
238 			str << ", ";
239 
240 		if (attrib == EGL_NONE)
241 		{
242 			// Terminate.
243 			str << "EGL_NONE";
244 			break;
245 		}
246 
247 		const char*	attribName = getContextAttribName(attrib);
248 
249 		if (attribName)
250 		{
251 			// Valid attribute, print value.
252 			str << attribName << ", " << getContextAttribValueStr(attrib, fmt.attribs[pos+1]);
253 			pos += 2;
254 		}
255 		else
256 		{
257 			// Invalid attribute. Terminate parsing.
258 			str << tcu::toHex(attrib) << ", ???";
259 			break;
260 		}
261 	}
262 
263 	str << " }";
264 	return str;
265 }
266 
267 #include "egluStrUtil.inl"
268 
269 } // eglu
270