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