Home | History | Annotate | Download | only in egl
      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 call wrapper for logging.
     22  *//*--------------------------------------------------------------------*/
     23 
     24 #include "egluCallLogWrapper.hpp"
     25 #include "egluStrUtil.hpp"
     26 #include "deStringUtil.hpp"
     27 #include "deInt32.h"
     28 
     29 namespace eglu
     30 {
     31 
     32 using tcu::toHex;
     33 using tcu::TestLog;
     34 
     35 CallLogWrapper::CallLogWrapper (TestLog& log)
     36 	: m_log			(log)
     37 	, m_enableLog	(false)
     38 {
     39 }
     40 
     41 CallLogWrapper::~CallLogWrapper (void)
     42 {
     43 }
     44 
     45 // Pointer formatter.
     46 
     47 template <typename T>
     48 class PointerFmt
     49 {
     50 public:
     51 	const T*	arr;
     52 	deUint32	size;
     53 
     54 	PointerFmt (const T* arr_, deUint32 size_) : arr(arr_), size(size_) {}
     55 };
     56 
     57 template <typename T>
     58 std::ostream& operator<< (std::ostream& str, PointerFmt<T> fmt)
     59 {
     60 	if (fmt.arr != DE_NULL)
     61 	{
     62 		str << "{ ";
     63 		for (deUint32 ndx = 0; ndx < fmt.size; ndx++)
     64 		{
     65 			if (ndx != 0)
     66 				str << ", ";
     67 			str << fmt.arr[ndx];
     68 		}
     69 		str << " }";
     70 		return str;
     71 	}
     72 	else
     73 		return str << "(null)";
     74 }
     75 
     76 template <typename T>
     77 inline PointerFmt<T> getPointerStr (const T* arr, deUint32 size)
     78 {
     79 	return PointerFmt<T>(arr, size);
     80 }
     81 
     82 typedef const char* (*GetEnumNameFunc) (int value);
     83 
     84 // Enum pointer formatter.
     85 
     86 class EnumPointerFmt
     87 {
     88 public:
     89 	const int*		value;
     90 	GetEnumNameFunc	getName;
     91 
     92 	EnumPointerFmt (const int* value_, GetEnumNameFunc getName_) : value(value_), getName(getName_) {}
     93 };
     94 
     95 inline std::ostream& operator<< (std::ostream& str, EnumPointerFmt fmt)
     96 {
     97 	if (fmt.value)
     98 		return str << tcu::Format::Enum(fmt.getName, *fmt.value);
     99 	else
    100 		return str << "(null)";
    101 }
    102 
    103 inline EnumPointerFmt getEnumPointerStr (const int* value, GetEnumNameFunc getName)
    104 {
    105 	return EnumPointerFmt(value, getName);
    106 }
    107 
    108 // String formatter.
    109 
    110 class StringFmt
    111 {
    112 public:
    113 	const char* str;
    114 	StringFmt (const char* str_) : str(str_) {}
    115 };
    116 
    117 inline std::ostream& operator<< (std::ostream& str, StringFmt fmt)
    118 {
    119 	return str << (fmt.str ? fmt.str : "NULL");
    120 }
    121 
    122 inline StringFmt getStringStr (const char* value) { return StringFmt(value); }
    123 
    124 // Config attrib pointer formatter
    125 
    126 class ConfigAttribValuePointerFmt
    127 {
    128 public:
    129 	deUint32		attrib;
    130 	const int*		value;
    131 	ConfigAttribValuePointerFmt (deUint32 attrib_, const int* value_) : attrib(attrib_), value(value_) {}
    132 };
    133 
    134 inline ConfigAttribValuePointerFmt getConfigAttribValuePointerStr (deUint32 attrib, const int* value) { return ConfigAttribValuePointerFmt(attrib, value); }
    135 
    136 inline std::ostream& operator<< (std::ostream& str, const ConfigAttribValuePointerFmt& fmt)
    137 {
    138 	if (fmt.value)
    139 		return str << getConfigAttribValueStr(fmt.attrib, *fmt.value);
    140 	else
    141 		return str << "NULL";
    142 }
    143 
    144 // Context attrib pointer formatter
    145 
    146 class ContextAttribValuePointerFmt
    147 {
    148 public:
    149 	deUint32		attrib;
    150 	const int*		value;
    151 	ContextAttribValuePointerFmt (deUint32 attrib_, const int* value_) : attrib(attrib_), value(value_) {}
    152 };
    153 
    154 inline ContextAttribValuePointerFmt getContextAttribValuePointerStr (deUint32 attrib, const int* value) { return ContextAttribValuePointerFmt(attrib, value); }
    155 
    156 inline std::ostream& operator<< (std::ostream& str, const ContextAttribValuePointerFmt& fmt)
    157 {
    158 	if (fmt.value)
    159 		return str << getContextAttribValueStr(fmt.attrib, *fmt.value);
    160 	else
    161 		return str << "NULL";
    162 }
    163 
    164 // Surface attrib pointer formatter
    165 
    166 class SurfaceAttribValuePointerFmt
    167 {
    168 public:
    169 	deUint32		attrib;
    170 	const int*		value;
    171 	SurfaceAttribValuePointerFmt (deUint32 attrib_, const int* value_) : attrib(attrib_), value(value_) {}
    172 };
    173 
    174 inline SurfaceAttribValuePointerFmt getSurfaceAttribValuePointerStr (deUint32 attrib, const int* value) { return SurfaceAttribValuePointerFmt(attrib, value); }
    175 
    176 inline std::ostream& operator<< (std::ostream& str, const SurfaceAttribValuePointerFmt& fmt)
    177 {
    178 	if (fmt.value)
    179 		return str << getSurfaceAttribValueStr(fmt.attrib, *fmt.value);
    180 	else
    181 		return str << "NULL";
    182 }
    183 
    184 // EGLDisplay formatter
    185 
    186 class EGLDisplayFmt
    187 {
    188 public:
    189 	EGLDisplay display;
    190 	EGLDisplayFmt (EGLDisplay display_) : display(display_) {}
    191 };
    192 
    193 inline EGLDisplayFmt getEGLDisplayStr (EGLDisplay display) { return EGLDisplayFmt(display); }
    194 
    195 inline std::ostream& operator<< (std::ostream& str, const EGLDisplayFmt& fmt)
    196 {
    197 	if (fmt.display == EGL_NO_DISPLAY)
    198 		return str << "EGL_NO_DISPLAY";
    199 	else
    200 		return str << toHex(fmt.display);
    201 }
    202 
    203 // EGLSurface formatter
    204 
    205 class EGLSurfaceFmt
    206 {
    207 public:
    208 	EGLSurface display;
    209 	EGLSurfaceFmt (EGLSurface display_) : display(display_) {}
    210 };
    211 
    212 inline EGLSurfaceFmt getEGLSurfaceStr (EGLSurface display) { return EGLSurfaceFmt(display); }
    213 
    214 inline std::ostream& operator<< (std::ostream& str, const EGLSurfaceFmt& fmt)
    215 {
    216 	if (fmt.display == EGL_NO_SURFACE)
    217 		return str << "EGL_NO_SURFACE";
    218 	else
    219 		return str << toHex(fmt.display);
    220 }
    221 
    222 // EGLContext formatter
    223 
    224 class EGLContextFmt
    225 {
    226 public:
    227 	EGLContext display;
    228 	EGLContextFmt (EGLContext display_) : display(display_) {}
    229 };
    230 
    231 inline EGLContextFmt getEGLContextStr (EGLContext display) { return EGLContextFmt(display); }
    232 
    233 inline std::ostream& operator<< (std::ostream& str, const EGLContextFmt& fmt)
    234 {
    235 	if (fmt.display == EGL_NO_CONTEXT)
    236 		return str << "EGL_NO_CONTEXT";
    237 	else
    238 		return str << toHex(fmt.display);
    239 }
    240 
    241 // API entry-point implementations are auto-generated
    242 #include "egluCallLogWrapper.inl"
    243 
    244 } // eglu
    245