Home | History | Annotate | Download | only in gl
      1 /*
      2  * Copyright 2013 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "GrGLNoOpInterface.h"
      9 #include "SkString.h"
     10 #include "SkThread.h"
     11 
     12 // the OpenGLES 2.0 spec says this must be >= 128
     13 static const GrGLint kDefaultMaxVertexUniformVectors = 128;
     14 
     15 // the OpenGLES 2.0 spec says this must be >=16
     16 static const GrGLint kDefaultMaxFragmentUniformVectors = 16;
     17 
     18 // the OpenGLES 2.0 spec says this must be >= 8
     19 static const GrGLint kDefaultMaxVertexAttribs = 8;
     20 
     21 // the OpenGLES 2.0 spec says this must be >= 8
     22 static const GrGLint kDefaultMaxVaryingVectors = 8;
     23 
     24 static const char* kExtensions[] = {
     25     "GL_ARB_framebuffer_object",
     26     "GL_ARB_blend_func_extended",
     27     "GL_ARB_timer_query",
     28     "GL_ARB_draw_buffers",
     29     "GL_ARB_occlusion_query",
     30     "GL_EXT_stencil_wrap"
     31 };
     32 
     33 namespace {
     34 const GrGLubyte* combined_extensions_string() {
     35     static SkString gExtString;
     36     static SkMutex gMutex;
     37     gMutex.acquire();
     38     if (0 == gExtString.size()) {
     39         for (size_t i = 0; i < SK_ARRAY_COUNT(kExtensions) - 1; ++i) {
     40             gExtString.append(kExtensions[i]);
     41             gExtString.append(" ");
     42         }
     43         gExtString.append(kExtensions[SK_ARRAY_COUNT(kExtensions) - 1]);
     44     }
     45     gMutex.release();
     46     return (const GrGLubyte*) gExtString.c_str();
     47 }
     48 }
     49 
     50 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBindFragDataLocation(GrGLuint program,
     51                                                         GrGLuint colorNumber,
     52                                                         const GrGLchar* name) {
     53 }
     54 
     55 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBlendColor(GrGLclampf red,
     56                                               GrGLclampf green,
     57                                               GrGLclampf blue,
     58                                               GrGLclampf alpha) {
     59 }
     60 
     61 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBlendEquation(GrGLenum mode) {
     62 }
     63 
     64 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBlendFunc(GrGLenum sfactor,
     65                                               GrGLenum dfactor) {
     66 }
     67 
     68 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBufferSubData(GrGLenum target,
     69                                                  GrGLintptr offset,
     70                                                  GrGLsizeiptr size,
     71                                                  const GrGLvoid* data) {
     72 }
     73 
     74 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLClear(GrGLbitfield mask) {
     75 }
     76 
     77 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLClearColor(GrGLclampf red,
     78                                               GrGLclampf green,
     79                                               GrGLclampf blue,
     80                                               GrGLclampf alpha) {
     81 }
     82 
     83 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLClearStencil(GrGLint s) {
     84 }
     85 
     86 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLColorMask(GrGLboolean red,
     87                                              GrGLboolean green,
     88                                              GrGLboolean blue,
     89                                              GrGLboolean alpha) {
     90 }
     91 
     92 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCompileShader(GrGLuint shader) {
     93 }
     94 
     95 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCompressedTexImage2D(GrGLenum target,
     96                                                         GrGLint level,
     97                                                         GrGLenum internalformat,
     98                                                         GrGLsizei width,
     99                                                         GrGLsizei height,
    100                                                         GrGLint border,
    101                                                         GrGLsizei imageSize,
    102                                                         const GrGLvoid* data) {
    103 }
    104 
    105 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCompressedTexSubImage2D(GrGLenum target,
    106                                                            GrGLint level,
    107                                                            GrGLint xoffset,
    108                                                            GrGLint yoffset,
    109                                                            GrGLsizei width,
    110                                                            GrGLsizei height,
    111                                                            GrGLenum format,
    112                                                            GrGLsizei imageSize,
    113                                                            const GrGLvoid* data) {
    114 }
    115 
    116 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCopyTexSubImage2D(GrGLenum target,
    117                                                      GrGLint level,
    118                                                      GrGLint xoffset,
    119                                                      GrGLint yoffset,
    120                                                      GrGLint x,
    121                                                      GrGLint y,
    122                                                      GrGLsizei width,
    123                                                      GrGLsizei height) {
    124 }
    125 
    126 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCullFace(GrGLenum mode) {
    127 }
    128 
    129 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDepthMask(GrGLboolean flag) {
    130 }
    131 
    132 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDisable(GrGLenum cap) {
    133 }
    134 
    135 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDisableVertexAttribArray(GrGLuint index) {
    136 }
    137 
    138 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawArrays(GrGLenum mode,
    139                                               GrGLint first,
    140                                               GrGLsizei count) {
    141 }
    142 
    143 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawBuffer(GrGLenum mode) {
    144 }
    145 
    146 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawBuffers(GrGLsizei n,
    147                                                const GrGLenum* bufs) {
    148 }
    149 
    150 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawElements(GrGLenum mode,
    151                                                 GrGLsizei count,
    152                                                 GrGLenum type,
    153                                                 const GrGLvoid* indices) {
    154 }
    155 
    156 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLEnable(GrGLenum cap) {
    157 }
    158 
    159 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLEnableVertexAttribArray(GrGLuint index) {
    160 }
    161 
    162 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLEndQuery(GrGLenum target) {
    163 }
    164 
    165 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLFinish() {
    166 }
    167 
    168 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLFlush() {
    169 }
    170 
    171 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLFrontFace(GrGLenum mode) {
    172 }
    173 
    174 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLLineWidth(GrGLfloat width) {
    175 }
    176 
    177 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLLinkProgram(GrGLuint program) {
    178 }
    179 
    180 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLMatrixLoadf(GrGLenum, const GrGLfloat*) {
    181 }
    182 
    183 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLMatrixLoadIdentity(GrGLenum) {
    184 }
    185 
    186 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLQueryCounter(GrGLuint id, GrGLenum target) {
    187 }
    188 
    189 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLReadBuffer(GrGLenum src) {
    190 }
    191 
    192 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLScissor(GrGLint x,
    193                                            GrGLint y,
    194                                            GrGLsizei width,
    195                                            GrGLsizei height) {
    196 }
    197 
    198 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLShaderSource(GrGLuint shader,
    199                                                 GrGLsizei count,
    200 #if GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE
    201                                                 const char* const * str,
    202 #else
    203                                                 const char** str,
    204 #endif
    205                                                 const GrGLint* length) {
    206 }
    207 
    208 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilFunc(GrGLenum func, GrGLint ref, GrGLuint mask) {
    209 }
    210 
    211 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilFuncSeparate(GrGLenum face,
    212                                                        GrGLenum func,
    213                                                        GrGLint ref,
    214                                                        GrGLuint mask) {
    215 }
    216 
    217 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilMask(GrGLuint mask) {
    218 }
    219 
    220 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilMaskSeparate(GrGLenum face, GrGLuint mask) {
    221 }
    222 
    223 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilOp(GrGLenum fail, GrGLenum zfail, GrGLenum zpass) {
    224 }
    225 
    226 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilOpSeparate(GrGLenum face,
    227                                                      GrGLenum fail,
    228                                                      GrGLenum zfail,
    229                                                      GrGLenum zpass) {
    230 }
    231 
    232 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexImage2D(GrGLenum target,
    233                                               GrGLint level,
    234                                               GrGLint internalformat,
    235                                               GrGLsizei width,
    236                                               GrGLsizei height,
    237                                               GrGLint border,
    238                                               GrGLenum format,
    239                                               GrGLenum type,
    240                                               const GrGLvoid* pixels) {
    241 }
    242 
    243 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexParameteri(GrGLenum target,
    244                                                  GrGLenum pname,
    245                                                  GrGLint param) {
    246 }
    247 
    248 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexParameteriv(GrGLenum target,
    249                                                   GrGLenum pname,
    250                                                   const GrGLint* params) {
    251 }
    252 
    253 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexStorage2D(GrGLenum target,
    254                                                 GrGLsizei levels,
    255                                                 GrGLenum internalformat,
    256                                                 GrGLsizei width,
    257                                                 GrGLsizei height) {
    258 }
    259 
    260 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDiscardFramebuffer(GrGLenum target,
    261                                                       GrGLsizei numAttachments,
    262                                                       const GrGLenum* attachments) {
    263 }
    264 
    265 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexSubImage2D(GrGLenum target,
    266                                                  GrGLint level,
    267                                                  GrGLint xoffset,
    268                                                  GrGLint yoffset,
    269                                                  GrGLsizei width,
    270                                                  GrGLsizei height,
    271                                                  GrGLenum format,
    272                                                  GrGLenum type,
    273                                                  const GrGLvoid* pixels) {
    274 }
    275 
    276 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1f(GrGLint location, GrGLfloat v0) {
    277 }
    278 
    279 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1i(GrGLint location, GrGLint v0) {
    280 }
    281 
    282 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1fv(GrGLint location,
    283                                               GrGLsizei count,
    284                                               const GrGLfloat* v) {
    285 }
    286 
    287 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1iv(GrGLint location,
    288                                               GrGLsizei count,
    289                                               const GrGLint* v) {
    290 }
    291 
    292 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2f(GrGLint location, GrGLfloat v0, GrGLfloat v1) {
    293 }
    294 
    295 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2i(GrGLint location, GrGLint v0, GrGLint v1) {
    296 }
    297 
    298 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2fv(GrGLint location,
    299                                               GrGLsizei count,
    300                                               const GrGLfloat* v) {
    301 }
    302 
    303 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2iv(GrGLint location,
    304                                               GrGLsizei count,
    305                                               const GrGLint* v) {
    306 }
    307 
    308 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3f(GrGLint location,
    309                                               GrGLfloat v0,
    310                                               GrGLfloat v1,
    311                                               GrGLfloat v2) {
    312 }
    313 
    314 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3i(GrGLint location,
    315                                               GrGLint v0,
    316                                               GrGLint v1,
    317                                               GrGLint v2) {
    318 }
    319 
    320 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3fv(GrGLint location,
    321                                               GrGLsizei count,
    322                                               const GrGLfloat* v) {
    323 }
    324 
    325 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3iv(GrGLint location,
    326                                               GrGLsizei count,
    327                                               const GrGLint* v) {
    328 }
    329 
    330 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4f(GrGLint location,
    331                                               GrGLfloat v0,
    332                                               GrGLfloat v1,
    333                                               GrGLfloat v2,
    334                                               GrGLfloat v3) {
    335 }
    336 
    337 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4i(GrGLint location,
    338                                               GrGLint v0,
    339                                               GrGLint v1,
    340                                               GrGLint v2,
    341                                               GrGLint v3) {
    342 }
    343 
    344 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4fv(GrGLint location,
    345                                               GrGLsizei count,
    346                                               const GrGLfloat* v) {
    347 }
    348 
    349 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4iv(GrGLint location,
    350                                               GrGLsizei count,
    351                                               const GrGLint* v) {
    352 }
    353 
    354 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix2fv(GrGLint location,
    355                                                     GrGLsizei count,
    356                                                     GrGLboolean transpose,
    357                                                     const GrGLfloat* value) {
    358 }
    359 
    360 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix3fv(GrGLint location,
    361                                                     GrGLsizei count,
    362                                                     GrGLboolean transpose,
    363                                                     const GrGLfloat* value) {
    364 }
    365 
    366 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix4fv(GrGLint location,
    367                                                     GrGLsizei count,
    368                                                     GrGLboolean transpose,
    369                                                     const GrGLfloat* value) {
    370 }
    371 
    372  GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttrib1f(GrGLuint indx, const GrGLfloat value) {
    373 }
    374 
    375  GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttrib2fv(GrGLuint indx, const GrGLfloat* values) {
    376 }
    377 
    378  GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttrib3fv(GrGLuint indx, const GrGLfloat* values) {
    379 }
    380 
    381  GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttrib4fv(GrGLuint indx, const GrGLfloat* values) {
    382 }
    383 
    384 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttribPointer(GrGLuint indx,
    385                                                        GrGLint size,
    386                                                        GrGLenum type,
    387                                                        GrGLboolean normalized,
    388                                                        GrGLsizei stride,
    389                                                        const GrGLvoid* ptr) {
    390 }
    391 
    392 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLViewport(GrGLint x,
    393                                             GrGLint y,
    394                                             GrGLsizei width,
    395                                             GrGLsizei height) {
    396 }
    397 
    398   GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetFramebufferAttachmentParameteriv(GrGLenum target,
    399                                                                          GrGLenum attachment,
    400                                                                          GrGLenum pname,
    401                                                                          GrGLint* params) {
    402 }
    403 
    404 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetRenderbufferParameteriv(GrGLenum target,
    405                                                               GrGLenum pname,
    406                                                               GrGLint* params) {
    407 }
    408 
    409 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLRenderbufferStorage(GrGLenum target,
    410                                                        GrGLenum internalformat,
    411                                                        GrGLsizei width,
    412                                                        GrGLsizei height) {
    413 }
    414 
    415 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLRenderbufferStorageMultisample(GrGLenum target,
    416                                                                   GrGLsizei samples,
    417                                                                   GrGLenum internalformat,
    418                                                                   GrGLsizei width,
    419                                                                   GrGLsizei height) {
    420 }
    421 
    422 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBlitFramebuffer(GrGLint srcX0,
    423                                                    GrGLint srcY0,
    424                                                    GrGLint srcX1,
    425                                                    GrGLint srcY1,
    426                                                    GrGLint dstX0,
    427                                                    GrGLint dstY0,
    428                                                    GrGLint dstX1,
    429                                                    GrGLint dstY1,
    430                                                    GrGLbitfield mask,
    431                                                    GrGLenum filter) {
    432 }
    433 
    434 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLResolveMultisampleFramebuffer() {
    435 }
    436 
    437 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBindFragDataLocationIndexed(GrGLuint program,
    438                                                                GrGLuint colorNumber,
    439                                                                GrGLuint index,
    440                                                                const GrGLchar * name) {
    441 }
    442 
    443 GrGLenum GR_GL_FUNCTION_TYPE noOpGLCheckFramebufferStatus(GrGLenum target) {
    444 
    445     GrAlwaysAssert(GR_GL_FRAMEBUFFER == target);
    446 
    447     return GR_GL_FRAMEBUFFER_COMPLETE;
    448 }
    449 
    450 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGenIds(GrGLsizei n, GrGLuint* ids) {
    451     static int gCurrID = 1;
    452     for (int i = 0; i < n; ++i) {
    453         ids[i] = ++gCurrID;
    454    }
    455 }
    456 
    457 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDeleteIds(GrGLsizei n, const GrGLuint* ids) {
    458 }
    459 
    460 GrGLenum GR_GL_FUNCTION_TYPE noOpGLGetError() {
    461     return GR_GL_NO_ERROR;
    462 }
    463 
    464 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetIntegerv(GrGLenum pname, GrGLint* params) {
    465     // TODO: remove from Ganesh the #defines for gets we don't use.
    466     // We would like to minimize gets overall due to performance issues
    467     switch (pname) {
    468         case GR_GL_CONTEXT_PROFILE_MASK:
    469             *params = GR_GL_CONTEXT_COMPATIBILITY_PROFILE_BIT;
    470             break;
    471         case GR_GL_STENCIL_BITS:
    472             *params = 8;
    473             break;
    474         case GR_GL_SAMPLES:
    475             *params = 1;
    476             break;
    477         case GR_GL_FRAMEBUFFER_BINDING:
    478             *params = 0;
    479             break;
    480         case GR_GL_VIEWPORT:
    481             params[0] = 0;
    482             params[1] = 0;
    483             params[2] = 800;
    484             params[3] = 600;
    485             break;
    486         case GR_GL_MAX_TEXTURE_IMAGE_UNITS:
    487             *params = 8;
    488             break;
    489         case GR_GL_MAX_TEXTURE_COORDS:
    490             *params = 8;
    491             break;
    492         case GR_GL_MAX_VERTEX_UNIFORM_VECTORS:
    493             *params = kDefaultMaxVertexUniformVectors;
    494             break;
    495         case GR_GL_MAX_FRAGMENT_UNIFORM_VECTORS:
    496             *params = kDefaultMaxFragmentUniformVectors;
    497             break;
    498         case GR_GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
    499             *params = 16 * 4;
    500             break;
    501         case GR_GL_NUM_COMPRESSED_TEXTURE_FORMATS:
    502             *params = 0;
    503             break;
    504         case GR_GL_COMPRESSED_TEXTURE_FORMATS:
    505             break;
    506         case GR_GL_MAX_TEXTURE_SIZE:
    507             *params = 8192;
    508             break;
    509         case GR_GL_MAX_RENDERBUFFER_SIZE:
    510             *params = 8192;
    511             break;
    512         case GR_GL_MAX_SAMPLES:
    513             *params = 32;
    514             break;
    515         case GR_GL_MAX_VERTEX_ATTRIBS:
    516             *params = kDefaultMaxVertexAttribs;
    517             break;
    518         case GR_GL_MAX_VARYING_VECTORS:
    519             *params = kDefaultMaxVaryingVectors;
    520             break;
    521         case GR_GL_NUM_EXTENSIONS:
    522             *params = SK_ARRAY_COUNT(kExtensions);
    523             break;
    524         default:
    525             SkFAIL("Unexpected pname to GetIntegerv");
    526    }
    527 }
    528 
    529 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetInfoLog(GrGLuint program,
    530                                               GrGLsizei bufsize,
    531                                               GrGLsizei* length,
    532                                               char* infolog) {
    533     if (length) {
    534         *length = 0;
    535    }
    536     if (bufsize > 0) {
    537         *infolog = 0;
    538    }
    539 }
    540 
    541 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetShaderOrProgramiv(GrGLuint program,
    542                                                         GrGLenum pname,
    543                                                         GrGLint* params) {
    544     switch (pname) {
    545         case GR_GL_LINK_STATUS:  // fallthru
    546         case GR_GL_COMPILE_STATUS:
    547             *params = GR_GL_TRUE;
    548             break;
    549         case GR_GL_INFO_LOG_LENGTH:
    550             *params = 0;
    551             break;
    552         // we don't expect any other pnames
    553         default:
    554             SkFAIL("Unexpected pname to GetProgramiv");
    555             break;
    556    }
    557 }
    558 
    559 namespace {
    560 template <typename T>
    561 void query_result(GrGLenum GLtarget, GrGLenum pname, T *params) {
    562     switch (pname) {
    563         case GR_GL_QUERY_RESULT_AVAILABLE:
    564             *params = GR_GL_TRUE;
    565             break;
    566         case GR_GL_QUERY_RESULT:
    567             *params = 0;
    568             break;
    569         default:
    570             SkFAIL("Unexpected pname passed to GetQueryObject.");
    571             break;
    572    }
    573 }
    574 }
    575 
    576 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryiv(GrGLenum GLtarget,
    577                                               GrGLenum pname,
    578                                               GrGLint *params) {
    579     switch (pname) {
    580         case GR_GL_CURRENT_QUERY:
    581             *params = 0;
    582             break;
    583         case GR_GL_QUERY_COUNTER_BITS:
    584             *params = 32;
    585             break;
    586         default:
    587             SkFAIL("Unexpected pname passed GetQueryiv.");
    588    }
    589 }
    590 
    591 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjecti64v(GrGLuint id,
    592                                                       GrGLenum pname,
    593                                                       GrGLint64 *params) {
    594     query_result(id, pname, params);
    595 }
    596 
    597 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjectiv(GrGLuint id,
    598                                                     GrGLenum pname,
    599                                                     GrGLint *params) {
    600     query_result(id, pname, params);
    601 }
    602 
    603 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjectui64v(GrGLuint id,
    604                                                        GrGLenum pname,
    605                                                        GrGLuint64 *params) {
    606     query_result(id, pname, params);
    607 }
    608 
    609 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjectuiv(GrGLuint id,
    610                                                      GrGLenum pname,
    611                                                      GrGLuint *params) {
    612     query_result(id, pname, params);
    613 }
    614 
    615 const GrGLubyte* GR_GL_FUNCTION_TYPE noOpGLGetString(GrGLenum name) {
    616     switch (name) {
    617         case GR_GL_EXTENSIONS:
    618             return combined_extensions_string();
    619         case GR_GL_VERSION:
    620             return (const GrGLubyte*)"4.0 Debug GL";
    621         case GR_GL_SHADING_LANGUAGE_VERSION:
    622             return (const GrGLubyte*)"4.20.8 Debug GLSL";
    623         case GR_GL_VENDOR:
    624             return (const GrGLubyte*)"Debug Vendor";
    625         case GR_GL_RENDERER:
    626             return (const GrGLubyte*)"The Debug (Non-)Renderer";
    627         default:
    628             SkFAIL("Unexpected name passed to GetString");
    629             return NULL;
    630    }
    631 }
    632 
    633 const GrGLubyte* GR_GL_FUNCTION_TYPE noOpGLGetStringi(GrGLenum name, GrGLuint i) {
    634     switch (name) {
    635         case GR_GL_EXTENSIONS:
    636             if (static_cast<size_t>(i) <= SK_ARRAY_COUNT(kExtensions)) {
    637                 return (const GrGLubyte*) kExtensions[i];
    638             } else {
    639                 return NULL;
    640             }
    641         default:
    642             SkFAIL("Unexpected name passed to GetStringi");
    643             return NULL;
    644     }
    645 }
    646 
    647 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetTexLevelParameteriv(GrGLenum target,
    648                                                           GrGLint level,
    649                                                           GrGLenum pname,
    650                                                           GrGLint* params) {
    651     // we used to use this to query stuff about externally created textures,
    652     // now we just require clients to tell us everything about the texture.
    653     SkFAIL("Should never query texture parameters.");
    654 }
    655 
    656 GrGLint GR_GL_FUNCTION_TYPE noOpGLGetUniformLocation(GrGLuint program, const char* name) {
    657     static int gUniLocation = 0;
    658     return ++gUniLocation;
    659 }
    660 
    661 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLInsertEventMarker(GrGLsizei length, const char* marker) {
    662 }
    663 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLPushGroupMarker(GrGLsizei length  , const char* marker) {
    664 }
    665 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLPopGroupMarker() {
    666 }
    667