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