xref: /aosp_15_r20/external/deqp/framework/opengl/gluStrUtil.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program OpenGL ES 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 OpenGL value to string utilities.
22*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker 
24*35238bceSAndroid Build Coastguard Worker #include "gluStrUtil.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
26*35238bceSAndroid Build Coastguard Worker 
27*35238bceSAndroid Build Coastguard Worker namespace glu
28*35238bceSAndroid Build Coastguard Worker {
29*35238bceSAndroid Build Coastguard Worker 
30*35238bceSAndroid Build Coastguard Worker namespace detail
31*35238bceSAndroid Build Coastguard Worker {
32*35238bceSAndroid Build Coastguard Worker 
operator <<(std::ostream & str,const BooleanPointerFmt & fmt)33*35238bceSAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &str, const BooleanPointerFmt &fmt)
34*35238bceSAndroid Build Coastguard Worker {
35*35238bceSAndroid Build Coastguard Worker     if (fmt.value)
36*35238bceSAndroid Build Coastguard Worker     {
37*35238bceSAndroid Build Coastguard Worker         str << "{ ";
38*35238bceSAndroid Build Coastguard Worker         for (uint32_t ndx = 0; ndx < fmt.size; ndx++)
39*35238bceSAndroid Build Coastguard Worker         {
40*35238bceSAndroid Build Coastguard Worker             if (ndx != 0)
41*35238bceSAndroid Build Coastguard Worker                 str << ", ";
42*35238bceSAndroid Build Coastguard Worker             str << getBooleanStr(fmt.value[ndx]);
43*35238bceSAndroid Build Coastguard Worker         }
44*35238bceSAndroid Build Coastguard Worker         str << " }";
45*35238bceSAndroid Build Coastguard Worker         return str;
46*35238bceSAndroid Build Coastguard Worker     }
47*35238bceSAndroid Build Coastguard Worker     else
48*35238bceSAndroid Build Coastguard Worker         return str << "(null)";
49*35238bceSAndroid Build Coastguard Worker }
50*35238bceSAndroid Build Coastguard Worker 
operator <<(std::ostream & str,const EnumPointerFmt & fmt)51*35238bceSAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &str, const EnumPointerFmt &fmt)
52*35238bceSAndroid Build Coastguard Worker {
53*35238bceSAndroid Build Coastguard Worker     if (fmt.value)
54*35238bceSAndroid Build Coastguard Worker     {
55*35238bceSAndroid Build Coastguard Worker         str << "{ ";
56*35238bceSAndroid Build Coastguard Worker         for (uint32_t ndx = 0; ndx < fmt.size; ndx++)
57*35238bceSAndroid Build Coastguard Worker         {
58*35238bceSAndroid Build Coastguard Worker             if (ndx != 0)
59*35238bceSAndroid Build Coastguard Worker                 str << ", ";
60*35238bceSAndroid Build Coastguard Worker             // use storage size (4) as print width for clarity
61*35238bceSAndroid Build Coastguard Worker             str << tcu::Format::Enum<int, 4>(fmt.getName, fmt.value[ndx]);
62*35238bceSAndroid Build Coastguard Worker         }
63*35238bceSAndroid Build Coastguard Worker         str << " }";
64*35238bceSAndroid Build Coastguard Worker         return str;
65*35238bceSAndroid Build Coastguard Worker     }
66*35238bceSAndroid Build Coastguard Worker     else
67*35238bceSAndroid Build Coastguard Worker         return str << "(null)";
68*35238bceSAndroid Build Coastguard Worker }
69*35238bceSAndroid Build Coastguard Worker 
operator <<(std::ostream & str,const TextureUnitStr & unitStr)70*35238bceSAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &str, const TextureUnitStr &unitStr)
71*35238bceSAndroid Build Coastguard Worker {
72*35238bceSAndroid Build Coastguard Worker     int unitNdx = unitStr.texUnit - GL_TEXTURE0;
73*35238bceSAndroid Build Coastguard Worker     if (unitNdx >= 0)
74*35238bceSAndroid Build Coastguard Worker         return str << "GL_TEXTURE" << unitNdx;
75*35238bceSAndroid Build Coastguard Worker     else
76*35238bceSAndroid Build Coastguard Worker         return str << tcu::toHex(unitStr.texUnit);
77*35238bceSAndroid Build Coastguard Worker }
78*35238bceSAndroid Build Coastguard Worker 
operator <<(std::ostream & str,const TextureParameterValueStr & valueStr)79*35238bceSAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &str, const TextureParameterValueStr &valueStr)
80*35238bceSAndroid Build Coastguard Worker {
81*35238bceSAndroid Build Coastguard Worker     switch (valueStr.param)
82*35238bceSAndroid Build Coastguard Worker     {
83*35238bceSAndroid Build Coastguard Worker     case GL_TEXTURE_WRAP_S:
84*35238bceSAndroid Build Coastguard Worker     case GL_TEXTURE_WRAP_T:
85*35238bceSAndroid Build Coastguard Worker     case GL_TEXTURE_WRAP_R:
86*35238bceSAndroid Build Coastguard Worker         return str << getTextureWrapModeStr(valueStr.value);
87*35238bceSAndroid Build Coastguard Worker 
88*35238bceSAndroid Build Coastguard Worker     case GL_TEXTURE_BASE_LEVEL:
89*35238bceSAndroid Build Coastguard Worker     case GL_TEXTURE_MAX_LEVEL:
90*35238bceSAndroid Build Coastguard Worker     case GL_TEXTURE_MAX_LOD:
91*35238bceSAndroid Build Coastguard Worker     case GL_TEXTURE_MIN_LOD:
92*35238bceSAndroid Build Coastguard Worker         return str << valueStr.value;
93*35238bceSAndroid Build Coastguard Worker 
94*35238bceSAndroid Build Coastguard Worker     case GL_TEXTURE_COMPARE_MODE:
95*35238bceSAndroid Build Coastguard Worker         return str << getTextureCompareModeStr(valueStr.value);
96*35238bceSAndroid Build Coastguard Worker 
97*35238bceSAndroid Build Coastguard Worker     case GL_TEXTURE_COMPARE_FUNC:
98*35238bceSAndroid Build Coastguard Worker         return str << getCompareFuncStr(valueStr.value);
99*35238bceSAndroid Build Coastguard Worker 
100*35238bceSAndroid Build Coastguard Worker     case GL_TEXTURE_SWIZZLE_R:
101*35238bceSAndroid Build Coastguard Worker     case GL_TEXTURE_SWIZZLE_G:
102*35238bceSAndroid Build Coastguard Worker     case GL_TEXTURE_SWIZZLE_B:
103*35238bceSAndroid Build Coastguard Worker     case GL_TEXTURE_SWIZZLE_A:
104*35238bceSAndroid Build Coastguard Worker         return str << getTextureSwizzleStr(valueStr.value);
105*35238bceSAndroid Build Coastguard Worker 
106*35238bceSAndroid Build Coastguard Worker     case GL_TEXTURE_MIN_FILTER:
107*35238bceSAndroid Build Coastguard Worker     case GL_TEXTURE_MAG_FILTER:
108*35238bceSAndroid Build Coastguard Worker         return str << getTextureFilterStr(valueStr.value);
109*35238bceSAndroid Build Coastguard Worker 
110*35238bceSAndroid Build Coastguard Worker     case GL_DEPTH_STENCIL_TEXTURE_MODE:
111*35238bceSAndroid Build Coastguard Worker         return str << getTextureDepthStencilModeStr(valueStr.value);
112*35238bceSAndroid Build Coastguard Worker 
113*35238bceSAndroid Build Coastguard Worker     default:
114*35238bceSAndroid Build Coastguard Worker         return str << tcu::toHex(valueStr.value);
115*35238bceSAndroid Build Coastguard Worker     }
116*35238bceSAndroid Build Coastguard Worker }
117*35238bceSAndroid Build Coastguard Worker 
118*35238bceSAndroid Build Coastguard Worker } // namespace detail
119*35238bceSAndroid Build Coastguard Worker 
getInvalidateAttachmentStr(const uint32_t * attachments,int numAttachments)120*35238bceSAndroid Build Coastguard Worker detail::EnumPointerFmt getInvalidateAttachmentStr(const uint32_t *attachments, int numAttachments)
121*35238bceSAndroid Build Coastguard Worker {
122*35238bceSAndroid Build Coastguard Worker     return detail::EnumPointerFmt(attachments, (uint32_t)numAttachments, getInvalidateAttachmentName);
123*35238bceSAndroid Build Coastguard Worker }
124*35238bceSAndroid Build Coastguard Worker 
operator <<(std::ostream & str,ApiType apiType)125*35238bceSAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &str, ApiType apiType)
126*35238bceSAndroid Build Coastguard Worker {
127*35238bceSAndroid Build Coastguard Worker     str << "OpenGL ";
128*35238bceSAndroid Build Coastguard Worker 
129*35238bceSAndroid Build Coastguard Worker     if (apiType.getProfile() == PROFILE_ES)
130*35238bceSAndroid Build Coastguard Worker         str << "ES ";
131*35238bceSAndroid Build Coastguard Worker 
132*35238bceSAndroid Build Coastguard Worker     str << apiType.getMajorVersion() << "." << apiType.getMinorVersion();
133*35238bceSAndroid Build Coastguard Worker 
134*35238bceSAndroid Build Coastguard Worker     if (apiType.getProfile() == PROFILE_CORE)
135*35238bceSAndroid Build Coastguard Worker         str << " core profile";
136*35238bceSAndroid Build Coastguard Worker     else if (apiType.getProfile() == PROFILE_COMPATIBILITY)
137*35238bceSAndroid Build Coastguard Worker         str << " compatibility profile";
138*35238bceSAndroid Build Coastguard Worker     else if (apiType.getProfile() != PROFILE_ES)
139*35238bceSAndroid Build Coastguard Worker         str << " (unknown profile)";
140*35238bceSAndroid Build Coastguard Worker 
141*35238bceSAndroid Build Coastguard Worker     return str;
142*35238bceSAndroid Build Coastguard Worker }
143*35238bceSAndroid Build Coastguard Worker 
operator <<(std::ostream & str,ContextType contextType)144*35238bceSAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &str, ContextType contextType)
145*35238bceSAndroid Build Coastguard Worker {
146*35238bceSAndroid Build Coastguard Worker     str << contextType.getAPI();
147*35238bceSAndroid Build Coastguard Worker 
148*35238bceSAndroid Build Coastguard Worker     if (contextType.getFlags() != ContextFlags(0))
149*35238bceSAndroid Build Coastguard Worker     {
150*35238bceSAndroid Build Coastguard Worker         static const struct
151*35238bceSAndroid Build Coastguard Worker         {
152*35238bceSAndroid Build Coastguard Worker             ContextFlags flag;
153*35238bceSAndroid Build Coastguard Worker             const char *desc;
154*35238bceSAndroid Build Coastguard Worker         } s_descs[] = {
155*35238bceSAndroid Build Coastguard Worker             {CONTEXT_DEBUG, "debug"}, {CONTEXT_FORWARD_COMPATIBLE, "forward-compatible"}, {CONTEXT_ROBUST, "robust"}};
156*35238bceSAndroid Build Coastguard Worker         ContextFlags flags = contextType.getFlags();
157*35238bceSAndroid Build Coastguard Worker 
158*35238bceSAndroid Build Coastguard Worker         str << " (";
159*35238bceSAndroid Build Coastguard Worker 
160*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_descs) && flags != 0; ndx++)
161*35238bceSAndroid Build Coastguard Worker         {
162*35238bceSAndroid Build Coastguard Worker             if ((flags & s_descs[ndx].flag) != 0)
163*35238bceSAndroid Build Coastguard Worker             {
164*35238bceSAndroid Build Coastguard Worker                 if (flags != contextType.getFlags())
165*35238bceSAndroid Build Coastguard Worker                     str << ", ";
166*35238bceSAndroid Build Coastguard Worker 
167*35238bceSAndroid Build Coastguard Worker                 str << s_descs[ndx].desc;
168*35238bceSAndroid Build Coastguard Worker                 flags = flags & ~s_descs[ndx].flag;
169*35238bceSAndroid Build Coastguard Worker             }
170*35238bceSAndroid Build Coastguard Worker         }
171*35238bceSAndroid Build Coastguard Worker 
172*35238bceSAndroid Build Coastguard Worker         if (flags != 0)
173*35238bceSAndroid Build Coastguard Worker         {
174*35238bceSAndroid Build Coastguard Worker             // Unresolved
175*35238bceSAndroid Build Coastguard Worker             if (flags != contextType.getFlags())
176*35238bceSAndroid Build Coastguard Worker                 str << ", ";
177*35238bceSAndroid Build Coastguard Worker             str << tcu::toHex(flags);
178*35238bceSAndroid Build Coastguard Worker         }
179*35238bceSAndroid Build Coastguard Worker 
180*35238bceSAndroid Build Coastguard Worker         str << ")";
181*35238bceSAndroid Build Coastguard Worker     }
182*35238bceSAndroid Build Coastguard Worker 
183*35238bceSAndroid Build Coastguard Worker     return str;
184*35238bceSAndroid Build Coastguard Worker }
185*35238bceSAndroid Build Coastguard Worker 
186*35238bceSAndroid Build Coastguard Worker #include "gluStrUtil.inl"
187*35238bceSAndroid Build Coastguard Worker 
188*35238bceSAndroid Build Coastguard Worker } // namespace glu
189