1 /*------------------------------------------------------------------------- 2 * drawElements Quality Program EGL 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 EGL String Utilities. 22 *//*--------------------------------------------------------------------*/ 23 24 #include "egluStrUtil.hpp" 25 #include "eglwEnums.hpp" 26 27 namespace eglu 28 { 29 30 std::ostream& operator<< (std::ostream& str, const ConfigAttribValueFmt& attribFmt) 31 { 32 switch (attribFmt.attribute) 33 { 34 case EGL_COLOR_BUFFER_TYPE: 35 return str << getColorBufferTypeStr(attribFmt.value); 36 37 case EGL_CONFIG_CAVEAT: 38 return str << getConfigCaveatStr(attribFmt.value); 39 40 case EGL_CONFORMANT: 41 case EGL_RENDERABLE_TYPE: 42 return str << getAPIBitsStr(attribFmt.value); 43 44 case EGL_SURFACE_TYPE: 45 return str << getSurfaceBitsStr(attribFmt.value); 46 47 case EGL_MATCH_NATIVE_PIXMAP: 48 if (attribFmt.value == EGL_NONE) 49 return str << "EGL_NONE"; 50 else 51 return str << tcu::toHex(attribFmt.value); 52 53 case EGL_TRANSPARENT_TYPE: 54 return str << getTransparentTypeStr(attribFmt.value); 55 56 case EGL_BIND_TO_TEXTURE_RGB: 57 case EGL_BIND_TO_TEXTURE_RGBA: 58 case EGL_NATIVE_RENDERABLE: 59 return str << getBoolDontCareStr(attribFmt.value); 60 61 case EGL_ALPHA_MASK_SIZE: 62 case EGL_ALPHA_SIZE: 63 case EGL_BLUE_SIZE: 64 case EGL_BUFFER_SIZE: 65 case EGL_CONFIG_ID: 66 case EGL_DEPTH_SIZE: 67 case EGL_GREEN_SIZE: 68 case EGL_LEVEL: 69 case EGL_LUMINANCE_SIZE: 70 case EGL_MAX_SWAP_INTERVAL: 71 case EGL_MIN_SWAP_INTERVAL: 72 case EGL_RED_SIZE: 73 case EGL_SAMPLE_BUFFERS: 74 case EGL_SAMPLES: 75 case EGL_STENCIL_SIZE: 76 case EGL_TRANSPARENT_RED_VALUE: 77 case EGL_TRANSPARENT_GREEN_VALUE: 78 case EGL_TRANSPARENT_BLUE_VALUE: 79 return str << (int)attribFmt.value; 80 81 default: 82 return str << tcu::toHex(attribFmt.value); 83 } 84 } 85 86 std::ostream& operator<< (std::ostream& str, const ContextAttribValueFmt& attribFmt) 87 { 88 switch (attribFmt.attribute) 89 { 90 case EGL_CONFIG_ID: 91 case EGL_CONTEXT_CLIENT_VERSION: 92 return str << (int)attribFmt.value; 93 94 case EGL_CONTEXT_CLIENT_TYPE: 95 return str << getAPIStr(attribFmt.value); 96 97 case EGL_RENDER_BUFFER: 98 return str << getRenderBufferStr(attribFmt.value); 99 100 default: 101 return str << tcu::toHex(attribFmt.value); 102 } 103 } 104 105 std::ostream& operator<< (std::ostream& str, const SurfaceAttribValueFmt& attribFmt) 106 { 107 switch (attribFmt.attribute) 108 { 109 case EGL_CONFIG_ID: 110 case EGL_WIDTH: 111 case EGL_HEIGHT: 112 case EGL_HORIZONTAL_RESOLUTION: 113 case EGL_VERTICAL_RESOLUTION: 114 case EGL_PIXEL_ASPECT_RATIO: 115 return str << (int)attribFmt.value; 116 117 case EGL_LARGEST_PBUFFER: 118 case EGL_MIPMAP_TEXTURE: 119 return str << getBoolDontCareStr(attribFmt.value); 120 121 case EGL_MULTISAMPLE_RESOLVE: 122 return str << getMultisampleResolveStr(attribFmt.value); 123 124 case EGL_RENDER_BUFFER: 125 return str << getRenderBufferStr(attribFmt.value); 126 127 case EGL_SWAP_BEHAVIOR: 128 return str << getSwapBehaviorStr(attribFmt.value); 129 130 case EGL_TEXTURE_FORMAT: 131 return str << getTextureFormatStr(attribFmt.value); 132 133 case EGL_TEXTURE_TARGET: 134 return str << getTextureTargetStr(attribFmt.value); 135 136 case EGL_ALPHA_FORMAT: 137 return str << getAlphaFormatStr(attribFmt.value); 138 139 case EGL_COLORSPACE: 140 return str << getColorspaceStr(attribFmt.value); 141 142 default: 143 return str << tcu::toHex(attribFmt.value); 144 } 145 } 146 147 std::ostream& operator<< (std::ostream& str, const ConfigAttribListFmt& fmt) 148 { 149 int pos = 0; 150 151 str << "{ "; 152 153 for (;;) 154 { 155 int attrib = fmt.attribs[pos]; 156 157 if (pos != 0) 158 str << ", "; 159 160 if (attrib == EGL_NONE) 161 { 162 // Terminate. 163 str << "EGL_NONE"; 164 break; 165 } 166 167 const char* attribName = getConfigAttribName(attrib); 168 169 if (attribName) 170 { 171 // Valid attribute, print value. 172 str << attribName << ", " << getConfigAttribValueStr(attrib, fmt.attribs[pos+1]); 173 pos += 2; 174 } 175 else 176 { 177 // Invalid attribute. Terminate parsing. 178 str << tcu::toHex(attrib) << ", ???"; 179 break; 180 } 181 } 182 183 str << " }"; 184 return str; 185 } 186 187 std::ostream& operator<< (std::ostream& str, const SurfaceAttribListFmt& fmt) 188 { 189 int pos = 0; 190 191 str << "{ "; 192 193 for (;;) 194 { 195 int attrib = fmt.attribs[pos]; 196 197 if (pos != 0) 198 str << ", "; 199 200 if (attrib == EGL_NONE) 201 { 202 // Terminate. 203 str << "EGL_NONE"; 204 break; 205 } 206 207 const char* attribName = getSurfaceAttribName(attrib); 208 209 if (attribName) 210 { 211 // Valid attribute, print value. 212 str << attribName << ", " << getSurfaceAttribValueStr(attrib, fmt.attribs[pos+1]); 213 pos += 2; 214 } 215 else 216 { 217 // Invalid attribute. Terminate parsing. 218 str << tcu::toHex(attrib) << ", ???"; 219 break; 220 } 221 } 222 223 str << " }"; 224 return str; 225 } 226 227 std::ostream& operator<< (std::ostream& str, const ContextAttribListFmt& fmt) 228 { 229 int pos = 0; 230 231 str << "{ "; 232 233 for (;;) 234 { 235 int attrib = fmt.attribs[pos]; 236 237 if (pos != 0) 238 str << ", "; 239 240 if (attrib == EGL_NONE) 241 { 242 // Terminate. 243 str << "EGL_NONE"; 244 break; 245 } 246 247 const char* attribName = getContextAttribName(attrib); 248 249 if (attribName) 250 { 251 // Valid attribute, print value. 252 str << attribName << ", " << getContextAttribValueStr(attrib, fmt.attribs[pos+1]); 253 pos += 2; 254 } 255 else 256 { 257 // Invalid attribute. Terminate parsing. 258 str << tcu::toHex(attrib) << ", ???"; 259 break; 260 } 261 } 262 263 str << " }"; 264 return str; 265 } 266 267 #include "egluStrUtil.inl" 268 269 } // eglu 270