xref: /aosp_15_r20/external/skia/tools/gpu/gl/interface/templates.go (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker// Copyright 2019 The Chromium Authors. All rights reserved.
2*c8dee2aaSAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
3*c8dee2aaSAndroid Build Coastguard Worker// found in the LICENSE file.
4*c8dee2aaSAndroid Build Coastguard Worker
5*c8dee2aaSAndroid Build Coastguard Workerpackage main
6*c8dee2aaSAndroid Build Coastguard Worker
7*c8dee2aaSAndroid Build Coastguard Workerconst ASSEMBLE_INTERFACE_GL_ES = `/*
8*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2019 Google LLC
9*c8dee2aaSAndroid Build Coastguard Worker *
10*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
11*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file.
12*c8dee2aaSAndroid Build Coastguard Worker *
13*c8dee2aaSAndroid Build Coastguard Worker * THIS FILE IS AUTOGENERATED
14*c8dee2aaSAndroid Build Coastguard Worker * Make edits to tools/gpu/gl/interface/templates.go or they will
15*c8dee2aaSAndroid Build Coastguard Worker * be overwritten.
16*c8dee2aaSAndroid Build Coastguard Worker */
17*c8dee2aaSAndroid Build Coastguard Worker
18*c8dee2aaSAndroid Build Coastguard Worker#include "include/core/SkRefCnt.h"
19*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLAssembleHelpers.h"
20*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLAssembleInterface.h"
21*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLExtensions.h"
22*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLFunctions.h"
23*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLInterface.h"
24*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLTypes.h"
25*c8dee2aaSAndroid Build Coastguard Worker#include "src/gpu/ganesh/gl/GrGLDefines.h"
26*c8dee2aaSAndroid Build Coastguard Worker#include "src/gpu/ganesh/gl/GrGLUtil.h"
27*c8dee2aaSAndroid Build Coastguard Worker
28*c8dee2aaSAndroid Build Coastguard Worker#define GET_PROC(F) functions->f##F = (GrGL##F##Fn*)get(ctx, "gl" #F)
29*c8dee2aaSAndroid Build Coastguard Worker#define GET_PROC_SUFFIX(F, S) functions->f##F = (GrGL##F##Fn*)get(ctx, "gl" #F #S)
30*c8dee2aaSAndroid Build Coastguard Worker#define GET_PROC_LOCAL(F) GrGL##F##Fn* F = (GrGL##F##Fn*)get(ctx, "gl" #F)
31*c8dee2aaSAndroid Build Coastguard Worker
32*c8dee2aaSAndroid Build Coastguard Worker#define GET_EGL_PROC_SUFFIX(F, S) functions->fEGL##F = (GrEGL##F##Fn*)get(ctx, "egl" #F #S)
33*c8dee2aaSAndroid Build Coastguard Worker
34*c8dee2aaSAndroid Build Coastguard Worker#if SK_DISABLE_GL_ES_INTERFACE
35*c8dee2aaSAndroid Build Coastguard Workersk_sp<const GrGLInterface> GrGLMakeAssembledGLESInterface(void *ctx, GrGLGetProc get) {
36*c8dee2aaSAndroid Build Coastguard Worker    return nullptr;
37*c8dee2aaSAndroid Build Coastguard Worker}
38*c8dee2aaSAndroid Build Coastguard Worker#else
39*c8dee2aaSAndroid Build Coastguard Workersk_sp<const GrGLInterface> GrGLMakeAssembledGLESInterface(void *ctx, GrGLGetProc get) {
40*c8dee2aaSAndroid Build Coastguard Worker    GET_PROC_LOCAL(GetString);
41*c8dee2aaSAndroid Build Coastguard Worker    if (nullptr == GetString) {
42*c8dee2aaSAndroid Build Coastguard Worker        return nullptr;
43*c8dee2aaSAndroid Build Coastguard Worker    }
44*c8dee2aaSAndroid Build Coastguard Worker
45*c8dee2aaSAndroid Build Coastguard Worker    const char* verStr = reinterpret_cast<const char*>(GetString(GR_GL_VERSION));
46*c8dee2aaSAndroid Build Coastguard Worker    GrGLVersion glVer = GrGLGetVersionFromString(verStr);
47*c8dee2aaSAndroid Build Coastguard Worker
48*c8dee2aaSAndroid Build Coastguard Worker    if (glVer < GR_GL_VER(2,0)) {
49*c8dee2aaSAndroid Build Coastguard Worker        return nullptr;
50*c8dee2aaSAndroid Build Coastguard Worker    }
51*c8dee2aaSAndroid Build Coastguard Worker
52*c8dee2aaSAndroid Build Coastguard Worker    GET_PROC_LOCAL(GetIntegerv);
53*c8dee2aaSAndroid Build Coastguard Worker    GET_PROC_LOCAL(GetStringi);
54*c8dee2aaSAndroid Build Coastguard Worker    GrEGLQueryStringFn* queryString;
55*c8dee2aaSAndroid Build Coastguard Worker    GrEGLDisplay display;
56*c8dee2aaSAndroid Build Coastguard Worker    GrGetEGLQueryAndDisplay(&queryString, &display, ctx, get);
57*c8dee2aaSAndroid Build Coastguard Worker    GrGLExtensions extensions;
58*c8dee2aaSAndroid Build Coastguard Worker    if (!extensions.init(kGLES_GrGLStandard, GetString, GetStringi, GetIntegerv, queryString,
59*c8dee2aaSAndroid Build Coastguard Worker                         display)) {
60*c8dee2aaSAndroid Build Coastguard Worker        return nullptr;
61*c8dee2aaSAndroid Build Coastguard Worker    }
62*c8dee2aaSAndroid Build Coastguard Worker
63*c8dee2aaSAndroid Build Coastguard Worker    sk_sp<GrGLInterface> interface(new GrGLInterface);
64*c8dee2aaSAndroid Build Coastguard Worker    GrGLInterface::Functions* functions = &interface->fFunctions;
65*c8dee2aaSAndroid Build Coastguard Worker
66*c8dee2aaSAndroid Build Coastguard Worker    // Autogenerated content follows
67*c8dee2aaSAndroid Build Coastguard Worker[[content]]
68*c8dee2aaSAndroid Build Coastguard Worker    // End autogenerated content
69*c8dee2aaSAndroid Build Coastguard Worker    // TODO(kjlubick): Do we want a feature that removes the extension if it doesn't have
70*c8dee2aaSAndroid Build Coastguard Worker    // the function? This is common on some low-end GPUs.
71*c8dee2aaSAndroid Build Coastguard Worker
72*c8dee2aaSAndroid Build Coastguard Worker    if (extensions.has("GL_KHR_debug")) {
73*c8dee2aaSAndroid Build Coastguard Worker        // In general we have a policy against removing extension strings when the driver does
74*c8dee2aaSAndroid Build Coastguard Worker        // not provide function pointers for an advertised extension. However, because there is a
75*c8dee2aaSAndroid Build Coastguard Worker        // known device that advertises GL_KHR_debug but fails to provide the functions and this is
76*c8dee2aaSAndroid Build Coastguard Worker        // a debugging- only extension we've made an exception. This also can happen when using
77*c8dee2aaSAndroid Build Coastguard Worker        // APITRACE.
78*c8dee2aaSAndroid Build Coastguard Worker        if (!interface->fFunctions.fDebugMessageControl) {
79*c8dee2aaSAndroid Build Coastguard Worker            extensions.remove("GL_KHR_debug");
80*c8dee2aaSAndroid Build Coastguard Worker        }
81*c8dee2aaSAndroid Build Coastguard Worker    }
82*c8dee2aaSAndroid Build Coastguard Worker    interface->fStandard = kGLES_GrGLStandard;
83*c8dee2aaSAndroid Build Coastguard Worker    interface->fExtensions.swap(&extensions);
84*c8dee2aaSAndroid Build Coastguard Worker
85*c8dee2aaSAndroid Build Coastguard Worker    return interface;
86*c8dee2aaSAndroid Build Coastguard Worker}
87*c8dee2aaSAndroid Build Coastguard Worker#endif
88*c8dee2aaSAndroid Build Coastguard Worker`
89*c8dee2aaSAndroid Build Coastguard Worker
90*c8dee2aaSAndroid Build Coastguard Workerconst ASSEMBLE_INTERFACE_GL = `/*
91*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2019 Google LLC
92*c8dee2aaSAndroid Build Coastguard Worker *
93*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
94*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file.
95*c8dee2aaSAndroid Build Coastguard Worker *
96*c8dee2aaSAndroid Build Coastguard Worker * THIS FILE IS AUTOGENERATED
97*c8dee2aaSAndroid Build Coastguard Worker * Make edits to tools/gpu/gl/interface/templates.go or they will
98*c8dee2aaSAndroid Build Coastguard Worker * be overwritten.
99*c8dee2aaSAndroid Build Coastguard Worker */
100*c8dee2aaSAndroid Build Coastguard Worker
101*c8dee2aaSAndroid Build Coastguard Worker#include "include/core/SkRefCnt.h"
102*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLAssembleHelpers.h"
103*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLAssembleInterface.h"
104*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLExtensions.h"
105*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLFunctions.h"
106*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLInterface.h"
107*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLTypes.h"
108*c8dee2aaSAndroid Build Coastguard Worker#include "src/gpu/ganesh/gl/GrGLDefines.h"
109*c8dee2aaSAndroid Build Coastguard Worker#include "src/gpu/ganesh/gl/GrGLUtil.h"
110*c8dee2aaSAndroid Build Coastguard Worker
111*c8dee2aaSAndroid Build Coastguard Worker#define GET_PROC(F) functions->f##F = (GrGL##F##Fn*)get(ctx, "gl" #F)
112*c8dee2aaSAndroid Build Coastguard Worker#define GET_PROC_SUFFIX(F, S) functions->f##F = (GrGL##F##Fn*)get(ctx, "gl" #F #S)
113*c8dee2aaSAndroid Build Coastguard Worker#define GET_PROC_LOCAL(F) GrGL##F##Fn* F = (GrGL##F##Fn*)get(ctx, "gl" #F)
114*c8dee2aaSAndroid Build Coastguard Worker
115*c8dee2aaSAndroid Build Coastguard Worker#define GET_EGL_PROC_SUFFIX(F, S) functions->fEGL##F = (GrEGL##F##Fn*)get(ctx, "egl" #F #S)
116*c8dee2aaSAndroid Build Coastguard Worker
117*c8dee2aaSAndroid Build Coastguard Worker#if SK_DISABLE_GL_INTERFACE
118*c8dee2aaSAndroid Build Coastguard Workersk_sp<const GrGLInterface> GrGLMakeAssembledGLInterface(void *ctx, GrGLGetProc get) {
119*c8dee2aaSAndroid Build Coastguard Worker    return nullptr;
120*c8dee2aaSAndroid Build Coastguard Worker}
121*c8dee2aaSAndroid Build Coastguard Worker#else
122*c8dee2aaSAndroid Build Coastguard Workersk_sp<const GrGLInterface> GrGLMakeAssembledGLInterface(void *ctx, GrGLGetProc get) {
123*c8dee2aaSAndroid Build Coastguard Worker    GET_PROC_LOCAL(GetString);
124*c8dee2aaSAndroid Build Coastguard Worker    GET_PROC_LOCAL(GetStringi);
125*c8dee2aaSAndroid Build Coastguard Worker    GET_PROC_LOCAL(GetIntegerv);
126*c8dee2aaSAndroid Build Coastguard Worker
127*c8dee2aaSAndroid Build Coastguard Worker    // GetStringi may be nullptr depending on the GL version.
128*c8dee2aaSAndroid Build Coastguard Worker    if (nullptr == GetString || nullptr == GetIntegerv) {
129*c8dee2aaSAndroid Build Coastguard Worker        return nullptr;
130*c8dee2aaSAndroid Build Coastguard Worker    }
131*c8dee2aaSAndroid Build Coastguard Worker
132*c8dee2aaSAndroid Build Coastguard Worker    const char* versionString = (const char*) GetString(GR_GL_VERSION);
133*c8dee2aaSAndroid Build Coastguard Worker    GrGLVersion glVer = GrGLGetVersionFromString(versionString);
134*c8dee2aaSAndroid Build Coastguard Worker
135*c8dee2aaSAndroid Build Coastguard Worker    if (glVer < GR_GL_VER(2,0) || GR_GL_INVALID_VER == glVer) {
136*c8dee2aaSAndroid Build Coastguard Worker        // This is our minimum for non-ES GL.
137*c8dee2aaSAndroid Build Coastguard Worker        return nullptr;
138*c8dee2aaSAndroid Build Coastguard Worker    }
139*c8dee2aaSAndroid Build Coastguard Worker
140*c8dee2aaSAndroid Build Coastguard Worker    GrEGLQueryStringFn* queryString;
141*c8dee2aaSAndroid Build Coastguard Worker    GrEGLDisplay display;
142*c8dee2aaSAndroid Build Coastguard Worker    GrGetEGLQueryAndDisplay(&queryString, &display, ctx, get);
143*c8dee2aaSAndroid Build Coastguard Worker    GrGLExtensions extensions;
144*c8dee2aaSAndroid Build Coastguard Worker    if (!extensions.init(kGL_GrGLStandard, GetString, GetStringi, GetIntegerv, queryString,
145*c8dee2aaSAndroid Build Coastguard Worker                         display)) {
146*c8dee2aaSAndroid Build Coastguard Worker        return nullptr;
147*c8dee2aaSAndroid Build Coastguard Worker    }
148*c8dee2aaSAndroid Build Coastguard Worker
149*c8dee2aaSAndroid Build Coastguard Worker    sk_sp<GrGLInterface> interface(new GrGLInterface());
150*c8dee2aaSAndroid Build Coastguard Worker    GrGLInterface::Functions* functions = &interface->fFunctions;
151*c8dee2aaSAndroid Build Coastguard Worker
152*c8dee2aaSAndroid Build Coastguard Worker    // Autogenerated content follows
153*c8dee2aaSAndroid Build Coastguard Worker[[content]]
154*c8dee2aaSAndroid Build Coastguard Worker    // End autogenerated content
155*c8dee2aaSAndroid Build Coastguard Worker    interface->fStandard = kGL_GrGLStandard;
156*c8dee2aaSAndroid Build Coastguard Worker    interface->fExtensions.swap(&extensions);
157*c8dee2aaSAndroid Build Coastguard Worker
158*c8dee2aaSAndroid Build Coastguard Worker    return interface;
159*c8dee2aaSAndroid Build Coastguard Worker}
160*c8dee2aaSAndroid Build Coastguard Worker#endif
161*c8dee2aaSAndroid Build Coastguard Worker`
162*c8dee2aaSAndroid Build Coastguard Worker
163*c8dee2aaSAndroid Build Coastguard Workerconst ASSEMBLE_INTERFACE_WEBGL = `/*
164*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2019 Google LLC
165*c8dee2aaSAndroid Build Coastguard Worker *
166*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
167*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file.
168*c8dee2aaSAndroid Build Coastguard Worker *
169*c8dee2aaSAndroid Build Coastguard Worker * THIS FILE IS AUTOGENERATED
170*c8dee2aaSAndroid Build Coastguard Worker * Make edits to tools/gpu/gl/interface/templates.go or they will
171*c8dee2aaSAndroid Build Coastguard Worker * be overwritten.
172*c8dee2aaSAndroid Build Coastguard Worker */
173*c8dee2aaSAndroid Build Coastguard Worker#include "include/core/SkRefCnt.h"
174*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLAssembleInterface.h"
175*c8dee2aaSAndroid Build Coastguard Worker
176*c8dee2aaSAndroid Build Coastguard Worker#if SK_DISABLE_WEBGL_INTERFACE || !defined(__EMSCRIPTEN__)
177*c8dee2aaSAndroid Build Coastguard Workerstruct GrGLInterface;
178*c8dee2aaSAndroid Build Coastguard Workersk_sp<const GrGLInterface> GrGLMakeAssembledWebGLInterface(void *ctx, GrGLGetProc get) {
179*c8dee2aaSAndroid Build Coastguard Worker    return nullptr;
180*c8dee2aaSAndroid Build Coastguard Worker}
181*c8dee2aaSAndroid Build Coastguard Worker#else
182*c8dee2aaSAndroid Build Coastguard Worker
183*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLAssembleHelpers.h"
184*c8dee2aaSAndroid Build Coastguard Worker#include "src/gpu/ganesh/gl/GrGLUtil.h"
185*c8dee2aaSAndroid Build Coastguard Worker
186*c8dee2aaSAndroid Build Coastguard Worker// Located https://github.com/emscripten-core/emscripten/tree/7ba7700902c46734987585409502f3c63beb650f/system/include/webgl
187*c8dee2aaSAndroid Build Coastguard Worker#include <webgl/webgl1.h>
188*c8dee2aaSAndroid Build Coastguard Worker#include <webgl/webgl1_ext.h>
189*c8dee2aaSAndroid Build Coastguard Worker#include <webgl/webgl2.h>
190*c8dee2aaSAndroid Build Coastguard Worker#include <webgl/webgl2_ext.h>
191*c8dee2aaSAndroid Build Coastguard Worker
192*c8dee2aaSAndroid Build Coastguard Worker#define GET_PROC(F) functions->f##F = emscripten_gl##F
193*c8dee2aaSAndroid Build Coastguard Worker#define GET_PROC_SUFFIX(F, S) functions->f##F = emscripten_gl##F##S
194*c8dee2aaSAndroid Build Coastguard Worker
195*c8dee2aaSAndroid Build Coastguard Workersk_sp<const GrGLInterface> GrGLMakeAssembledWebGLInterface(void *ctx, GrGLGetProc get) {
196*c8dee2aaSAndroid Build Coastguard Worker    const char* verStr = reinterpret_cast<const char*>(glGetString(GR_GL_VERSION));
197*c8dee2aaSAndroid Build Coastguard Worker    GrGLVersion glVer = GrGLGetVersionFromString(verStr);
198*c8dee2aaSAndroid Build Coastguard Worker    if (glVer < GR_GL_VER(1,0)) {
199*c8dee2aaSAndroid Build Coastguard Worker        return nullptr;
200*c8dee2aaSAndroid Build Coastguard Worker    }
201*c8dee2aaSAndroid Build Coastguard Worker
202*c8dee2aaSAndroid Build Coastguard Worker    GrGLExtensions extensions;
203*c8dee2aaSAndroid Build Coastguard Worker    if (!extensions.init(kWebGL_GrGLStandard, glGetString, glGetStringi, glGetIntegerv)) {
204*c8dee2aaSAndroid Build Coastguard Worker        return nullptr;
205*c8dee2aaSAndroid Build Coastguard Worker    }
206*c8dee2aaSAndroid Build Coastguard Worker
207*c8dee2aaSAndroid Build Coastguard Worker    sk_sp<GrGLInterface> interface(new GrGLInterface);
208*c8dee2aaSAndroid Build Coastguard Worker    GrGLInterface::Functions* functions = &interface->fFunctions;
209*c8dee2aaSAndroid Build Coastguard Worker
210*c8dee2aaSAndroid Build Coastguard Worker    // Autogenerated content follows
211*c8dee2aaSAndroid Build Coastguard Worker[[content]]
212*c8dee2aaSAndroid Build Coastguard Worker    // End autogenerated content
213*c8dee2aaSAndroid Build Coastguard Worker
214*c8dee2aaSAndroid Build Coastguard Worker    interface->fStandard = kWebGL_GrGLStandard;
215*c8dee2aaSAndroid Build Coastguard Worker    interface->fExtensions.swap(&extensions);
216*c8dee2aaSAndroid Build Coastguard Worker
217*c8dee2aaSAndroid Build Coastguard Worker    return interface;
218*c8dee2aaSAndroid Build Coastguard Worker}
219*c8dee2aaSAndroid Build Coastguard Worker#endif
220*c8dee2aaSAndroid Build Coastguard Worker`
221*c8dee2aaSAndroid Build Coastguard Worker
222*c8dee2aaSAndroid Build Coastguard Workerconst VALIDATE_INTERFACE = `/*
223*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2011 Google Inc.
224*c8dee2aaSAndroid Build Coastguard Worker *
225*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
226*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file.
227*c8dee2aaSAndroid Build Coastguard Worker *
228*c8dee2aaSAndroid Build Coastguard Worker * THIS FILE IS AUTOGENERATED
229*c8dee2aaSAndroid Build Coastguard Worker * Make edits to tools/gpu/gl/interface/templates.go or they will
230*c8dee2aaSAndroid Build Coastguard Worker * be overwritten.
231*c8dee2aaSAndroid Build Coastguard Worker */
232*c8dee2aaSAndroid Build Coastguard Worker
233*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLConfig.h"
234*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLExtensions.h"
235*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLFunctions.h"
236*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLInterface.h"
237*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/gl/GrGLTypes.h"
238*c8dee2aaSAndroid Build Coastguard Worker#include "include/private/base/SkDebug.h"
239*c8dee2aaSAndroid Build Coastguard Worker#include "src/gpu/ganesh/gl/GrGLDefines.h"
240*c8dee2aaSAndroid Build Coastguard Worker#include "src/gpu/ganesh/gl/GrGLUtil.h"
241*c8dee2aaSAndroid Build Coastguard Worker
242*c8dee2aaSAndroid Build Coastguard WorkerGrGLInterface::GrGLInterface() {
243*c8dee2aaSAndroid Build Coastguard Worker    fStandard = kNone_GrGLStandard;
244*c8dee2aaSAndroid Build Coastguard Worker}
245*c8dee2aaSAndroid Build Coastguard Worker
246*c8dee2aaSAndroid Build Coastguard Worker#if GR_GL_CHECK_ERROR
247*c8dee2aaSAndroid Build Coastguard Workerstatic const char* get_error_string(GrGLenum err) {
248*c8dee2aaSAndroid Build Coastguard Worker    switch (err) {
249*c8dee2aaSAndroid Build Coastguard Worker        case GR_GL_NO_ERROR:
250*c8dee2aaSAndroid Build Coastguard Worker            return "";
251*c8dee2aaSAndroid Build Coastguard Worker        case GR_GL_INVALID_ENUM:
252*c8dee2aaSAndroid Build Coastguard Worker            return "Invalid Enum";
253*c8dee2aaSAndroid Build Coastguard Worker        case GR_GL_INVALID_VALUE:
254*c8dee2aaSAndroid Build Coastguard Worker            return "Invalid Value";
255*c8dee2aaSAndroid Build Coastguard Worker        case GR_GL_INVALID_OPERATION:
256*c8dee2aaSAndroid Build Coastguard Worker            return "Invalid Operation";
257*c8dee2aaSAndroid Build Coastguard Worker        case GR_GL_OUT_OF_MEMORY:
258*c8dee2aaSAndroid Build Coastguard Worker            return "Out of Memory";
259*c8dee2aaSAndroid Build Coastguard Worker        case GR_GL_CONTEXT_LOST:
260*c8dee2aaSAndroid Build Coastguard Worker            return "Context Lost";
261*c8dee2aaSAndroid Build Coastguard Worker    }
262*c8dee2aaSAndroid Build Coastguard Worker    return "Unknown";
263*c8dee2aaSAndroid Build Coastguard Worker}
264*c8dee2aaSAndroid Build Coastguard Worker
265*c8dee2aaSAndroid Build Coastguard WorkerGrGLenum GrGLInterface::checkError(const char* location, const char* call) const {
266*c8dee2aaSAndroid Build Coastguard Worker    GrGLenum error = fFunctions.fGetError();
267*c8dee2aaSAndroid Build Coastguard Worker    if (error != GR_GL_NO_ERROR && !fSuppressErrorLogging) {
268*c8dee2aaSAndroid Build Coastguard Worker        SkDebugf("---- glGetError 0x%x(%s)", error, get_error_string(error));
269*c8dee2aaSAndroid Build Coastguard Worker        if (location) {
270*c8dee2aaSAndroid Build Coastguard Worker            SkDebugf(" at\n\t%s", location);
271*c8dee2aaSAndroid Build Coastguard Worker        }
272*c8dee2aaSAndroid Build Coastguard Worker        if (call) {
273*c8dee2aaSAndroid Build Coastguard Worker            SkDebugf("\n\t\t%s", call);
274*c8dee2aaSAndroid Build Coastguard Worker        }
275*c8dee2aaSAndroid Build Coastguard Worker        SkDebugf("\n");
276*c8dee2aaSAndroid Build Coastguard Worker        if (error == GR_GL_OUT_OF_MEMORY) {
277*c8dee2aaSAndroid Build Coastguard Worker            fOOMed = true;
278*c8dee2aaSAndroid Build Coastguard Worker        }
279*c8dee2aaSAndroid Build Coastguard Worker    }
280*c8dee2aaSAndroid Build Coastguard Worker    return error;
281*c8dee2aaSAndroid Build Coastguard Worker}
282*c8dee2aaSAndroid Build Coastguard Worker
283*c8dee2aaSAndroid Build Coastguard Workerbool GrGLInterface::checkAndResetOOMed() const {
284*c8dee2aaSAndroid Build Coastguard Worker    if (fOOMed) {
285*c8dee2aaSAndroid Build Coastguard Worker        fOOMed = false;
286*c8dee2aaSAndroid Build Coastguard Worker        return true;
287*c8dee2aaSAndroid Build Coastguard Worker    }
288*c8dee2aaSAndroid Build Coastguard Worker    return false;
289*c8dee2aaSAndroid Build Coastguard Worker}
290*c8dee2aaSAndroid Build Coastguard Worker
291*c8dee2aaSAndroid Build Coastguard Workervoid GrGLInterface::suppressErrorLogging() { fSuppressErrorLogging = true; }
292*c8dee2aaSAndroid Build Coastguard Worker#endif
293*c8dee2aaSAndroid Build Coastguard Worker
294*c8dee2aaSAndroid Build Coastguard Worker#define RETURN_FALSE_INTERFACE                                                 \
295*c8dee2aaSAndroid Build Coastguard Worker    SkDEBUGF("%s:%d GrGLInterface::validate() failed.\n", __FILE__, __LINE__); \
296*c8dee2aaSAndroid Build Coastguard Worker    return false
297*c8dee2aaSAndroid Build Coastguard Worker
298*c8dee2aaSAndroid Build Coastguard Workerbool GrGLInterface::validate() const {
299*c8dee2aaSAndroid Build Coastguard Worker
300*c8dee2aaSAndroid Build Coastguard Worker    if (kNone_GrGLStandard == fStandard) {
301*c8dee2aaSAndroid Build Coastguard Worker        RETURN_FALSE_INTERFACE;
302*c8dee2aaSAndroid Build Coastguard Worker    }
303*c8dee2aaSAndroid Build Coastguard Worker
304*c8dee2aaSAndroid Build Coastguard Worker    if (!fExtensions.isInitialized()) {
305*c8dee2aaSAndroid Build Coastguard Worker        RETURN_FALSE_INTERFACE;
306*c8dee2aaSAndroid Build Coastguard Worker    }
307*c8dee2aaSAndroid Build Coastguard Worker
308*c8dee2aaSAndroid Build Coastguard Worker    GrGLVersion glVer = GrGLGetVersion(this);
309*c8dee2aaSAndroid Build Coastguard Worker    if (GR_GL_INVALID_VER == glVer) {
310*c8dee2aaSAndroid Build Coastguard Worker        RETURN_FALSE_INTERFACE;
311*c8dee2aaSAndroid Build Coastguard Worker    }
312*c8dee2aaSAndroid Build Coastguard Worker    // Autogenerated content follows
313*c8dee2aaSAndroid Build Coastguard Worker[[content]]
314*c8dee2aaSAndroid Build Coastguard Worker    // End autogenerated content
315*c8dee2aaSAndroid Build Coastguard Worker    return true;
316*c8dee2aaSAndroid Build Coastguard Worker}
317*c8dee2aaSAndroid Build Coastguard Worker
318*c8dee2aaSAndroid Build Coastguard Worker#if defined(GPU_TEST_UTILS)
319*c8dee2aaSAndroid Build Coastguard Worker
320*c8dee2aaSAndroid Build Coastguard Workervoid GrGLInterface::abandon() const {
321*c8dee2aaSAndroid Build Coastguard Worker    const_cast<GrGLInterface*>(this)->fFunctions = GrGLInterface::Functions();
322*c8dee2aaSAndroid Build Coastguard Worker}
323*c8dee2aaSAndroid Build Coastguard Worker
324*c8dee2aaSAndroid Build Coastguard Worker#endif // defined(GPU_TEST_UTILS)
325*c8dee2aaSAndroid Build Coastguard Worker`
326