gfx/skia/trunk/src/gpu/gl/mesa/GrGLCreateMesaInterface.cpp

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

michael@0 1
michael@0 2 /*
michael@0 3 * Copyright 2011 Google Inc.
michael@0 4 *
michael@0 5 * Use of this source code is governed by a BSD-style license that can be
michael@0 6 * found in the LICENSE file.
michael@0 7 */
michael@0 8
michael@0 9 #include "gl/GrGLExtensions.h"
michael@0 10 #include "gl/GrGLInterface.h"
michael@0 11 #include "../GrGLUtil.h"
michael@0 12
michael@0 13 #define GL_GLEXT_PROTOTYPES
michael@0 14 #include "osmesa_wrapper.h"
michael@0 15
michael@0 16 #define GR_GL_GET_PROC(F) interface->fFunctions.f ## F = (GrGL ## F ## Proc) \
michael@0 17 OSMesaGetProcAddress("gl" #F);
michael@0 18 #define GR_GL_GET_PROC_SUFFIX(F, S) interface->fFunctions.f ## F = (GrGL ## F ## Proc) \
michael@0 19 OSMesaGetProcAddress("gl" #F #S);
michael@0 20
michael@0 21 // We use OSMesaGetProcAddress for every gl function to avoid accidentally using
michael@0 22 // non-Mesa gl functions.
michael@0 23
michael@0 24 const GrGLInterface* GrGLCreateMesaInterface() {
michael@0 25 if (NULL != OSMesaGetCurrentContext()) {
michael@0 26
michael@0 27 GrGLGetStringProc getString = (GrGLGetStringProc) OSMesaGetProcAddress("glGetString");
michael@0 28 GrGLGetStringiProc getStringi = (GrGLGetStringiProc) OSMesaGetProcAddress("glGetStringi");
michael@0 29 GrGLGetIntegervProc getIntegerv =
michael@0 30 (GrGLGetIntegervProc) OSMesaGetProcAddress("glGetIntegerv");
michael@0 31
michael@0 32 GrGLExtensions extensions;
michael@0 33 if (!extensions.init(kGL_GrGLStandard, getString, getStringi, getIntegerv)) {
michael@0 34 return NULL;
michael@0 35 }
michael@0 36
michael@0 37 const char* versionString = (const char*) getString(GL_VERSION);
michael@0 38 GrGLVersion glVer = GrGLGetVersionFromString(versionString);
michael@0 39
michael@0 40 if (glVer < GR_GL_VER(1,5)) {
michael@0 41 // We must have array and element_array buffer objects.
michael@0 42 return NULL;
michael@0 43 }
michael@0 44 GrGLInterface* interface = SkNEW(GrGLInterface());
michael@0 45
michael@0 46 GR_GL_GET_PROC(ActiveTexture);
michael@0 47 GR_GL_GET_PROC(BeginQuery);
michael@0 48 GR_GL_GET_PROC(AttachShader);
michael@0 49 GR_GL_GET_PROC(BindAttribLocation);
michael@0 50 GR_GL_GET_PROC(BindBuffer);
michael@0 51 GR_GL_GET_PROC(BindFragDataLocation);
michael@0 52 GR_GL_GET_PROC(BindTexture);
michael@0 53 GR_GL_GET_PROC(BlendFunc);
michael@0 54
michael@0 55 if (glVer >= GR_GL_VER(1,4) ||
michael@0 56 extensions.has("GL_ARB_imaging") ||
michael@0 57 extensions.has("GL_EXT_blend_color")) {
michael@0 58 GR_GL_GET_PROC(BlendColor);
michael@0 59 }
michael@0 60
michael@0 61 GR_GL_GET_PROC(BufferData);
michael@0 62 GR_GL_GET_PROC(BufferSubData);
michael@0 63 GR_GL_GET_PROC(Clear);
michael@0 64 GR_GL_GET_PROC(ClearColor);
michael@0 65 GR_GL_GET_PROC(ClearStencil);
michael@0 66 GR_GL_GET_PROC(ColorMask);
michael@0 67 GR_GL_GET_PROC(CompileShader);
michael@0 68 GR_GL_GET_PROC(CompressedTexImage2D);
michael@0 69 GR_GL_GET_PROC(CopyTexSubImage2D);
michael@0 70 GR_GL_GET_PROC(CreateProgram);
michael@0 71 GR_GL_GET_PROC(CreateShader);
michael@0 72 GR_GL_GET_PROC(CullFace);
michael@0 73 GR_GL_GET_PROC(DeleteBuffers);
michael@0 74 GR_GL_GET_PROC(DeleteProgram);
michael@0 75 GR_GL_GET_PROC(DeleteQueries);
michael@0 76 GR_GL_GET_PROC(DeleteShader);
michael@0 77 GR_GL_GET_PROC(DeleteTextures);
michael@0 78 GR_GL_GET_PROC(DepthMask);
michael@0 79 GR_GL_GET_PROC(Disable);
michael@0 80 GR_GL_GET_PROC(DisableVertexAttribArray);
michael@0 81 GR_GL_GET_PROC(DrawArrays);
michael@0 82 GR_GL_GET_PROC(DrawBuffer);
michael@0 83 GR_GL_GET_PROC(DrawBuffers);
michael@0 84 GR_GL_GET_PROC(DrawElements);
michael@0 85 GR_GL_GET_PROC(Enable);
michael@0 86 GR_GL_GET_PROC(EnableVertexAttribArray);
michael@0 87 GR_GL_GET_PROC(EndQuery);
michael@0 88 GR_GL_GET_PROC(Finish);
michael@0 89 GR_GL_GET_PROC(Flush);
michael@0 90 GR_GL_GET_PROC(FrontFace);
michael@0 91 GR_GL_GET_PROC(GenBuffers);
michael@0 92 GR_GL_GET_PROC(GenerateMipmap);
michael@0 93 GR_GL_GET_PROC(GenQueries);
michael@0 94 GR_GL_GET_PROC(GetBufferParameteriv);
michael@0 95 GR_GL_GET_PROC(GetError);
michael@0 96 GR_GL_GET_PROC(GetIntegerv);
michael@0 97 GR_GL_GET_PROC(GetProgramInfoLog);
michael@0 98 GR_GL_GET_PROC(GetProgramiv);
michael@0 99 if (glVer >= GR_GL_VER(3,3) || extensions.has("GL_ARB_timer_query")) {
michael@0 100 GR_GL_GET_PROC(GetQueryObjecti64v);
michael@0 101 GR_GL_GET_PROC(GetQueryObjectui64v)
michael@0 102 GR_GL_GET_PROC(QueryCounter);
michael@0 103 } else if (extensions.has("GL_EXT_timer_query")) {
michael@0 104 GR_GL_GET_PROC_SUFFIX(GetQueryObjecti64v, EXT);
michael@0 105 GR_GL_GET_PROC_SUFFIX(GetQueryObjectui64v, EXT);
michael@0 106 }
michael@0 107 GR_GL_GET_PROC(GetQueryObjectiv);
michael@0 108 GR_GL_GET_PROC(GetQueryObjectuiv);
michael@0 109 GR_GL_GET_PROC(GetQueryiv);
michael@0 110 GR_GL_GET_PROC(GetShaderInfoLog);
michael@0 111 GR_GL_GET_PROC(GetShaderiv);
michael@0 112 GR_GL_GET_PROC(GetString);
michael@0 113 GR_GL_GET_PROC(GetStringi);
michael@0 114 GR_GL_GET_PROC(GetTexLevelParameteriv);
michael@0 115 GR_GL_GET_PROC(GenTextures);
michael@0 116 GR_GL_GET_PROC(GetUniformLocation);
michael@0 117 GR_GL_GET_PROC(LineWidth);
michael@0 118 GR_GL_GET_PROC(LinkProgram);
michael@0 119 GR_GL_GET_PROC(LoadIdentity);
michael@0 120 GR_GL_GET_PROC(LoadMatrixf);
michael@0 121 GR_GL_GET_PROC(MatrixMode);
michael@0 122 GR_GL_GET_PROC(MapBuffer);
michael@0 123 GR_GL_GET_PROC(PixelStorei);
michael@0 124 GR_GL_GET_PROC(ReadBuffer);
michael@0 125 GR_GL_GET_PROC(ReadPixels);
michael@0 126 GR_GL_GET_PROC(Scissor);
michael@0 127 GR_GL_GET_PROC(ShaderSource);
michael@0 128 GR_GL_GET_PROC(StencilFunc);
michael@0 129 GR_GL_GET_PROC(StencilFuncSeparate);
michael@0 130 GR_GL_GET_PROC(StencilMask);
michael@0 131 GR_GL_GET_PROC(StencilMaskSeparate);
michael@0 132 GR_GL_GET_PROC(StencilOp);
michael@0 133 GR_GL_GET_PROC(StencilOpSeparate);
michael@0 134 GR_GL_GET_PROC(TexGenfv);
michael@0 135 GR_GL_GET_PROC(TexGeni);
michael@0 136 GR_GL_GET_PROC(TexImage2D)
michael@0 137 GR_GL_GET_PROC(TexParameteri);
michael@0 138 GR_GL_GET_PROC(TexParameteriv);
michael@0 139 GR_GL_GET_PROC(TexStorage2D);
michael@0 140 if (NULL == interface->fFunctions.fTexStorage2D) {
michael@0 141 GR_GL_GET_PROC_SUFFIX(TexStorage2D, EXT);
michael@0 142 }
michael@0 143 GR_GL_GET_PROC(TexSubImage2D);
michael@0 144 GR_GL_GET_PROC(Uniform1f);
michael@0 145 GR_GL_GET_PROC(Uniform1i);
michael@0 146 GR_GL_GET_PROC(Uniform1fv);
michael@0 147 GR_GL_GET_PROC(Uniform1iv);
michael@0 148 GR_GL_GET_PROC(Uniform2f);
michael@0 149 GR_GL_GET_PROC(Uniform2i);
michael@0 150 GR_GL_GET_PROC(Uniform2fv);
michael@0 151 GR_GL_GET_PROC(Uniform2iv);
michael@0 152 GR_GL_GET_PROC(Uniform3f);
michael@0 153 GR_GL_GET_PROC(Uniform3i);
michael@0 154 GR_GL_GET_PROC(Uniform3fv);
michael@0 155 GR_GL_GET_PROC(Uniform3iv);
michael@0 156 GR_GL_GET_PROC(Uniform4f);
michael@0 157 GR_GL_GET_PROC(Uniform4i);
michael@0 158 GR_GL_GET_PROC(Uniform4fv);
michael@0 159 GR_GL_GET_PROC(Uniform4iv);
michael@0 160 GR_GL_GET_PROC(UniformMatrix2fv);
michael@0 161 GR_GL_GET_PROC(UniformMatrix3fv);
michael@0 162 GR_GL_GET_PROC(UniformMatrix4fv);
michael@0 163 GR_GL_GET_PROC(UnmapBuffer);
michael@0 164 GR_GL_GET_PROC(UseProgram);
michael@0 165 GR_GL_GET_PROC(VertexAttrib4fv);
michael@0 166 GR_GL_GET_PROC(VertexAttribPointer);
michael@0 167 GR_GL_GET_PROC(Viewport);
michael@0 168
michael@0 169 if (glVer >= GR_GL_VER(3,0) || extensions.has("GL_ARB_vertex_array_object")) {
michael@0 170 // no ARB suffix for GL_ARB_vertex_array_object
michael@0 171 GR_GL_GET_PROC(BindVertexArray);
michael@0 172 GR_GL_GET_PROC(DeleteVertexArrays);
michael@0 173 GR_GL_GET_PROC(GenVertexArrays);
michael@0 174 }
michael@0 175
michael@0 176 // First look for GL3.0 FBO or GL_ARB_framebuffer_object (same since
michael@0 177 // GL_ARB_framebuffer_object doesn't use ARB suffix.)
michael@0 178 if (glVer >= GR_GL_VER(3,0) || extensions.has("GL_ARB_framebuffer_object")) {
michael@0 179 GR_GL_GET_PROC(GenFramebuffers);
michael@0 180 GR_GL_GET_PROC(GetFramebufferAttachmentParameteriv);
michael@0 181 GR_GL_GET_PROC(GetRenderbufferParameteriv);
michael@0 182 GR_GL_GET_PROC(BindFramebuffer);
michael@0 183 GR_GL_GET_PROC(FramebufferTexture2D);
michael@0 184 GR_GL_GET_PROC(CheckFramebufferStatus);
michael@0 185 GR_GL_GET_PROC(DeleteFramebuffers);
michael@0 186 GR_GL_GET_PROC(RenderbufferStorage);
michael@0 187 GR_GL_GET_PROC(GenRenderbuffers);
michael@0 188 GR_GL_GET_PROC(DeleteRenderbuffers);
michael@0 189 GR_GL_GET_PROC(FramebufferRenderbuffer);
michael@0 190 GR_GL_GET_PROC(BindRenderbuffer);
michael@0 191 GR_GL_GET_PROC(RenderbufferStorageMultisample);
michael@0 192 GR_GL_GET_PROC(BlitFramebuffer);
michael@0 193 } else if (extensions.has("GL_EXT_framebuffer_object")) {
michael@0 194 GR_GL_GET_PROC_SUFFIX(GenFramebuffers, EXT);
michael@0 195 GR_GL_GET_PROC_SUFFIX(GetFramebufferAttachmentParameteriv, EXT);
michael@0 196 GR_GL_GET_PROC_SUFFIX(GetRenderbufferParameteriv, EXT);
michael@0 197 GR_GL_GET_PROC_SUFFIX(BindFramebuffer, EXT);
michael@0 198 GR_GL_GET_PROC_SUFFIX(FramebufferTexture2D, EXT);
michael@0 199 GR_GL_GET_PROC_SUFFIX(CheckFramebufferStatus, EXT);
michael@0 200 GR_GL_GET_PROC_SUFFIX(DeleteFramebuffers, EXT);
michael@0 201 GR_GL_GET_PROC_SUFFIX(RenderbufferStorage, EXT);
michael@0 202 GR_GL_GET_PROC_SUFFIX(GenRenderbuffers, EXT);
michael@0 203 GR_GL_GET_PROC_SUFFIX(DeleteRenderbuffers, EXT);
michael@0 204 GR_GL_GET_PROC_SUFFIX(FramebufferRenderbuffer, EXT);
michael@0 205 GR_GL_GET_PROC_SUFFIX(BindRenderbuffer, EXT);
michael@0 206 if (extensions.has("GL_EXT_framebuffer_multisample")) {
michael@0 207 GR_GL_GET_PROC_SUFFIX(RenderbufferStorageMultisample, EXT);
michael@0 208 }
michael@0 209 if (extensions.has("GL_EXT_framebuffer_blit")) {
michael@0 210 GR_GL_GET_PROC_SUFFIX(BlitFramebuffer, EXT);
michael@0 211 }
michael@0 212 } else {
michael@0 213 // we must have FBOs
michael@0 214 delete interface;
michael@0 215 return NULL;
michael@0 216 }
michael@0 217 GR_GL_GET_PROC(BindFragDataLocationIndexed);
michael@0 218
michael@0 219 if (extensions.has("GL_EXT_debug_marker")) {
michael@0 220 GR_GL_GET_PROC_SUFFIX(InsertEventMarker, EXT);
michael@0 221 GR_GL_GET_PROC_SUFFIX(PopGroupMarker, EXT);
michael@0 222 GR_GL_GET_PROC_SUFFIX(PushGroupMarker, EXT);
michael@0 223 }
michael@0 224
michael@0 225 interface->fStandard = kGL_GrGLStandard;
michael@0 226 interface->fExtensions.swap(&extensions);
michael@0 227
michael@0 228 return interface;
michael@0 229 } else {
michael@0 230 return NULL;
michael@0 231 }
michael@0 232 }

mercurial