1e5c31af7Sopenharmony_ci/*-------------------------------------------------------------------------
2e5c31af7Sopenharmony_ci * drawElements Quality Program OpenGL ES Utilities
3e5c31af7Sopenharmony_ci * ------------------------------------------------
4e5c31af7Sopenharmony_ci *
5e5c31af7Sopenharmony_ci * Copyright 2014 The Android Open Source Project
6e5c31af7Sopenharmony_ci *
7e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
8e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License.
9e5c31af7Sopenharmony_ci * You may obtain a copy of the License at
10e5c31af7Sopenharmony_ci *
11e5c31af7Sopenharmony_ci *      http://www.apache.org/licenses/LICENSE-2.0
12e5c31af7Sopenharmony_ci *
13e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
14e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
15e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and
17e5c31af7Sopenharmony_ci * limitations under the License.
18e5c31af7Sopenharmony_ci *
19e5c31af7Sopenharmony_ci *//*!
20e5c31af7Sopenharmony_ci * \file
21e5c31af7Sopenharmony_ci * \brief OpenGL value to string utilities.
22e5c31af7Sopenharmony_ci *//*--------------------------------------------------------------------*/
23e5c31af7Sopenharmony_ci
24e5c31af7Sopenharmony_ci#include "gluStrUtil.hpp"
25e5c31af7Sopenharmony_ci#include "glwEnums.hpp"
26e5c31af7Sopenharmony_ci
27e5c31af7Sopenharmony_cinamespace glu
28e5c31af7Sopenharmony_ci{
29e5c31af7Sopenharmony_ci
30e5c31af7Sopenharmony_cinamespace detail
31e5c31af7Sopenharmony_ci{
32e5c31af7Sopenharmony_ci
33e5c31af7Sopenharmony_cistd::ostream& operator<< (std::ostream& str, const BooleanPointerFmt& fmt)
34e5c31af7Sopenharmony_ci{
35e5c31af7Sopenharmony_ci	if (fmt.value)
36e5c31af7Sopenharmony_ci	{
37e5c31af7Sopenharmony_ci		str << "{ ";
38e5c31af7Sopenharmony_ci		for (deUint32 ndx = 0; ndx < fmt.size; ndx++)
39e5c31af7Sopenharmony_ci		{
40e5c31af7Sopenharmony_ci			if (ndx != 0)
41e5c31af7Sopenharmony_ci				str << ", ";
42e5c31af7Sopenharmony_ci			str << getBooleanStr(fmt.value[ndx]);
43e5c31af7Sopenharmony_ci		}
44e5c31af7Sopenharmony_ci		str << " }";
45e5c31af7Sopenharmony_ci		return str;
46e5c31af7Sopenharmony_ci	}
47e5c31af7Sopenharmony_ci	else
48e5c31af7Sopenharmony_ci		return str << "(null)";
49e5c31af7Sopenharmony_ci}
50e5c31af7Sopenharmony_ci
51e5c31af7Sopenharmony_ci
52e5c31af7Sopenharmony_cistd::ostream& operator<< (std::ostream& str, const EnumPointerFmt& fmt)
53e5c31af7Sopenharmony_ci{
54e5c31af7Sopenharmony_ci	if (fmt.value)
55e5c31af7Sopenharmony_ci	{
56e5c31af7Sopenharmony_ci		str << "{ ";
57e5c31af7Sopenharmony_ci		for (deUint32 ndx = 0; ndx < fmt.size; ndx++)
58e5c31af7Sopenharmony_ci		{
59e5c31af7Sopenharmony_ci			if (ndx != 0)
60e5c31af7Sopenharmony_ci				str << ", ";
61e5c31af7Sopenharmony_ci			// use storage size (4) as print width for clarity
62e5c31af7Sopenharmony_ci			str << tcu::Format::Enum<int, 4>(fmt.getName, fmt.value[ndx]);
63e5c31af7Sopenharmony_ci		}
64e5c31af7Sopenharmony_ci		str << " }";
65e5c31af7Sopenharmony_ci		return str;
66e5c31af7Sopenharmony_ci	}
67e5c31af7Sopenharmony_ci	else
68e5c31af7Sopenharmony_ci		return str << "(null)";
69e5c31af7Sopenharmony_ci}
70e5c31af7Sopenharmony_ci
71e5c31af7Sopenharmony_cistd::ostream& operator<< (std::ostream& str, const TextureUnitStr& unitStr)
72e5c31af7Sopenharmony_ci{
73e5c31af7Sopenharmony_ci	int unitNdx = unitStr.texUnit - GL_TEXTURE0;
74e5c31af7Sopenharmony_ci	if (unitNdx >= 0)
75e5c31af7Sopenharmony_ci		return str << "GL_TEXTURE" << unitNdx;
76e5c31af7Sopenharmony_ci	else
77e5c31af7Sopenharmony_ci		return str << tcu::toHex(unitStr.texUnit);
78e5c31af7Sopenharmony_ci}
79e5c31af7Sopenharmony_ci
80e5c31af7Sopenharmony_cistd::ostream& operator<< (std::ostream& str, const TextureParameterValueStr& valueStr)
81e5c31af7Sopenharmony_ci{
82e5c31af7Sopenharmony_ci	switch (valueStr.param)
83e5c31af7Sopenharmony_ci	{
84e5c31af7Sopenharmony_ci		case GL_TEXTURE_WRAP_S:
85e5c31af7Sopenharmony_ci		case GL_TEXTURE_WRAP_T:
86e5c31af7Sopenharmony_ci		case GL_TEXTURE_WRAP_R:
87e5c31af7Sopenharmony_ci			return str << getTextureWrapModeStr(valueStr.value);
88e5c31af7Sopenharmony_ci
89e5c31af7Sopenharmony_ci		case GL_TEXTURE_BASE_LEVEL:
90e5c31af7Sopenharmony_ci		case GL_TEXTURE_MAX_LEVEL:
91e5c31af7Sopenharmony_ci		case GL_TEXTURE_MAX_LOD:
92e5c31af7Sopenharmony_ci		case GL_TEXTURE_MIN_LOD:
93e5c31af7Sopenharmony_ci			return str << valueStr.value;
94e5c31af7Sopenharmony_ci
95e5c31af7Sopenharmony_ci		case GL_TEXTURE_COMPARE_MODE:
96e5c31af7Sopenharmony_ci			return str << getTextureCompareModeStr(valueStr.value);
97e5c31af7Sopenharmony_ci
98e5c31af7Sopenharmony_ci		case GL_TEXTURE_COMPARE_FUNC:
99e5c31af7Sopenharmony_ci			return str << getCompareFuncStr(valueStr.value);
100e5c31af7Sopenharmony_ci
101e5c31af7Sopenharmony_ci		case GL_TEXTURE_SWIZZLE_R:
102e5c31af7Sopenharmony_ci		case GL_TEXTURE_SWIZZLE_G:
103e5c31af7Sopenharmony_ci		case GL_TEXTURE_SWIZZLE_B:
104e5c31af7Sopenharmony_ci		case GL_TEXTURE_SWIZZLE_A:
105e5c31af7Sopenharmony_ci			return str << getTextureSwizzleStr(valueStr.value);
106e5c31af7Sopenharmony_ci
107e5c31af7Sopenharmony_ci		case GL_TEXTURE_MIN_FILTER:
108e5c31af7Sopenharmony_ci		case GL_TEXTURE_MAG_FILTER:
109e5c31af7Sopenharmony_ci			return str << getTextureFilterStr(valueStr.value);
110e5c31af7Sopenharmony_ci
111e5c31af7Sopenharmony_ci		case GL_DEPTH_STENCIL_TEXTURE_MODE:
112e5c31af7Sopenharmony_ci			return str << getTextureDepthStencilModeStr(valueStr.value);
113e5c31af7Sopenharmony_ci
114e5c31af7Sopenharmony_ci		default:
115e5c31af7Sopenharmony_ci			return str << tcu::toHex(valueStr.value);
116e5c31af7Sopenharmony_ci	}
117e5c31af7Sopenharmony_ci}
118e5c31af7Sopenharmony_ci
119e5c31af7Sopenharmony_ci} // detail
120e5c31af7Sopenharmony_ci
121e5c31af7Sopenharmony_cidetail::EnumPointerFmt getInvalidateAttachmentStr (const deUint32* attachments, int numAttachments)
122e5c31af7Sopenharmony_ci{
123e5c31af7Sopenharmony_ci	return detail::EnumPointerFmt(attachments, (deUint32)numAttachments, getInvalidateAttachmentName);
124e5c31af7Sopenharmony_ci}
125e5c31af7Sopenharmony_ci
126e5c31af7Sopenharmony_cistd::ostream& operator<< (std::ostream& str, ApiType apiType)
127e5c31af7Sopenharmony_ci{
128e5c31af7Sopenharmony_ci	str << "OpenGL ";
129e5c31af7Sopenharmony_ci
130e5c31af7Sopenharmony_ci	if (apiType.getProfile() == PROFILE_ES)
131e5c31af7Sopenharmony_ci		str << "ES ";
132e5c31af7Sopenharmony_ci
133e5c31af7Sopenharmony_ci	str << apiType.getMajorVersion() << "." << apiType.getMinorVersion();
134e5c31af7Sopenharmony_ci
135e5c31af7Sopenharmony_ci	if (apiType.getProfile() == PROFILE_CORE)
136e5c31af7Sopenharmony_ci		str << " core profile";
137e5c31af7Sopenharmony_ci	else if (apiType.getProfile() == PROFILE_COMPATIBILITY)
138e5c31af7Sopenharmony_ci		str << " compatibility profile";
139e5c31af7Sopenharmony_ci	else if (apiType.getProfile() != PROFILE_ES)
140e5c31af7Sopenharmony_ci		str << " (unknown profile)";
141e5c31af7Sopenharmony_ci
142e5c31af7Sopenharmony_ci	return str;
143e5c31af7Sopenharmony_ci}
144e5c31af7Sopenharmony_ci
145e5c31af7Sopenharmony_cistd::ostream& operator<< (std::ostream& str, ContextType contextType)
146e5c31af7Sopenharmony_ci{
147e5c31af7Sopenharmony_ci	str << contextType.getAPI();
148e5c31af7Sopenharmony_ci
149e5c31af7Sopenharmony_ci	if (contextType.getFlags() != ContextFlags(0))
150e5c31af7Sopenharmony_ci	{
151e5c31af7Sopenharmony_ci		static const struct
152e5c31af7Sopenharmony_ci		{
153e5c31af7Sopenharmony_ci			ContextFlags	flag;
154e5c31af7Sopenharmony_ci			const char*		desc;
155e5c31af7Sopenharmony_ci		} s_descs[] =
156e5c31af7Sopenharmony_ci		{
157e5c31af7Sopenharmony_ci			{ CONTEXT_DEBUG,				"debug"					},
158e5c31af7Sopenharmony_ci			{ CONTEXT_FORWARD_COMPATIBLE,	"forward-compatible"	},
159e5c31af7Sopenharmony_ci			{ CONTEXT_ROBUST,				"robust"				}
160e5c31af7Sopenharmony_ci		};
161e5c31af7Sopenharmony_ci		ContextFlags	flags	= contextType.getFlags();
162e5c31af7Sopenharmony_ci
163e5c31af7Sopenharmony_ci		str << " (";
164e5c31af7Sopenharmony_ci
165e5c31af7Sopenharmony_ci		for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_descs) && flags != 0; ndx++)
166e5c31af7Sopenharmony_ci		{
167e5c31af7Sopenharmony_ci			if ((flags & s_descs[ndx].flag) != 0)
168e5c31af7Sopenharmony_ci			{
169e5c31af7Sopenharmony_ci				if (flags != contextType.getFlags())
170e5c31af7Sopenharmony_ci					str << ", ";
171e5c31af7Sopenharmony_ci
172e5c31af7Sopenharmony_ci				str << s_descs[ndx].desc;
173e5c31af7Sopenharmony_ci				flags = flags & ~s_descs[ndx].flag;
174e5c31af7Sopenharmony_ci			}
175e5c31af7Sopenharmony_ci		}
176e5c31af7Sopenharmony_ci
177e5c31af7Sopenharmony_ci		if (flags != 0)
178e5c31af7Sopenharmony_ci		{
179e5c31af7Sopenharmony_ci			// Unresolved
180e5c31af7Sopenharmony_ci			if (flags != contextType.getFlags())
181e5c31af7Sopenharmony_ci				str << ", ";
182e5c31af7Sopenharmony_ci			str << tcu::toHex(flags);
183e5c31af7Sopenharmony_ci		}
184e5c31af7Sopenharmony_ci
185e5c31af7Sopenharmony_ci		str << ")";
186e5c31af7Sopenharmony_ci	}
187e5c31af7Sopenharmony_ci
188e5c31af7Sopenharmony_ci	return str;
189e5c31af7Sopenharmony_ci}
190e5c31af7Sopenharmony_ci
191e5c31af7Sopenharmony_ci#include "gluStrUtil.inl"
192e5c31af7Sopenharmony_ci
193e5c31af7Sopenharmony_ci} // glu
194