Hash :
96a49a48
Author :
Date :
2020-10-06T13:34:09
GLX, EGL: Support NV_robustness_video_memory_purge Chrome is showing rendering issues on Linux/Nvidia after returning from the lock screen. This could be related to the fact that Nvidia drivers are not able to guarantee conformance after certain events. By exposing this extension, we can instruct Chrome to reinitialize contexts after they are purged by the driver. If this is not explicitly requested, we can still generate an UnknownContextReset to tell apps to discard the invalid context anyway. Bug: chromium:1113040 Change-Id: Ie99b6356cc27fea33643d61b1d74f4f68a271d70 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2453689 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
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 194
//
// Copyright 2015 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// platform_glx.h: Includes specific to GLX.
#ifndef LIBANGLE_RENDERER_GL_GLX_PLATFORMGLX_H_
#define LIBANGLE_RENDERER_GL_GLX_PLATFORMGLX_H_
#if !defined(ANGLE_SKIP_GLX_DEFINES)
// GLX 1.0
# define GLX_USE_GL 1
# define GLX_BUFFER_SIZE 2
# define GLX_LEVEL 3
# define GLX_RGBA 4
# define GLX_DOUBLEBUFFER 5
# define GLX_STEREO 6
# define GLX_AUX_BUFFERS 7
# define GLX_RED_SIZE 8
# define GLX_GREEN_SIZE 9
# define GLX_BLUE_SIZE 10
# define GLX_ALPHA_SIZE 11
# define GLX_DEPTH_SIZE 12
# define GLX_STENCIL_SIZE 13
# define GLX_ACCUM_RED_SIZE 14
# define GLX_ACCUM_GREEN_SIZE 15
# define GLX_ACCUM_BLUE_SIZE 16
# define GLX_ACCUM_ALPHA_SIZE 17
# define GLX_BAD_SCREEN 1
# define GLX_BAD_ATTRIBUTE 2
# define GLX_NO_EXTENSION 3
# define GLX_BAD_VISUAL 4
# define GLX_BAD_CONTEXT 5
# define GLX_BAD_VALUE 6
# define GLX_BAD_ENUM 7
// GLX 1.1
# define GLX_VENDOR 1
# define GLX_VERSION 2
# define GLX_EXTENSIONS 3
// GLX 1.3
# define GLX_CONFIG_CAVEAT 0x20
# define GLX_DONT_CARE 0xFFFFFFFF
# define GLX_X_VISUAL_TYPE 0x22
# define GLX_TRANSPARENT_TYPE 0x23
# define GLX_TRANSPARENT_INDEX_VALUE 0x24
# define GLX_TRANSPARENT_RED_VALUE 0x25
# define GLX_TRANSPARENT_GREEN_VALUE 0x26
# define GLX_TRANSPARENT_BLUE_VALUE 0x27
# define GLX_TRANSPARENT_ALPHA_VALUE 0x28
# define GLX_WINDOW_BIT 0x00000001
# define GLX_PIXMAP_BIT 0x00000002
# define GLX_PBUFFER_BIT 0x00000004
# define GLX_AUX_BUFFERS_BIT 0x00000010
# define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001
# define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002
# define GLX_BACK_LEFT_BUFFER_BIT 0x00000004
# define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008
# define GLX_DEPTH_BUFFER_BIT 0x00000020
# define GLX_STENCIL_BUFFER_BIT 0x00000040
# define GLX_ACCUM_BUFFER_BIT 0x00000080
# define GLX_NONE 0x8000
# define GLX_SLOW_CONFIG 0x8001
# define GLX_TRUE_COLOR 0x8002
# define GLX_DIRECT_COLOR 0x8003
# define GLX_PSEUDO_COLOR 0x8004
# define GLX_STATIC_COLOR 0x8005
# define GLX_GRAY_SCALE 0x8006
# define GLX_STATIC_GRAY 0x8007
# define GLX_TRANSPARENT_RGB 0x8008
# define GLX_TRANSPARENT_INDEX 0x8009
# define GLX_VISUAL_ID 0x800B
# define GLX_SCREEN 0x800C
# define GLX_NON_CONFORMANT_CONFIG 0x800D
# define GLX_DRAWABLE_TYPE 0x8010
# define GLX_RENDER_TYPE 0x8011
# define GLX_X_RENDERABLE 0x8012
# define GLX_FBCONFIG_ID 0x8013
# define GLX_RGBA_TYPE 0x8014
# define GLX_COLOR_INDEX_TYPE 0x8015
# define GLX_MAX_PBUFFER_WIDTH 0x8016
# define GLX_MAX_PBUFFER_HEIGHT 0x8017
# define GLX_MAX_PBUFFER_PIXELS 0x8018
# define GLX_PRESERVED_CONTENTS 0x801B
# define GLX_LARGEST_PBUFFER 0x801C
# define GLX_WIDTH 0x801D
# define GLX_HEIGHT 0x801E
# define GLX_EVENT_MASK 0x801F
# define GLX_DAMAGED 0x8020
# define GLX_SAVED 0x8021
# define GLX_WINDOW 0x8022
# define GLX_PBUFFER 0x8023
# define GLX_PBUFFER_HEIGHT 0x8040
# define GLX_PBUFFER_WIDTH 0x8041
# define GLX_RGBA_BIT 0x00000001
# define GLX_COLOR_INDEX_BIT 0x00000002
# define GLX_PBUFFER_CLOBBER_MASK 0x08000000
// GLX 1.4
# define GLX_SAMPLE_BUFFERS 0x186a0
# define GLX_SAMPLES 0x186a1
// GLX_ARB_create_context
# define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001
# define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
# define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
# define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
# define GLX_CONTEXT_FLAGS_ARB 0x2094
// GLX_ARB_create_context_profile
# define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
# define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
# define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126
// GLX_ARB_create_context_robustness
# define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
# define GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252
# define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
# define GLX_NO_RESET_NOTIFICATION_ARB 0x8261
// GLX_EXT_create_context_es2_profile
# define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004
// GLX_EXT_texture_from_pixmap
# define GLX_TEXTURE_1D_BIT_EXT 0x00000001
# define GLX_TEXTURE_2D_BIT_EXT 0x00000002
# define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004
# define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0
# define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1
# define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2
# define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3
# define GLX_Y_INVERTED_EXT 0x20D4
# define GLX_TEXTURE_FORMAT_EXT 0x20D5
# define GLX_TEXTURE_TARGET_EXT 0x20D6
# define GLX_MIPMAP_TEXTURE_EXT 0x20D7
# define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8
# define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9
# define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA
# define GLX_TEXTURE_1D_EXT 0x20DB
# define GLX_TEXTURE_2D_EXT 0x20DC
# define GLX_TEXTURE_RECTANGLE_EXT 0x20DD
# define GLX_FRONT_LEFT_EXT 0x20DE
# define GLX_FRONT_RIGHT_EXT 0x20DF
# define GLX_BACK_LEFT_EXT 0x20E0
# define GLX_BACK_RIGHT_EXT 0x20E1
# define GLX_FRONT_EXT 0x20DE
# define GLX_BACK_EXT 0x20E0
# define GLX_AUX0_EXT 0x20E2
# define GLX_AUX1_EXT 0x20E3
# define GLX_AUX2_EXT 0x20E4
# define GLX_AUX3_EXT 0x20E5
# define GLX_AUX4_EXT 0x20E6
# define GLX_AUX5_EXT 0x20E7
# define GLX_AUX6_EXT 0x20E8
# define GLX_AUX7_EXT 0x20E9
# define GLX_AUX8_EXT 0x20EA
# define GLX_AUX9_EXT 0x20EB
// GLX_EXT_swap_control
# define GLX_SWAP_INTERVAL_EXT 0x20F1
# define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2
// GLX_NV_robustness_video_memory_purge
# define GLX_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x20F7
#endif // !defined(ANGLE_SKIP_GLX_DEFINES)
// GLX typedefs depend on the X headers
#include <X11/Xlib.h>
#include <X11/Xresource.h>
#include <X11/Xutil.h>
// GLX typedefs
namespace glx
{
typedef void *Context;
typedef void *FBConfig;
typedef XID FBConfigID;
typedef XID ContextID;
typedef XID Window;
typedef XID Pbuffer;
typedef XID Pixmap;
typedef XID Drawable;
} // namespace glx
typedef void *(*PFNGETPROCPROC)(const char *name);
#endif // LIBANGLE_RENDERER_GL_GLX_PLATFORMGLX_H_