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