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