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

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

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

mercurial