/usr/include/thunderbird/skia/GrGLConfig.h is in thunderbird-dev 1:38.6.0+build1-0ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | /*
* Copyright 2011 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef GrGLConfig_DEFINED
#define GrGLConfig_DEFINED
#include "GrTypes.h"
/**
* Optional GL config file.
*/
#ifdef GR_GL_CUSTOM_SETUP_HEADER
#include GR_GL_CUSTOM_SETUP_HEADER
#endif
#if !defined(GR_GL_FUNCTION_TYPE)
#define GR_GL_FUNCTION_TYPE
#endif
/**
* The following are optional defines that can be enabled at the compiler
* command line, in a IDE project, in a GrUserConfig.h file, or in a GL custom
* file (if one is in use). If a GR_GL_CUSTOM_SETUP_HEADER is used they can
* also be placed there.
*
* GR_GL_LOG_CALLS: if 1 Gr can print every GL call using GrPrintf. Defaults to
* 0. Logging can be enabled and disabled at runtime using a debugger via to
* global gLogCallsGL. The initial value of gLogCallsGL is controlled by
* GR_GL_LOG_CALLS_START.
*
* GR_GL_LOG_CALLS_START: controls the initial value of gLogCallsGL when
* GR_GL_LOG_CALLS is 1. Defaults to 0.
*
* GR_GL_CHECK_ERROR: if enabled Gr can do a glGetError() after every GL call.
* Defaults to 1 if SK_DEBUG is set, otherwise 0. When GR_GL_CHECK_ERROR is 1
* this can be toggled in a debugger using the gCheckErrorGL global. The initial
* value of gCheckErrorGL is controlled by by GR_GL_CHECK_ERROR_START.
*
* GR_GL_CHECK_ERROR_START: controls the initial value of gCheckErrorGL
* when GR_GL_CHECK_ERROR is 1. Defaults to 1.
*
* GR_GL_NO_CONSTANT_ATTRIBUTES: if this evaluates to true then the GL backend
* will use uniforms instead of attributes in all cases when there is not
* per-vertex data. This is important when the underlying GL implementation
* doesn't actually support immediate style attribute values (e.g. when
* the GL stream is converted to DX as in ANGLE on Chrome). Defaults to 0.
*
* GR_GL_USE_BUFFER_DATA_NULL_HINT: When specifing new data for a vertex/index
* buffer that replaces old data Ganesh can give a hint to the driver that the
* previous data will not be used in future draws like this:
* glBufferData(GL_..._BUFFER, size, NULL, usage); //<--hint, NULL means
* glBufferSubData(GL_..._BUFFER, 0, lessThanSize, data) // old data can't be
* // used again.
* However, this can be an unoptimization on some platforms, esp. Chrome.
* Chrome's cmd buffer will create a new allocation and memset the whole thing
* to zero (for security reasons). Defaults to 1 (enabled).
*
* GR_GL_PER_GL_FUNC_CALLBACK: When set to 1 the GrGLInterface object provides
* a function pointer that is called just before every gl function. The ptr must
* be valid (i.e. there is no NULL check). However, by default the callback will
* be set to a function that does nothing. The signature of the function is:
* void function(const GrGLInterface*)
* It is not extern "C".
* The GrGLInterface field fCallback specifies the function ptr and there is an
* additional field fCallbackData of type intptr_t for client data.
*
* GR_GL_RGBA_8888_PIXEL_OPS_SLOW: Set this to 1 if it is known that performing
* glReadPixels / glTex(Sub)Image with format=GL_RGBA, type=GL_UNISIGNED_BYTE is
* significantly slower than format=GL_BGRA, type=GL_UNISIGNED_BYTE.
*
* GR_GL_FULL_READPIXELS_FASTER_THAN_PARTIAL: Set this to 1 if calling
* glReadPixels to read the entire framebuffer is faster than calling it with
* the same sized rectangle but with a framebuffer bound that is larger than
* the rectangle read.
*
* GR_GL_CHECK_ALLOC_WITH_GET_ERROR: If set to 1 this will then glTexImage,
* glBufferData, glRenderbufferStorage, etc will be checked for errors. This
* amounts to ensuring the error is GL_NO_ERROR, calling the allocating
* function, and then checking that the error is still GL_NO_ERROR. When the
* value is 0 we will assume no error was generated without checking.
*
* GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT: We will normally check the FBO status
* every time we bind a texture or renderbuffer to an FBO. However, in some
* environments CheckFrameBufferStatus is very expensive. If this is set we will
* check the first time we use a color format or a combination of color /
* stencil formats as attachments. If the FBO is complete we will assume
* subsequent attachments with the same formats are complete as well.
*
* GR_GL_MUST_USE_VBO: Indicates that all vertices and indices must be rendered
* from VBOs. Chromium's command buffer doesn't allow glVertexAttribArray with
* ARARY_BUFFER 0 bound or glDrawElements with ELEMENT_ARRAY_BUFFER 0 bound.
*
* GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE is for compatibility with the new version
* of the OpenGLES2.0 headers from Khronos. glShaderSource now takes a const char * const *,
* instead of a const char
*/
#if !defined(GR_GL_LOG_CALLS)
#ifdef SK_DEBUG
#define GR_GL_LOG_CALLS 1
#else
#define GR_GL_LOG_CALLS 0
#endif
#endif
#if !defined(GR_GL_LOG_CALLS_START)
#define GR_GL_LOG_CALLS_START 0
#endif
#if !defined(GR_GL_CHECK_ERROR)
#ifdef SK_DEBUG
#define GR_GL_CHECK_ERROR 1
#else
#define GR_GL_CHECK_ERROR 0
#endif
#endif
#if !defined(GR_GL_CHECK_ERROR_START)
#define GR_GL_CHECK_ERROR_START 1
#endif
#if !defined(GR_GL_NO_CONSTANT_ATTRIBUTES)
#define GR_GL_NO_CONSTANT_ATTRIBUTES 0
#endif
#if !defined(GR_GL_USE_BUFFER_DATA_NULL_HINT)
#define GR_GL_USE_BUFFER_DATA_NULL_HINT 1
#endif
#if !defined(GR_GL_PER_GL_FUNC_CALLBACK)
#define GR_GL_PER_GL_FUNC_CALLBACK 0
#endif
#if !defined(GR_GL_RGBA_8888_PIXEL_OPS_SLOW)
#define GR_GL_RGBA_8888_PIXEL_OPS_SLOW 0
#endif
#if !defined(GR_GL_FULL_READPIXELS_FASTER_THAN_PARTIAL)
#define GR_GL_FULL_READPIXELS_FASTER_THAN_PARTIAL 0
#endif
#if !defined(GR_GL_CHECK_ALLOC_WITH_GET_ERROR)
#define GR_GL_CHECK_ALLOC_WITH_GET_ERROR 1
#endif
#if !defined(GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT)
#define GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT 0
#endif
#if !defined(GR_GL_MUST_USE_VBO)
#define GR_GL_MUST_USE_VBO 0
#endif
#if !defined(GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE)
#define GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE 0
#endif
/**
* There is a strange bug that occurs on Macs with NVIDIA GPUs. We don't
* fully understand it. When (element) array buffers are continually
* respecified using glBufferData performance can fall off of a cliff. The
* driver winds up performing many DMA mapping / unmappings and chews up ~50% of
* the core. However, it has been observed that occaisonally respecifiying the
* buffer using glBufferData and then writing data using glBufferSubData
* prevents the bad behavior.
*
* There is a lot of uncertainty around this issue. In Chrome backgrounding
* the tab somehow initiates this behavior and we don't know what the connection
* is. Another observation is that Chrome's cmd buffer server will actually
* create a buffer full of zeros when it sees a NULL data param (for security
* reasons). If this is disabled and NULL is actually passed all the way to the
* driver then the workaround doesn't help.
*
* The issue is tracked at:
* http://code.google.com/p/chromium/issues/detail?id=114865
*
* When the workaround is enabled we will use the glBufferData / glBufferSubData
* trick every 128 array buffer uploads.
*
* Hopefully we will understand this better and have a cleaner fix or get a
* OS/driver level fix.
*/
#define GR_GL_MAC_BUFFER_OBJECT_PERFOMANCE_WORKAROUND \
(defined(SK_BUILD_FOR_MAC) && \
!GR_GL_USE_BUFFER_DATA_NULL_HINT)
#endif
|