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