xref: /aosp_15_r20/external/deqp/framework/egl/egluStrUtil.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 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