13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program EGL Utilities
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ------------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief EGL call wrapper for logging.
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluCallLogWrapper.hpp"
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluStrUtil.hpp"
263c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwLibrary.hpp"
273c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwEnums.hpp"
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deStringUtil.hpp"
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deInt32.h"
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace eglu
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing tcu::toHex;
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing tcu::TestLog;
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
373c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry HaulosCallLogWrapper::CallLogWrapper (const eglw::Library& egl, TestLog& log)
383c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	: m_egl			(egl)
393c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	, m_log			(log)
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_enableLog	(false)
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
443c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCallLogWrapper::~CallLogWrapper (void)
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Pointer formatter.
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytemplate <typename T>
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass PointerFmt
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const T*	arr;
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint32	size;
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	PointerFmt (const T* arr_, deUint32 size_) : arr(arr_), size(size_) {}
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytemplate <typename T>
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystd::ostream& operator<< (std::ostream& str, PointerFmt<T> fmt)
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (fmt.arr != DE_NULL)
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		str << "{ ";
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		for (deUint32 ndx = 0; ndx < fmt.size; ndx++)
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (ndx != 0)
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				str << ", ";
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			str << fmt.arr[ndx];
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		str << " }";
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return str;
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	else
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return str << "(null)";
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytemplate <typename T>
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline PointerFmt<T> getPointerStr (const T* arr, deUint32 size)
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return PointerFmt<T>(arr, size);
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytypedef const char* (*GetEnumNameFunc) (int value);
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Enum pointer formatter.
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass EnumPointerFmt
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const int*		value;
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	GetEnumNameFunc	getName;
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	EnumPointerFmt (const int* value_, GetEnumNameFunc getName_) : value(value_), getName(getName_) {}
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline std::ostream& operator<< (std::ostream& str, EnumPointerFmt fmt)
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (fmt.value)
1011f99d6991ce9a27d32ec0543d95646fe4e7bf001Jarkko Pöyry		return str << tcu::Format::Enum<int, 2>(fmt.getName, *fmt.value);
1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	else
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return str << "(null)";
1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline EnumPointerFmt getEnumPointerStr (const int* value, GetEnumNameFunc getName)
1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return EnumPointerFmt(value, getName);
1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// String formatter.
1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StringFmt
1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const char* str;
1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	StringFmt (const char* str_) : str(str_) {}
1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline std::ostream& operator<< (std::ostream& str, StringFmt fmt)
1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return str << (fmt.str ? fmt.str : "NULL");
1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline StringFmt getStringStr (const char* value) { return StringFmt(value); }
1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Config attrib pointer formatter
1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ConfigAttribValuePointerFmt
1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint32		attrib;
1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const int*		value;
1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ConfigAttribValuePointerFmt (deUint32 attrib_, const int* value_) : attrib(attrib_), value(value_) {}
1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline ConfigAttribValuePointerFmt getConfigAttribValuePointerStr (deUint32 attrib, const int* value) { return ConfigAttribValuePointerFmt(attrib, value); }
1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline std::ostream& operator<< (std::ostream& str, const ConfigAttribValuePointerFmt& fmt)
1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (fmt.value)
1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return str << getConfigAttribValueStr(fmt.attrib, *fmt.value);
1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	else
1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return str << "NULL";
1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Context attrib pointer formatter
1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ContextAttribValuePointerFmt
1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint32		attrib;
1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const int*		value;
1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ContextAttribValuePointerFmt (deUint32 attrib_, const int* value_) : attrib(attrib_), value(value_) {}
1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline ContextAttribValuePointerFmt getContextAttribValuePointerStr (deUint32 attrib, const int* value) { return ContextAttribValuePointerFmt(attrib, value); }
1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline std::ostream& operator<< (std::ostream& str, const ContextAttribValuePointerFmt& fmt)
1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (fmt.value)
1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return str << getContextAttribValueStr(fmt.attrib, *fmt.value);
1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	else
1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return str << "NULL";
1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Surface attrib pointer formatter
1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass SurfaceAttribValuePointerFmt
1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint32		attrib;
1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const int*		value;
1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	SurfaceAttribValuePointerFmt (deUint32 attrib_, const int* value_) : attrib(attrib_), value(value_) {}
1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline SurfaceAttribValuePointerFmt getSurfaceAttribValuePointerStr (deUint32 attrib, const int* value) { return SurfaceAttribValuePointerFmt(attrib, value); }
1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline std::ostream& operator<< (std::ostream& str, const SurfaceAttribValuePointerFmt& fmt)
1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (fmt.value)
1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return str << getSurfaceAttribValueStr(fmt.attrib, *fmt.value);
1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	else
1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return str << "NULL";
1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// EGLDisplay formatter
1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass EGLDisplayFmt
1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
1923c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	eglw::EGLDisplay display;
1933c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	EGLDisplayFmt (eglw::EGLDisplay display_) : display(display_) {}
1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1963c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosinline EGLDisplayFmt getEGLDisplayStr (eglw::EGLDisplay display) { return EGLDisplayFmt(display); }
1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline std::ostream& operator<< (std::ostream& str, const EGLDisplayFmt& fmt)
1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (fmt.display == EGL_NO_DISPLAY)
2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return str << "EGL_NO_DISPLAY";
2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	else
2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return str << toHex(fmt.display);
2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// EGLSurface formatter
2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass EGLSurfaceFmt
2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
2113c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	eglw::EGLSurface surface;
2123c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	EGLSurfaceFmt (eglw::EGLSurface surface_) : surface(surface_) {}
2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2153c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosinline EGLSurfaceFmt getEGLSurfaceStr (eglw::EGLSurface surface) { return EGLSurfaceFmt(surface); }
2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline std::ostream& operator<< (std::ostream& str, const EGLSurfaceFmt& fmt)
2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
2193c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	if (fmt.surface == EGL_NO_SURFACE)
2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return str << "EGL_NO_SURFACE";
2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	else
2223c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		return str << toHex(fmt.surface);
2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// EGLContext formatter
2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass EGLContextFmt
2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
2303c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	eglw::EGLContext context;
2313c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	EGLContextFmt (eglw::EGLContext context_) : context(context_) {}
2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2343c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosinline EGLContextFmt getEGLContextStr (eglw::EGLContext context) { return EGLContextFmt(context); }
2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyryinline std::ostream& operator<< (std::ostream& str, const EGLContextFmt& fmt)
2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
2383c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	if (fmt.context == EGL_NO_CONTEXT)
2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return str << "EGL_NO_CONTEXT";
2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	else
2413c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		return str << toHex(fmt.context);
2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// API entry-point implementations are auto-generated
2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluCallLogWrapper.inl"
2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // eglu
248