| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package main |
| |
| const ASSEMBLE_INTERFACE_GL_ES = `/* |
| * Copyright 2019 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| * |
| * THIS FILE IS AUTOGENERATED |
| * Make edits to tools/gpu/gl/interface/templates.go or they will |
| * be overwritten. |
| */ |
| |
| #include "include/gpu/gl/GrGLAssembleHelpers.h" |
| #include "include/gpu/gl/GrGLAssembleInterface.h" |
| #include "src/gpu/gl/GrGLUtil.h" |
| |
| #define GET_PROC(F) functions->f##F = (GrGL##F##Fn*)get(ctx, "gl" #F) |
| #define GET_PROC_SUFFIX(F, S) functions->f##F = (GrGL##F##Fn*)get(ctx, "gl" #F #S) |
| #define GET_PROC_LOCAL(F) GrGL##F##Fn* F = (GrGL##F##Fn*)get(ctx, "gl" #F) |
| |
| #define GET_EGL_PROC_SUFFIX(F, S) functions->fEGL##F = (GrEGL##F##Fn*)get(ctx, "egl" #F #S) |
| |
| #if SK_DISABLE_GL_ES_INTERFACE |
| sk_sp<const GrGLInterface> GrGLMakeAssembledGLESInterface(void *ctx, GrGLGetProc get) { |
| return nullptr; |
| } |
| #else |
| sk_sp<const GrGLInterface> GrGLMakeAssembledGLESInterface(void *ctx, GrGLGetProc get) { |
| GET_PROC_LOCAL(GetString); |
| if (nullptr == GetString) { |
| return nullptr; |
| } |
| |
| const char* verStr = reinterpret_cast<const char*>(GetString(GR_GL_VERSION)); |
| GrGLVersion glVer = GrGLGetVersionFromString(verStr); |
| |
| if (glVer < GR_GL_VER(2,0)) { |
| return nullptr; |
| } |
| |
| GET_PROC_LOCAL(GetIntegerv); |
| GET_PROC_LOCAL(GetStringi); |
| GrEGLQueryStringFn* queryString; |
| GrEGLDisplay display; |
| GrGetEGLQueryAndDisplay(&queryString, &display, ctx, get); |
| GrGLExtensions extensions; |
| if (!extensions.init(kGLES_GrGLStandard, GetString, GetStringi, GetIntegerv, queryString, |
| display)) { |
| return nullptr; |
| } |
| |
| sk_sp<GrGLInterface> interface(new GrGLInterface); |
| GrGLInterface::Functions* functions = &interface->fFunctions; |
| |
| // Autogenerated content follows |
| [[content]] |
| // End autogenerated content |
| // TODO(kjlubick): Do we want a feature that removes the extension if it doesn't have |
| // the function? This is common on some low-end GPUs. |
| |
| if (extensions.has("GL_KHR_debug")) { |
| // In general we have a policy against removing extension strings when the driver does |
| // not provide function pointers for an advertised extension. However, because there is a |
| // known device that advertises GL_KHR_debug but fails to provide the functions and this is |
| // a debugging- only extension we've made an exception. This also can happen when using |
| // APITRACE. |
| if (!interface->fFunctions.fDebugMessageControl) { |
| extensions.remove("GL_KHR_debug"); |
| } |
| } |
| interface->fStandard = kGLES_GrGLStandard; |
| interface->fExtensions.swap(&extensions); |
| |
| return interface; |
| } |
| #endif |
| ` |
| |
| const ASSEMBLE_INTERFACE_GL = `/* |
| * Copyright 2019 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| * |
| * THIS FILE IS AUTOGENERATED |
| * Make edits to tools/gpu/gl/interface/templates.go or they will |
| * be overwritten. |
| */ |
| |
| #include "include/gpu/gl/GrGLAssembleHelpers.h" |
| #include "include/gpu/gl/GrGLAssembleInterface.h" |
| #include "src/gpu/gl/GrGLUtil.h" |
| |
| #define GET_PROC(F) functions->f##F = (GrGL##F##Fn*)get(ctx, "gl" #F) |
| #define GET_PROC_SUFFIX(F, S) functions->f##F = (GrGL##F##Fn*)get(ctx, "gl" #F #S) |
| #define GET_PROC_LOCAL(F) GrGL##F##Fn* F = (GrGL##F##Fn*)get(ctx, "gl" #F) |
| |
| #define GET_EGL_PROC_SUFFIX(F, S) functions->fEGL##F = (GrEGL##F##Fn*)get(ctx, "egl" #F #S) |
| |
| #if SK_DISABLE_GL_INTERFACE |
| sk_sp<const GrGLInterface> GrGLMakeAssembledGLInterface(void *ctx, GrGLGetProc get) { |
| return nullptr; |
| } |
| #else |
| sk_sp<const GrGLInterface> GrGLMakeAssembledGLInterface(void *ctx, GrGLGetProc get) { |
| GET_PROC_LOCAL(GetString); |
| GET_PROC_LOCAL(GetStringi); |
| GET_PROC_LOCAL(GetIntegerv); |
| |
| // GetStringi may be nullptr depending on the GL version. |
| if (nullptr == GetString || nullptr == GetIntegerv) { |
| return nullptr; |
| } |
| |
| const char* versionString = (const char*) GetString(GR_GL_VERSION); |
| GrGLVersion glVer = GrGLGetVersionFromString(versionString); |
| |
| if (glVer < GR_GL_VER(2,0) || GR_GL_INVALID_VER == glVer) { |
| // This is our minimum for non-ES GL. |
| return nullptr; |
| } |
| |
| GrEGLQueryStringFn* queryString; |
| GrEGLDisplay display; |
| GrGetEGLQueryAndDisplay(&queryString, &display, ctx, get); |
| GrGLExtensions extensions; |
| if (!extensions.init(kGL_GrGLStandard, GetString, GetStringi, GetIntegerv, queryString, |
| display)) { |
| return nullptr; |
| } |
| |
| sk_sp<GrGLInterface> interface(new GrGLInterface()); |
| GrGLInterface::Functions* functions = &interface->fFunctions; |
| |
| // Autogenerated content follows |
| [[content]] |
| // End autogenerated content |
| interface->fStandard = kGL_GrGLStandard; |
| interface->fExtensions.swap(&extensions); |
| |
| return interface; |
| } |
| #endif |
| ` |
| |
| const ASSEMBLE_INTERFACE_WEBGL = `/* |
| * Copyright 2019 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| * |
| * THIS FILE IS AUTOGENERATED |
| * Make edits to tools/gpu/gl/interface/templates.go or they will |
| * be overwritten. |
| */ |
| |
| #include "include/gpu/gl/GrGLAssembleHelpers.h" |
| #include "include/gpu/gl/GrGLAssembleInterface.h" |
| #include "src/gpu/gl/GrGLUtil.h" |
| |
| #define GET_PROC(F) functions->f##F = (GrGL##F##Fn*)get(ctx, "gl" #F) |
| #define GET_PROC_SUFFIX(F, S) functions->f##F = (GrGL##F##Fn*)get(ctx, "gl" #F #S) |
| #define GET_PROC_LOCAL(F) GrGL##F##Fn* F = (GrGL##F##Fn*)get(ctx, "gl" #F) |
| |
| #define GET_EGL_PROC_SUFFIX(F, S) functions->fEGL##F = (GrEGL##F##Fn*)get(ctx, "egl" #F #S) |
| |
| #if SK_DISABLE_WEBGL_INTERFACE |
| sk_sp<const GrGLInterface> GrGLMakeAssembledWebGLInterface(void *ctx, GrGLGetProc get) { |
| return nullptr; |
| } |
| #else |
| sk_sp<const GrGLInterface> GrGLMakeAssembledWebGLInterface(void *ctx, GrGLGetProc get) { |
| GET_PROC_LOCAL(GetString); |
| if (nullptr == GetString) { |
| return nullptr; |
| } |
| |
| const char* verStr = reinterpret_cast<const char*>(GetString(GR_GL_VERSION)); |
| GrGLVersion glVer = GrGLGetVersionFromString(verStr); |
| |
| if (glVer < GR_GL_VER(1,0)) { |
| return nullptr; |
| } |
| |
| GET_PROC_LOCAL(GetIntegerv); |
| GET_PROC_LOCAL(GetStringi); |
| GrEGLQueryStringFn* queryString; |
| GrEGLDisplay display; |
| GrGetEGLQueryAndDisplay(&queryString, &display, ctx, get); |
| GrGLExtensions extensions; |
| if (!extensions.init(kWebGL_GrGLStandard, GetString, GetStringi, GetIntegerv, queryString, |
| display)) { |
| return nullptr; |
| } |
| |
| sk_sp<GrGLInterface> interface(new GrGLInterface); |
| GrGLInterface::Functions* functions = &interface->fFunctions; |
| |
| // Autogenerated content follows |
| [[content]] |
| // End autogenerated content |
| |
| interface->fStandard = kWebGL_GrGLStandard; |
| interface->fExtensions.swap(&extensions); |
| |
| return interface; |
| } |
| #endif |
| ` |
| |
| const VALIDATE_INTERFACE = `/* |
| * Copyright 2011 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| * |
| * THIS FILE IS AUTOGENERATED |
| * Make edits to tools/gpu/gl/interface/templates.go or they will |
| * be overwritten. |
| */ |
| |
| #include "include/gpu/gl/GrGLExtensions.h" |
| #include "include/gpu/gl/GrGLInterface.h" |
| #include "src/gpu/gl/GrGLUtil.h" |
| |
| #include <stdio.h> |
| |
| GrGLInterface::GrGLInterface() { |
| fStandard = kNone_GrGLStandard; |
| } |
| |
| #define RETURN_FALSE_INTERFACE \ |
| SkDEBUGF("%s:%d GrGLInterface::validate() failed.\n", __FILE__, __LINE__); \ |
| return false |
| |
| bool GrGLInterface::validate() const { |
| |
| if (kNone_GrGLStandard == fStandard) { |
| RETURN_FALSE_INTERFACE; |
| } |
| |
| if (!fExtensions.isInitialized()) { |
| RETURN_FALSE_INTERFACE; |
| } |
| |
| GrGLVersion glVer = GrGLGetVersion(this); |
| if (GR_GL_INVALID_VER == glVer) { |
| RETURN_FALSE_INTERFACE; |
| } |
| // Autogenerated content follows |
| [[content]] |
| // End autogenerated content |
| return true; |
| } |
| |
| #if GR_TEST_UTILS |
| |
| void GrGLInterface::abandon() const { |
| const_cast<GrGLInterface*>(this)->fFunctions = GrGLInterface::Functions(); |
| } |
| |
| #endif // GR_TEST_UTILS |
| ` |