blob: 3417ecef0332845ce03ceac156adddede84887bb [file] [log] [blame]
/*
* 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;
}
#if GR_GL_CHECK_ERROR
static const char* get_error_string(GrGLenum err) {
switch (err) {
case GR_GL_NO_ERROR:
return "";
case GR_GL_INVALID_ENUM:
return "Invalid Enum";
case GR_GL_INVALID_VALUE:
return "Invalid Value";
case GR_GL_INVALID_OPERATION:
return "Invalid Operation";
case GR_GL_OUT_OF_MEMORY:
return "Out of Memory";
case GR_GL_CONTEXT_LOST:
return "Context Lost";
}
return "Unknown";
}
GrGLenum GrGLInterface::checkError(const char* location, const char* call) const {
GrGLenum error = fFunctions.fGetError();
if (error != GR_GL_NO_ERROR && !fSuppressErrorLogging) {
SkDebugf("---- glGetError 0x%x(%s)", error, get_error_string(error));
if (location) {
SkDebugf(" at\n\t%s", location);
}
if (call) {
SkDebugf("\n\t\t%s", call);
}
SkDebugf("\n");
if (error == GR_GL_OUT_OF_MEMORY) {
fOOMed = true;
}
}
return error;
}
bool GrGLInterface::checkAndResetOOMed() const {
if (fOOMed) {
fOOMed = false;
return true;
}
return false;
}
void GrGLInterface::suppressErrorLogging() { fSuppressErrorLogging = true; }
#endif
#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
if (!fFunctions.fActiveTexture ||
!fFunctions.fAttachShader ||
!fFunctions.fBindAttribLocation ||
!fFunctions.fBindBuffer ||
!fFunctions.fBindTexture ||
!fFunctions.fBlendColor ||
!fFunctions.fBlendEquation ||
!fFunctions.fBlendFunc ||
!fFunctions.fBufferData ||
!fFunctions.fBufferSubData ||
!fFunctions.fClear ||
!fFunctions.fClearColor ||
!fFunctions.fClearStencil ||
!fFunctions.fColorMask ||
!fFunctions.fCompileShader ||
!fFunctions.fCompressedTexImage2D ||
!fFunctions.fCompressedTexSubImage2D ||
!fFunctions.fCopyTexSubImage2D ||
!fFunctions.fCreateProgram ||
!fFunctions.fCreateShader ||
!fFunctions.fCullFace ||
!fFunctions.fDeleteBuffers ||
!fFunctions.fDeleteProgram ||
!fFunctions.fDeleteShader ||
!fFunctions.fDeleteTextures ||
!fFunctions.fDepthMask ||
!fFunctions.fDisable ||
!fFunctions.fDisableVertexAttribArray ||
!fFunctions.fDrawArrays ||
!fFunctions.fDrawElements ||
!fFunctions.fEnable ||
!fFunctions.fEnableVertexAttribArray ||
!fFunctions.fFinish ||
!fFunctions.fFlush ||
!fFunctions.fFrontFace ||
!fFunctions.fGenBuffers ||
!fFunctions.fGenTextures ||
!fFunctions.fGetBufferParameteriv ||
!fFunctions.fGetError ||
!fFunctions.fGetIntegerv ||
!fFunctions.fGetProgramInfoLog ||
!fFunctions.fGetProgramiv ||
!fFunctions.fGetShaderInfoLog ||
!fFunctions.fGetShaderiv ||
!fFunctions.fGetString ||
!fFunctions.fGetUniformLocation ||
!fFunctions.fIsTexture ||
!fFunctions.fLineWidth ||
!fFunctions.fLinkProgram ||
!fFunctions.fPixelStorei ||
!fFunctions.fReadPixels ||
!fFunctions.fScissor ||
!fFunctions.fShaderSource ||
!fFunctions.fStencilFunc ||
!fFunctions.fStencilFuncSeparate ||
!fFunctions.fStencilMask ||
!fFunctions.fStencilMaskSeparate ||
!fFunctions.fStencilOp ||
!fFunctions.fStencilOpSeparate ||
!fFunctions.fTexImage2D ||
!fFunctions.fTexParameterf ||
!fFunctions.fTexParameterfv ||
!fFunctions.fTexParameteri ||
!fFunctions.fTexParameteriv ||
!fFunctions.fTexSubImage2D ||
!fFunctions.fUniform1f ||
!fFunctions.fUniform1fv ||
!fFunctions.fUniform1i ||
!fFunctions.fUniform1iv ||
!fFunctions.fUniform2f ||
!fFunctions.fUniform2fv ||
!fFunctions.fUniform2i ||
!fFunctions.fUniform2iv ||
!fFunctions.fUniform3f ||
!fFunctions.fUniform3fv ||
!fFunctions.fUniform3i ||
!fFunctions.fUniform3iv ||
!fFunctions.fUniform4f ||
!fFunctions.fUniform4fv ||
!fFunctions.fUniform4i ||
!fFunctions.fUniform4iv ||
!fFunctions.fUniformMatrix2fv ||
!fFunctions.fUniformMatrix3fv ||
!fFunctions.fUniformMatrix4fv ||
!fFunctions.fUseProgram ||
!fFunctions.fVertexAttrib1f ||
!fFunctions.fVertexAttrib2fv ||
!fFunctions.fVertexAttrib3fv ||
!fFunctions.fVertexAttrib4fv ||
!fFunctions.fVertexAttribPointer ||
!fFunctions.fViewport) {
RETURN_FALSE_INTERFACE;
}
if (GR_IS_GR_GL(fStandard)) {
if (!fFunctions.fDrawBuffer ||
!fFunctions.fPolygonMode) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,0)))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)))) ||
(GR_IS_GR_WEBGL(fStandard) && (
(glVer >= GR_GL_VER(2,0))))) {
if (!fFunctions.fGetStringi) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,2)))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,1))))) {
// all functions were marked optional or test_only
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_ARB_vertex_array_object") ||
fExtensions.has("GL_APPLE_vertex_array_object"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_OES_vertex_array_object"))) ||
(GR_IS_GR_WEBGL(fStandard) && (
(glVer >= GR_GL_VER(2,0)) ||
fExtensions.has("GL_OES_vertex_array_object") ||
fExtensions.has("OES_vertex_array_object")))) {
if (!fFunctions.fBindVertexArray ||
!fFunctions.fDeleteVertexArrays ||
!fFunctions.fGenVertexArrays) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,0)) ||
fExtensions.has("GL_ARB_tessellation_shader"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,2)) ||
fExtensions.has("GL_OES_tessellation_shader")))) {
if (!fFunctions.fPatchParameteri) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,0)))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0) && fExtensions.has("GL_EXT_blend_func_extended"))))) {
if (!fFunctions.fBindFragDataLocation) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,3)) ||
fExtensions.has("GL_ARB_blend_func_extended"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0) && fExtensions.has("GL_EXT_blend_func_extended"))))) {
if (!fFunctions.fBindFragDataLocationIndexed) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
fExtensions.has("GL_KHR_blend_equation_advanced") ||
fExtensions.has("GL_NV_blend_equation_advanced"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_KHR_blend_equation_advanced") ||
fExtensions.has("GL_NV_blend_equation_advanced")))) {
if (!fFunctions.fBlendBarrier) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,4)) ||
fExtensions.has("GL_ARB_clear_texture"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_EXT_clear_texture")))) {
// all functions were marked optional or test_only
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,1)) ||
fExtensions.has("GL_ARB_draw_instanced") ||
fExtensions.has("GL_EXT_draw_instanced"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_EXT_draw_instanced"))) ||
(GR_IS_GR_WEBGL(fStandard) && (
(glVer >= GR_GL_VER(2,0))))) {
if (!fFunctions.fDrawArraysInstanced ||
!fFunctions.fDrawElementsInstanced) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,2)) ||
fExtensions.has("GL_ARB_base_instance"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_EXT_base_instance") ||
fExtensions.has("GL_ANGLE_base_vertex_base_instance"))) ||
(GR_IS_GR_WEBGL(fStandard) && (
fExtensions.has("GL_WEBGL_draw_instanced_base_vertex_base_instance")))) {
if (!fFunctions.fDrawArraysInstancedBaseInstance ||
!fFunctions.fDrawElementsInstancedBaseVertexBaseInstance) {
RETURN_FALSE_INTERFACE;
}
}
if (GR_IS_GR_GL(fStandard) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)))) ||
(GR_IS_GR_WEBGL(fStandard) && (
(glVer >= GR_GL_VER(2,0))))) {
if (!fFunctions.fDrawBuffers ||
!fFunctions.fReadBuffer) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,0)) ||
fExtensions.has("GL_ARB_draw_indirect"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,1))))) {
if (!fFunctions.fDrawArraysIndirect ||
!fFunctions.fDrawElementsIndirect) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_ANGLE_base_vertex_base_instance"))) ||
(GR_IS_GR_WEBGL(fStandard) && (
fExtensions.has("GL_WEBGL_multi_draw_instanced_base_vertex_base_instance")))) {
if (!fFunctions.fMultiDrawArraysInstancedBaseInstance ||
!fFunctions.fMultiDrawElementsInstancedBaseVertexBaseInstance) {
RETURN_FALSE_INTERFACE;
}
}
if (GR_IS_GR_GL(fStandard) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)))) ||
(GR_IS_GR_WEBGL(fStandard) && (
(glVer >= GR_GL_VER(2,0))))) {
if (!fFunctions.fDrawRangeElements) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,2)) ||
fExtensions.has("GL_ARB_texture_multisample"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,1))))) {
if (!fFunctions.fGetMultisamplefv) {
RETURN_FALSE_INTERFACE;
}
}
if (GR_IS_GR_GL(fStandard) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,1))))) {
if (!fFunctions.fGetTexLevelParameteriv) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,3)) ||
fExtensions.has("GL_ARB_multi_draw_indirect"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_EXT_multi_draw_indirect")))) {
if (!fFunctions.fMultiDrawArraysIndirect ||
!fFunctions.fMultiDrawElementsIndirect) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,1)))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,2)) ||
fExtensions.has("GL_OES_texture_buffer") ||
fExtensions.has("GL_EXT_texture_buffer")))) {
if (!fFunctions.fTexBuffer) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,3)))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,2)) ||
fExtensions.has("GL_OES_texture_buffer") ||
fExtensions.has("GL_EXT_texture_buffer")))) {
if (!fFunctions.fTexBufferRange) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,2)) ||
fExtensions.has("GL_ARB_texture_storage") ||
fExtensions.has("GL_EXT_texture_storage"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_EXT_texture_storage"))) ||
(GR_IS_GR_WEBGL(fStandard) && (
(glVer >= GR_GL_VER(2,0))))) {
if (!fFunctions.fTexStorage2D) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,5)) ||
fExtensions.has("GL_ARB_texture_barrier") ||
fExtensions.has("GL_NV_texture_barrier"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_NV_texture_barrier")))) {
if (!fFunctions.fTextureBarrier) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_EXT_discard_framebuffer")))) {
if (!fFunctions.fDiscardFramebuffer) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_QCOM_tiled_rendering")))) {
// all functions were marked optional or test_only
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,2)) ||
fExtensions.has("GL_ARB_instanced_arrays"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_EXT_instanced_arrays"))) ||
(GR_IS_GR_WEBGL(fStandard) && (
(glVer >= GR_GL_VER(2,0))))) {
if (!fFunctions.fVertexAttribDivisor) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,0)))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)))) ||
(GR_IS_GR_WEBGL(fStandard) && (
(glVer >= GR_GL_VER(2,0))))) {
if (!fFunctions.fVertexAttribIPointer) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_ARB_framebuffer_object") ||
fExtensions.has("GL_EXT_framebuffer_object"))) ||
GR_IS_GR_GL_ES(fStandard) ||
GR_IS_GR_WEBGL(fStandard)) {
if (!fFunctions.fBindFramebuffer ||
!fFunctions.fBindRenderbuffer ||
!fFunctions.fCheckFramebufferStatus ||
!fFunctions.fDeleteFramebuffers ||
!fFunctions.fDeleteRenderbuffers ||
!fFunctions.fFramebufferRenderbuffer ||
!fFunctions.fFramebufferTexture2D ||
!fFunctions.fGenFramebuffers ||
!fFunctions.fGenRenderbuffers ||
!fFunctions.fGenerateMipmap ||
!fFunctions.fGetFramebufferAttachmentParameteriv ||
!fFunctions.fGetRenderbufferParameteriv ||
!fFunctions.fRenderbufferStorage) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_ARB_framebuffer_object") ||
fExtensions.has("GL_EXT_framebuffer_blit"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_CHROMIUM_framebuffer_multisample") ||
fExtensions.has("GL_ANGLE_framebuffer_blit"))) ||
(GR_IS_GR_WEBGL(fStandard) && (
(glVer >= GR_GL_VER(2,0))))) {
if (!fFunctions.fBlitFramebuffer) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_ARB_framebuffer_object") ||
fExtensions.has("GL_EXT_framebuffer_multisample"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_CHROMIUM_framebuffer_multisample") ||
fExtensions.has("GL_ANGLE_framebuffer_multisample"))) ||
(GR_IS_GR_WEBGL(fStandard) && (
(glVer >= GR_GL_VER(2,0))))) {
if (!fFunctions.fRenderbufferStorageMultisample) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_CHROMIUM_map_sub")))) {
if (!fFunctions.fMapBufferSubData ||
!fFunctions.fMapTexSubImage2D ||
!fFunctions.fUnmapBufferSubData ||
!fFunctions.fUnmapTexSubImage2D) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_EXT_multisampled_render_to_texture") ||
fExtensions.has("GL_IMG_multisampled_render_to_texture")))) {
if (!fFunctions.fFramebufferTexture2DMultisample) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_EXT_multisampled_render_to_texture")))) {
if (!fFunctions.fRenderbufferStorageMultisampleES2EXT) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_IMG_multisampled_render_to_texture")))) {
if (!fFunctions.fRenderbufferStorageMultisampleES2EXT) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_APPLE_framebuffer_multisample")))) {
if (!fFunctions.fResolveMultisampleFramebuffer ||
!fFunctions.fRenderbufferStorageMultisampleES2APPLE) {
RETURN_FALSE_INTERFACE;
}
}
if (GR_IS_GR_GL(fStandard) ||
(GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_OES_mapbuffer")))) {
if (!fFunctions.fMapBuffer) {
RETURN_FALSE_INTERFACE;
}
}
if (GR_IS_GR_GL(fStandard) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_OES_mapbuffer")))) {
if (!fFunctions.fUnmapBuffer) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_ARB_map_buffer_range"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_EXT_map_buffer_range")))) {
if (!fFunctions.fFlushMappedBufferRange ||
!fFunctions.fMapBufferRange) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
fExtensions.has("GL_EXT_debug_marker"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_EXT_debug_marker")))) {
if (!fFunctions.fInsertEventMarker ||
!fFunctions.fPopGroupMarker ||
!fFunctions.fPushGroupMarker) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,3)) ||
fExtensions.has("GL_ARB_program_interface_query"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,1))))) {
if (!fFunctions.fGetProgramResourceLocation) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
fExtensions.has("GL_NV_path_rendering"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_CHROMIUM_path_rendering") ||
fExtensions.has("GL_NV_path_rendering")))) {
if (!fFunctions.fMatrixLoadIdentity ||
!fFunctions.fMatrixLoadf) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
fExtensions.has("GL_NV_path_rendering"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_CHROMIUM_path_rendering") ||
fExtensions.has("GL_NV_path_rendering")))) {
if (!fFunctions.fCoverFillPath ||
!fFunctions.fCoverFillPathInstanced ||
!fFunctions.fCoverStrokePath ||
!fFunctions.fCoverStrokePathInstanced ||
!fFunctions.fDeletePaths ||
!fFunctions.fGenPaths ||
!fFunctions.fIsPath ||
!fFunctions.fPathCommands ||
!fFunctions.fPathParameterf ||
!fFunctions.fPathParameteri ||
!fFunctions.fPathStencilFunc ||
!fFunctions.fStencilFillPath ||
!fFunctions.fStencilFillPathInstanced ||
!fFunctions.fStencilStrokePath ||
!fFunctions.fStencilStrokePathInstanced) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_CHROMIUM_path_rendering")))) {
if (!fFunctions.fBindFragmentInputLocation) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
fExtensions.has("GL_NV_framebuffer_mixed_samples"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_CHROMIUM_framebuffer_mixed_samples") ||
fExtensions.has("GL_NV_framebuffer_mixed_samples")))) {
if (!fFunctions.fCoverageModulation) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,3)) ||
fExtensions.has("GL_KHR_debug"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_KHR_debug")))) {
if (!fFunctions.fDebugMessageCallback ||
!fFunctions.fDebugMessageControl ||
!fFunctions.fDebugMessageInsert ||
!fFunctions.fGetDebugMessageLog ||
!fFunctions.fObjectLabel ||
!fFunctions.fPopDebugGroup ||
!fFunctions.fPushDebugGroup) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_CHROMIUM_bind_uniform_location")))) {
if (!fFunctions.fBindUniformLocation) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
fExtensions.has("GL_EXT_window_rectangles"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_EXT_window_rectangles")))) {
if (!fFunctions.fWindowRectangles) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,2)) ||
fExtensions.has("GL_ARB_sync"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_APPLE_sync"))) ||
(GR_IS_GR_WEBGL(fStandard) && (
(glVer >= GR_GL_VER(2,0))))) {
if (!fFunctions.fClientWaitSync ||
!fFunctions.fDeleteSync ||
!fFunctions.fFenceSync ||
!fFunctions.fIsSync ||
!fFunctions.fWaitSync) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,2)) ||
fExtensions.has("GL_ARB_internalformat_query"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0))))) {
if (!fFunctions.fGetInternalformativ) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,1)))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_OES_get_program_binary")))) {
if (!fFunctions.fGetProgramBinary ||
!fFunctions.fProgramBinary) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,1)))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0))))) {
if (!fFunctions.fProgramParameteri) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,2)) ||
fExtensions.has("GL_ARB_sampler_objects"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)))) ||
(GR_IS_GR_WEBGL(fStandard) && (
(glVer >= GR_GL_VER(2,0))))) {
if (!fFunctions.fBindSampler ||
!fFunctions.fDeleteSamplers ||
!fFunctions.fGenSamplers ||
!fFunctions.fSamplerParameteri ||
!fFunctions.fSamplerParameteriv) {
RETURN_FALSE_INTERFACE;
}
}
if (GR_IS_GR_GL(fStandard)) {
if (!fFunctions.fGetQueryObjectiv) {
RETURN_FALSE_INTERFACE;
}
}
if (GR_IS_GR_GL(fStandard) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)) ||
fExtensions.has("GL_EXT_occlusion_query_boolean")))) {
#if GR_TEST_UTILS
if (!fFunctions.fBeginQuery ||
!fFunctions.fDeleteQueries ||
!fFunctions.fEndQuery ||
!fFunctions.fGenQueries ||
!fFunctions.fGetQueryObjectuiv ||
!fFunctions.fGetQueryiv) {
RETURN_FALSE_INTERFACE;
}
#endif
// all functions were marked optional or test_only
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,3)) ||
fExtensions.has("GL_ARB_timer_query") ||
fExtensions.has("GL_EXT_timer_query")))) {
if (!fFunctions.fGetQueryObjecti64v ||
!fFunctions.fGetQueryObjectui64v) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(3,3)) ||
fExtensions.has("GL_ARB_timer_query")))) {
if (!fFunctions.fQueryCounter) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,3)) ||
fExtensions.has("GL_ARB_invalidate_subdata")))) {
if (!fFunctions.fInvalidateBufferData ||
!fFunctions.fInvalidateBufferSubData ||
!fFunctions.fInvalidateTexImage ||
!fFunctions.fInvalidateTexSubImage) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,3)) ||
fExtensions.has("GL_ARB_invalidate_subdata"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
(glVer >= GR_GL_VER(3,0)))) ||
(GR_IS_GR_WEBGL(fStandard) && (
(glVer >= GR_GL_VER(2,0))))) {
if (!fFunctions.fInvalidateFramebuffer ||
!fFunctions.fInvalidateSubFramebuffer) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
(glVer >= GR_GL_VER(4,3)) ||
fExtensions.has("GL_ARB_ES2_compatibility"))) ||
GR_IS_GR_GL_ES(fStandard) ||
GR_IS_GR_WEBGL(fStandard)) {
if (!fFunctions.fGetShaderPrecisionFormat) {
RETURN_FALSE_INTERFACE;
}
}
if ((GR_IS_GR_GL(fStandard) && (
fExtensions.has("GL_NV_fence"))) ||
(GR_IS_GR_GL_ES(fStandard) && (
fExtensions.has("GL_NV_fence")))) {
if (!fFunctions.fDeleteFences ||
!fFunctions.fFinishFence ||
!fFunctions.fGenFences ||
!fFunctions.fSetFence ||
!fFunctions.fTestFence) {
RETURN_FALSE_INTERFACE;
}
}
// End autogenerated content
return true;
}
#if GR_TEST_UTILS
void GrGLInterface::abandon() const {
const_cast<GrGLInterface*>(this)->fFunctions = GrGLInterface::Functions();
}
#endif // GR_TEST_UTILS