1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2011 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci * 7cb93a386Sopenharmony_ci * THIS FILE IS AUTOGENERATED 8cb93a386Sopenharmony_ci * Make edits to tools/gpu/gl/interface/templates.go or they will 9cb93a386Sopenharmony_ci * be overwritten. 10cb93a386Sopenharmony_ci */ 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_ci#include "include/gpu/gl/GrGLExtensions.h" 13cb93a386Sopenharmony_ci#include "include/gpu/gl/GrGLInterface.h" 14cb93a386Sopenharmony_ci#include "src/gpu/gl/GrGLUtil.h" 15cb93a386Sopenharmony_ci 16cb93a386Sopenharmony_ci#include <stdio.h> 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ciGrGLInterface::GrGLInterface() { 19cb93a386Sopenharmony_ci fStandard = kNone_GrGLStandard; 20cb93a386Sopenharmony_ci} 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ci#if GR_GL_CHECK_ERROR 23cb93a386Sopenharmony_cistatic const char* get_error_string(GrGLenum err) { 24cb93a386Sopenharmony_ci switch (err) { 25cb93a386Sopenharmony_ci case GR_GL_NO_ERROR: 26cb93a386Sopenharmony_ci return ""; 27cb93a386Sopenharmony_ci case GR_GL_INVALID_ENUM: 28cb93a386Sopenharmony_ci return "Invalid Enum"; 29cb93a386Sopenharmony_ci case GR_GL_INVALID_VALUE: 30cb93a386Sopenharmony_ci return "Invalid Value"; 31cb93a386Sopenharmony_ci case GR_GL_INVALID_OPERATION: 32cb93a386Sopenharmony_ci return "Invalid Operation"; 33cb93a386Sopenharmony_ci case GR_GL_OUT_OF_MEMORY: 34cb93a386Sopenharmony_ci return "Out of Memory"; 35cb93a386Sopenharmony_ci case GR_GL_CONTEXT_LOST: 36cb93a386Sopenharmony_ci return "Context Lost"; 37cb93a386Sopenharmony_ci } 38cb93a386Sopenharmony_ci return "Unknown"; 39cb93a386Sopenharmony_ci} 40cb93a386Sopenharmony_ci 41cb93a386Sopenharmony_ciGrGLenum GrGLInterface::checkError(const char* location, const char* call) const { 42cb93a386Sopenharmony_ci GrGLenum error = fFunctions.fGetError(); 43cb93a386Sopenharmony_ci if (error != GR_GL_NO_ERROR && !fSuppressErrorLogging) { 44cb93a386Sopenharmony_ci SkDebugf("---- glGetError 0x%x(%s)", error, get_error_string(error)); 45cb93a386Sopenharmony_ci if (location) { 46cb93a386Sopenharmony_ci SkDebugf(" at\n\t%s", location); 47cb93a386Sopenharmony_ci } 48cb93a386Sopenharmony_ci if (call) { 49cb93a386Sopenharmony_ci SkDebugf("\n\t\t%s", call); 50cb93a386Sopenharmony_ci } 51cb93a386Sopenharmony_ci SkDebugf("\n"); 52cb93a386Sopenharmony_ci if (error == GR_GL_OUT_OF_MEMORY) { 53cb93a386Sopenharmony_ci fOOMed = true; 54cb93a386Sopenharmony_ci } 55cb93a386Sopenharmony_ci } 56cb93a386Sopenharmony_ci return error; 57cb93a386Sopenharmony_ci} 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_cibool GrGLInterface::checkAndResetOOMed() const { 60cb93a386Sopenharmony_ci if (fOOMed) { 61cb93a386Sopenharmony_ci fOOMed = false; 62cb93a386Sopenharmony_ci return true; 63cb93a386Sopenharmony_ci } 64cb93a386Sopenharmony_ci return false; 65cb93a386Sopenharmony_ci} 66cb93a386Sopenharmony_ci 67cb93a386Sopenharmony_civoid GrGLInterface::suppressErrorLogging() { fSuppressErrorLogging = true; } 68cb93a386Sopenharmony_ci#endif 69cb93a386Sopenharmony_ci 70cb93a386Sopenharmony_ci#define RETURN_FALSE_INTERFACE \ 71cb93a386Sopenharmony_ci SkDEBUGF("%s:%d GrGLInterface::validate() failed.\n", __FILE__, __LINE__); \ 72cb93a386Sopenharmony_ci return false 73cb93a386Sopenharmony_ci 74cb93a386Sopenharmony_cibool GrGLInterface::validate() const { 75cb93a386Sopenharmony_ci 76cb93a386Sopenharmony_ci if (kNone_GrGLStandard == fStandard) { 77cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 78cb93a386Sopenharmony_ci } 79cb93a386Sopenharmony_ci 80cb93a386Sopenharmony_ci if (!fExtensions.isInitialized()) { 81cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 82cb93a386Sopenharmony_ci } 83cb93a386Sopenharmony_ci 84cb93a386Sopenharmony_ci GrGLVersion glVer = GrGLGetVersion(this); 85cb93a386Sopenharmony_ci if (GR_GL_INVALID_VER == glVer) { 86cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 87cb93a386Sopenharmony_ci } 88cb93a386Sopenharmony_ci // Autogenerated content follows 89cb93a386Sopenharmony_ci if (!fFunctions.fActiveTexture || 90cb93a386Sopenharmony_ci !fFunctions.fAttachShader || 91cb93a386Sopenharmony_ci !fFunctions.fBindAttribLocation || 92cb93a386Sopenharmony_ci !fFunctions.fBindBuffer || 93cb93a386Sopenharmony_ci !fFunctions.fBindTexture || 94cb93a386Sopenharmony_ci !fFunctions.fBlendColor || 95cb93a386Sopenharmony_ci !fFunctions.fBlendEquation || 96cb93a386Sopenharmony_ci !fFunctions.fBlendFunc || 97cb93a386Sopenharmony_ci !fFunctions.fBufferData || 98cb93a386Sopenharmony_ci !fFunctions.fBufferSubData || 99cb93a386Sopenharmony_ci !fFunctions.fClear || 100cb93a386Sopenharmony_ci !fFunctions.fClearColor || 101cb93a386Sopenharmony_ci !fFunctions.fClearStencil || 102cb93a386Sopenharmony_ci !fFunctions.fColorMask || 103cb93a386Sopenharmony_ci !fFunctions.fCompileShader || 104cb93a386Sopenharmony_ci !fFunctions.fCompressedTexImage2D || 105cb93a386Sopenharmony_ci !fFunctions.fCompressedTexSubImage2D || 106cb93a386Sopenharmony_ci !fFunctions.fCopyTexSubImage2D || 107cb93a386Sopenharmony_ci !fFunctions.fCreateProgram || 108cb93a386Sopenharmony_ci !fFunctions.fCreateShader || 109cb93a386Sopenharmony_ci !fFunctions.fCullFace || 110cb93a386Sopenharmony_ci !fFunctions.fDeleteBuffers || 111cb93a386Sopenharmony_ci !fFunctions.fDeleteProgram || 112cb93a386Sopenharmony_ci !fFunctions.fDeleteShader || 113cb93a386Sopenharmony_ci !fFunctions.fDeleteTextures || 114cb93a386Sopenharmony_ci !fFunctions.fDepthMask || 115cb93a386Sopenharmony_ci !fFunctions.fDisable || 116cb93a386Sopenharmony_ci !fFunctions.fDisableVertexAttribArray || 117cb93a386Sopenharmony_ci !fFunctions.fDrawArrays || 118cb93a386Sopenharmony_ci !fFunctions.fDrawElements || 119cb93a386Sopenharmony_ci !fFunctions.fEnable || 120cb93a386Sopenharmony_ci !fFunctions.fEnableVertexAttribArray || 121cb93a386Sopenharmony_ci !fFunctions.fFinish || 122cb93a386Sopenharmony_ci !fFunctions.fFlush || 123cb93a386Sopenharmony_ci !fFunctions.fFrontFace || 124cb93a386Sopenharmony_ci !fFunctions.fGenBuffers || 125cb93a386Sopenharmony_ci !fFunctions.fGenTextures || 126cb93a386Sopenharmony_ci !fFunctions.fGetBufferParameteriv || 127cb93a386Sopenharmony_ci !fFunctions.fGetError || 128cb93a386Sopenharmony_ci !fFunctions.fGetIntegerv || 129cb93a386Sopenharmony_ci !fFunctions.fGetProgramInfoLog || 130cb93a386Sopenharmony_ci !fFunctions.fGetProgramiv || 131cb93a386Sopenharmony_ci !fFunctions.fGetShaderInfoLog || 132cb93a386Sopenharmony_ci !fFunctions.fGetShaderiv || 133cb93a386Sopenharmony_ci !fFunctions.fGetString || 134cb93a386Sopenharmony_ci !fFunctions.fGetUniformLocation || 135cb93a386Sopenharmony_ci !fFunctions.fIsTexture || 136cb93a386Sopenharmony_ci !fFunctions.fLineWidth || 137cb93a386Sopenharmony_ci !fFunctions.fLinkProgram || 138cb93a386Sopenharmony_ci !fFunctions.fPixelStorei || 139cb93a386Sopenharmony_ci !fFunctions.fReadPixels || 140cb93a386Sopenharmony_ci !fFunctions.fScissor || 141cb93a386Sopenharmony_ci !fFunctions.fShaderSource || 142cb93a386Sopenharmony_ci !fFunctions.fStencilFunc || 143cb93a386Sopenharmony_ci !fFunctions.fStencilFuncSeparate || 144cb93a386Sopenharmony_ci !fFunctions.fStencilMask || 145cb93a386Sopenharmony_ci !fFunctions.fStencilMaskSeparate || 146cb93a386Sopenharmony_ci !fFunctions.fStencilOp || 147cb93a386Sopenharmony_ci !fFunctions.fStencilOpSeparate || 148cb93a386Sopenharmony_ci !fFunctions.fTexImage2D || 149cb93a386Sopenharmony_ci !fFunctions.fTexParameterf || 150cb93a386Sopenharmony_ci !fFunctions.fTexParameterfv || 151cb93a386Sopenharmony_ci !fFunctions.fTexParameteri || 152cb93a386Sopenharmony_ci !fFunctions.fTexParameteriv || 153cb93a386Sopenharmony_ci !fFunctions.fTexSubImage2D || 154cb93a386Sopenharmony_ci !fFunctions.fUniform1f || 155cb93a386Sopenharmony_ci !fFunctions.fUniform1fv || 156cb93a386Sopenharmony_ci !fFunctions.fUniform1i || 157cb93a386Sopenharmony_ci !fFunctions.fUniform1iv || 158cb93a386Sopenharmony_ci !fFunctions.fUniform2f || 159cb93a386Sopenharmony_ci !fFunctions.fUniform2fv || 160cb93a386Sopenharmony_ci !fFunctions.fUniform2i || 161cb93a386Sopenharmony_ci !fFunctions.fUniform2iv || 162cb93a386Sopenharmony_ci !fFunctions.fUniform3f || 163cb93a386Sopenharmony_ci !fFunctions.fUniform3fv || 164cb93a386Sopenharmony_ci !fFunctions.fUniform3i || 165cb93a386Sopenharmony_ci !fFunctions.fUniform3iv || 166cb93a386Sopenharmony_ci !fFunctions.fUniform4f || 167cb93a386Sopenharmony_ci !fFunctions.fUniform4fv || 168cb93a386Sopenharmony_ci !fFunctions.fUniform4i || 169cb93a386Sopenharmony_ci !fFunctions.fUniform4iv || 170cb93a386Sopenharmony_ci !fFunctions.fUniformMatrix2fv || 171cb93a386Sopenharmony_ci !fFunctions.fUniformMatrix3fv || 172cb93a386Sopenharmony_ci !fFunctions.fUniformMatrix4fv || 173cb93a386Sopenharmony_ci !fFunctions.fUseProgram || 174cb93a386Sopenharmony_ci !fFunctions.fVertexAttrib1f || 175cb93a386Sopenharmony_ci !fFunctions.fVertexAttrib2fv || 176cb93a386Sopenharmony_ci !fFunctions.fVertexAttrib3fv || 177cb93a386Sopenharmony_ci !fFunctions.fVertexAttrib4fv || 178cb93a386Sopenharmony_ci !fFunctions.fVertexAttribPointer || 179cb93a386Sopenharmony_ci !fFunctions.fViewport) { 180cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 181cb93a386Sopenharmony_ci } 182cb93a386Sopenharmony_ci 183cb93a386Sopenharmony_ci if (GR_IS_GR_GL(fStandard)) { 184cb93a386Sopenharmony_ci if (!fFunctions.fDrawBuffer || 185cb93a386Sopenharmony_ci !fFunctions.fPolygonMode) { 186cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 187cb93a386Sopenharmony_ci } 188cb93a386Sopenharmony_ci } 189cb93a386Sopenharmony_ci 190cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 191cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)))) || 192cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 193cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)))) || 194cb93a386Sopenharmony_ci (GR_IS_GR_WEBGL(fStandard) && ( 195cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(2,0))))) { 196cb93a386Sopenharmony_ci if (!fFunctions.fGetStringi) { 197cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 198cb93a386Sopenharmony_ci } 199cb93a386Sopenharmony_ci } 200cb93a386Sopenharmony_ci 201cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 202cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,2)))) || 203cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 204cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,1))))) { 205cb93a386Sopenharmony_ci // all functions were marked optional or test_only 206cb93a386Sopenharmony_ci } 207cb93a386Sopenharmony_ci 208cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 209cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 210cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_vertex_array_object") || 211cb93a386Sopenharmony_ci fExtensions.has("GL_APPLE_vertex_array_object"))) || 212cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 213cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 214cb93a386Sopenharmony_ci fExtensions.has("GL_OES_vertex_array_object"))) || 215cb93a386Sopenharmony_ci (GR_IS_GR_WEBGL(fStandard) && ( 216cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(2,0)) || 217cb93a386Sopenharmony_ci fExtensions.has("GL_OES_vertex_array_object") || 218cb93a386Sopenharmony_ci fExtensions.has("OES_vertex_array_object")))) { 219cb93a386Sopenharmony_ci if (!fFunctions.fBindVertexArray || 220cb93a386Sopenharmony_ci !fFunctions.fDeleteVertexArrays || 221cb93a386Sopenharmony_ci !fFunctions.fGenVertexArrays) { 222cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 223cb93a386Sopenharmony_ci } 224cb93a386Sopenharmony_ci } 225cb93a386Sopenharmony_ci 226cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 227cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,0)) || 228cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_tessellation_shader"))) || 229cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 230cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,2)) || 231cb93a386Sopenharmony_ci fExtensions.has("GL_OES_tessellation_shader")))) { 232cb93a386Sopenharmony_ci if (!fFunctions.fPatchParameteri) { 233cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 234cb93a386Sopenharmony_ci } 235cb93a386Sopenharmony_ci } 236cb93a386Sopenharmony_ci 237cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 238cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)))) || 239cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 240cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0) && fExtensions.has("GL_EXT_blend_func_extended"))))) { 241cb93a386Sopenharmony_ci if (!fFunctions.fBindFragDataLocation) { 242cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 243cb93a386Sopenharmony_ci } 244cb93a386Sopenharmony_ci } 245cb93a386Sopenharmony_ci 246cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 247cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,3)) || 248cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_blend_func_extended"))) || 249cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 250cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0) && fExtensions.has("GL_EXT_blend_func_extended"))))) { 251cb93a386Sopenharmony_ci if (!fFunctions.fBindFragDataLocationIndexed) { 252cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 253cb93a386Sopenharmony_ci } 254cb93a386Sopenharmony_ci } 255cb93a386Sopenharmony_ci 256cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 257cb93a386Sopenharmony_ci fExtensions.has("GL_KHR_blend_equation_advanced") || 258cb93a386Sopenharmony_ci fExtensions.has("GL_NV_blend_equation_advanced"))) || 259cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 260cb93a386Sopenharmony_ci fExtensions.has("GL_KHR_blend_equation_advanced") || 261cb93a386Sopenharmony_ci fExtensions.has("GL_NV_blend_equation_advanced")))) { 262cb93a386Sopenharmony_ci if (!fFunctions.fBlendBarrier) { 263cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 264cb93a386Sopenharmony_ci } 265cb93a386Sopenharmony_ci } 266cb93a386Sopenharmony_ci 267cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 268cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,4)) || 269cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_clear_texture"))) || 270cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 271cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_clear_texture")))) { 272cb93a386Sopenharmony_ci // all functions were marked optional or test_only 273cb93a386Sopenharmony_ci } 274cb93a386Sopenharmony_ci 275cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 276cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,1)) || 277cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_draw_instanced") || 278cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_draw_instanced"))) || 279cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 280cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 281cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_draw_instanced") || 282cb93a386Sopenharmony_ci fExtensions.has("GL_ANGLE_instanced_arrays"))) || 283cb93a386Sopenharmony_ci (GR_IS_GR_WEBGL(fStandard) && ( 284cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(2,0))))) { 285cb93a386Sopenharmony_ci if (!fFunctions.fDrawArraysInstanced || 286cb93a386Sopenharmony_ci !fFunctions.fDrawElementsInstanced) { 287cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 288cb93a386Sopenharmony_ci } 289cb93a386Sopenharmony_ci } 290cb93a386Sopenharmony_ci 291cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 292cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,2)) || 293cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_base_instance"))) || 294cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 295cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_base_instance") || 296cb93a386Sopenharmony_ci fExtensions.has("GL_ANGLE_base_vertex_base_instance"))) || 297cb93a386Sopenharmony_ci (GR_IS_GR_WEBGL(fStandard) && ( 298cb93a386Sopenharmony_ci fExtensions.has("GL_WEBGL_draw_instanced_base_vertex_base_instance")))) { 299cb93a386Sopenharmony_ci if (!fFunctions.fDrawArraysInstancedBaseInstance || 300cb93a386Sopenharmony_ci !fFunctions.fDrawElementsInstancedBaseVertexBaseInstance) { 301cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 302cb93a386Sopenharmony_ci } 303cb93a386Sopenharmony_ci } 304cb93a386Sopenharmony_ci 305cb93a386Sopenharmony_ci if (GR_IS_GR_GL(fStandard) || 306cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 307cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)))) || 308cb93a386Sopenharmony_ci (GR_IS_GR_WEBGL(fStandard) && ( 309cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(2,0))))) { 310cb93a386Sopenharmony_ci if (!fFunctions.fDrawBuffers || 311cb93a386Sopenharmony_ci !fFunctions.fReadBuffer) { 312cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 313cb93a386Sopenharmony_ci } 314cb93a386Sopenharmony_ci } 315cb93a386Sopenharmony_ci 316cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 317cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,0)) || 318cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_draw_indirect"))) || 319cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 320cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,1))))) { 321cb93a386Sopenharmony_ci if (!fFunctions.fDrawArraysIndirect || 322cb93a386Sopenharmony_ci !fFunctions.fDrawElementsIndirect) { 323cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 324cb93a386Sopenharmony_ci } 325cb93a386Sopenharmony_ci } 326cb93a386Sopenharmony_ci 327cb93a386Sopenharmony_ci if ((GR_IS_GR_GL_ES(fStandard) && ( 328cb93a386Sopenharmony_ci fExtensions.has("GL_ANGLE_base_vertex_base_instance"))) || 329cb93a386Sopenharmony_ci (GR_IS_GR_WEBGL(fStandard) && ( 330cb93a386Sopenharmony_ci fExtensions.has("GL_WEBGL_multi_draw_instanced_base_vertex_base_instance")))) { 331cb93a386Sopenharmony_ci if (!fFunctions.fMultiDrawArraysInstancedBaseInstance || 332cb93a386Sopenharmony_ci !fFunctions.fMultiDrawElementsInstancedBaseVertexBaseInstance) { 333cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 334cb93a386Sopenharmony_ci } 335cb93a386Sopenharmony_ci } 336cb93a386Sopenharmony_ci 337cb93a386Sopenharmony_ci if (GR_IS_GR_GL(fStandard) || 338cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 339cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)))) || 340cb93a386Sopenharmony_ci (GR_IS_GR_WEBGL(fStandard) && ( 341cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(2,0))))) { 342cb93a386Sopenharmony_ci if (!fFunctions.fDrawRangeElements) { 343cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 344cb93a386Sopenharmony_ci } 345cb93a386Sopenharmony_ci } 346cb93a386Sopenharmony_ci 347cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 348cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,2)) || 349cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_texture_multisample"))) || 350cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 351cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,1))))) { 352cb93a386Sopenharmony_ci if (!fFunctions.fGetMultisamplefv) { 353cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 354cb93a386Sopenharmony_ci } 355cb93a386Sopenharmony_ci } 356cb93a386Sopenharmony_ci 357cb93a386Sopenharmony_ci if (GR_IS_GR_GL(fStandard) || 358cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 359cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,1))))) { 360cb93a386Sopenharmony_ci if (!fFunctions.fGetTexLevelParameteriv) { 361cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 362cb93a386Sopenharmony_ci } 363cb93a386Sopenharmony_ci } 364cb93a386Sopenharmony_ci 365cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 366cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,3)) || 367cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_multi_draw_indirect"))) || 368cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 369cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_multi_draw_indirect")))) { 370cb93a386Sopenharmony_ci if (!fFunctions.fMultiDrawArraysIndirect || 371cb93a386Sopenharmony_ci !fFunctions.fMultiDrawElementsIndirect) { 372cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 373cb93a386Sopenharmony_ci } 374cb93a386Sopenharmony_ci } 375cb93a386Sopenharmony_ci 376cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 377cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,1)))) || 378cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 379cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,2)) || 380cb93a386Sopenharmony_ci fExtensions.has("GL_OES_texture_buffer") || 381cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_texture_buffer")))) { 382cb93a386Sopenharmony_ci if (!fFunctions.fTexBuffer) { 383cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 384cb93a386Sopenharmony_ci } 385cb93a386Sopenharmony_ci } 386cb93a386Sopenharmony_ci 387cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 388cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,3)))) || 389cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 390cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,2)) || 391cb93a386Sopenharmony_ci fExtensions.has("GL_OES_texture_buffer") || 392cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_texture_buffer")))) { 393cb93a386Sopenharmony_ci if (!fFunctions.fTexBufferRange) { 394cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 395cb93a386Sopenharmony_ci } 396cb93a386Sopenharmony_ci } 397cb93a386Sopenharmony_ci 398cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 399cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,2)) || 400cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_texture_storage") || 401cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_texture_storage"))) || 402cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 403cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 404cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_texture_storage"))) || 405cb93a386Sopenharmony_ci (GR_IS_GR_WEBGL(fStandard) && ( 406cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(2,0))))) { 407cb93a386Sopenharmony_ci if (!fFunctions.fTexStorage2D) { 408cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 409cb93a386Sopenharmony_ci } 410cb93a386Sopenharmony_ci } 411cb93a386Sopenharmony_ci 412cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 413cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,5)) || 414cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_texture_barrier") || 415cb93a386Sopenharmony_ci fExtensions.has("GL_NV_texture_barrier"))) || 416cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 417cb93a386Sopenharmony_ci fExtensions.has("GL_NV_texture_barrier")))) { 418cb93a386Sopenharmony_ci if (!fFunctions.fTextureBarrier) { 419cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 420cb93a386Sopenharmony_ci } 421cb93a386Sopenharmony_ci } 422cb93a386Sopenharmony_ci 423cb93a386Sopenharmony_ci if ((GR_IS_GR_GL_ES(fStandard) && ( 424cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_discard_framebuffer")))) { 425cb93a386Sopenharmony_ci if (!fFunctions.fDiscardFramebuffer) { 426cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 427cb93a386Sopenharmony_ci } 428cb93a386Sopenharmony_ci } 429cb93a386Sopenharmony_ci 430cb93a386Sopenharmony_ci if ((GR_IS_GR_GL_ES(fStandard) && ( 431cb93a386Sopenharmony_ci fExtensions.has("GL_QCOM_tiled_rendering")))) { 432cb93a386Sopenharmony_ci // all functions were marked optional or test_only 433cb93a386Sopenharmony_ci } 434cb93a386Sopenharmony_ci 435cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 436cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,2)) || 437cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_instanced_arrays"))) || 438cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 439cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 440cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_instanced_arrays") || 441cb93a386Sopenharmony_ci fExtensions.has("GL_ANGLE_instanced_arrays"))) || 442cb93a386Sopenharmony_ci (GR_IS_GR_WEBGL(fStandard) && ( 443cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(2,0))))) { 444cb93a386Sopenharmony_ci if (!fFunctions.fVertexAttribDivisor) { 445cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 446cb93a386Sopenharmony_ci } 447cb93a386Sopenharmony_ci } 448cb93a386Sopenharmony_ci 449cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 450cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)))) || 451cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 452cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)))) || 453cb93a386Sopenharmony_ci (GR_IS_GR_WEBGL(fStandard) && ( 454cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(2,0))))) { 455cb93a386Sopenharmony_ci if (!fFunctions.fVertexAttribIPointer) { 456cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 457cb93a386Sopenharmony_ci } 458cb93a386Sopenharmony_ci } 459cb93a386Sopenharmony_ci 460cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 461cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 462cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_framebuffer_object") || 463cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_framebuffer_object"))) || 464cb93a386Sopenharmony_ci GR_IS_GR_GL_ES(fStandard) || 465cb93a386Sopenharmony_ci GR_IS_GR_WEBGL(fStandard)) { 466cb93a386Sopenharmony_ci if (!fFunctions.fBindFramebuffer || 467cb93a386Sopenharmony_ci !fFunctions.fBindRenderbuffer || 468cb93a386Sopenharmony_ci !fFunctions.fCheckFramebufferStatus || 469cb93a386Sopenharmony_ci !fFunctions.fDeleteFramebuffers || 470cb93a386Sopenharmony_ci !fFunctions.fDeleteRenderbuffers || 471cb93a386Sopenharmony_ci !fFunctions.fFramebufferRenderbuffer || 472cb93a386Sopenharmony_ci !fFunctions.fFramebufferTexture2D || 473cb93a386Sopenharmony_ci !fFunctions.fGenFramebuffers || 474cb93a386Sopenharmony_ci !fFunctions.fGenRenderbuffers || 475cb93a386Sopenharmony_ci !fFunctions.fGenerateMipmap || 476cb93a386Sopenharmony_ci !fFunctions.fGetFramebufferAttachmentParameteriv || 477cb93a386Sopenharmony_ci !fFunctions.fGetRenderbufferParameteriv || 478cb93a386Sopenharmony_ci !fFunctions.fRenderbufferStorage) { 479cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 480cb93a386Sopenharmony_ci } 481cb93a386Sopenharmony_ci } 482cb93a386Sopenharmony_ci 483cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 484cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 485cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_framebuffer_object") || 486cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_framebuffer_blit"))) || 487cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 488cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 489cb93a386Sopenharmony_ci fExtensions.has("GL_NV_framebuffer_blit") || 490cb93a386Sopenharmony_ci fExtensions.has("GL_CHROMIUM_framebuffer_multisample") || 491cb93a386Sopenharmony_ci fExtensions.has("GL_ANGLE_framebuffer_blit"))) || 492cb93a386Sopenharmony_ci (GR_IS_GR_WEBGL(fStandard) && ( 493cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(2,0))))) { 494cb93a386Sopenharmony_ci if (!fFunctions.fBlitFramebuffer) { 495cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 496cb93a386Sopenharmony_ci } 497cb93a386Sopenharmony_ci } 498cb93a386Sopenharmony_ci 499cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 500cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 501cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_framebuffer_object") || 502cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_framebuffer_multisample"))) || 503cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 504cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 505cb93a386Sopenharmony_ci fExtensions.has("GL_CHROMIUM_framebuffer_multisample") || 506cb93a386Sopenharmony_ci fExtensions.has("GL_ANGLE_framebuffer_multisample"))) || 507cb93a386Sopenharmony_ci (GR_IS_GR_WEBGL(fStandard) && ( 508cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(2,0))))) { 509cb93a386Sopenharmony_ci if (!fFunctions.fRenderbufferStorageMultisample) { 510cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 511cb93a386Sopenharmony_ci } 512cb93a386Sopenharmony_ci } 513cb93a386Sopenharmony_ci 514cb93a386Sopenharmony_ci if ((GR_IS_GR_GL_ES(fStandard) && ( 515cb93a386Sopenharmony_ci fExtensions.has("GL_CHROMIUM_map_sub")))) { 516cb93a386Sopenharmony_ci if (!fFunctions.fMapBufferSubData || 517cb93a386Sopenharmony_ci !fFunctions.fMapTexSubImage2D || 518cb93a386Sopenharmony_ci !fFunctions.fUnmapBufferSubData || 519cb93a386Sopenharmony_ci !fFunctions.fUnmapTexSubImage2D) { 520cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 521cb93a386Sopenharmony_ci } 522cb93a386Sopenharmony_ci } 523cb93a386Sopenharmony_ci 524cb93a386Sopenharmony_ci if ((GR_IS_GR_GL_ES(fStandard) && ( 525cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_multisampled_render_to_texture") || 526cb93a386Sopenharmony_ci fExtensions.has("GL_IMG_multisampled_render_to_texture")))) { 527cb93a386Sopenharmony_ci if (!fFunctions.fFramebufferTexture2DMultisample) { 528cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 529cb93a386Sopenharmony_ci } 530cb93a386Sopenharmony_ci } 531cb93a386Sopenharmony_ci 532cb93a386Sopenharmony_ci if ((GR_IS_GR_GL_ES(fStandard) && ( 533cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_multisampled_render_to_texture")))) { 534cb93a386Sopenharmony_ci if (!fFunctions.fRenderbufferStorageMultisampleES2EXT) { 535cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 536cb93a386Sopenharmony_ci } 537cb93a386Sopenharmony_ci } 538cb93a386Sopenharmony_ci 539cb93a386Sopenharmony_ci if ((GR_IS_GR_GL_ES(fStandard) && ( 540cb93a386Sopenharmony_ci fExtensions.has("GL_IMG_multisampled_render_to_texture")))) { 541cb93a386Sopenharmony_ci if (!fFunctions.fRenderbufferStorageMultisampleES2EXT) { 542cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 543cb93a386Sopenharmony_ci } 544cb93a386Sopenharmony_ci } 545cb93a386Sopenharmony_ci 546cb93a386Sopenharmony_ci if ((GR_IS_GR_GL_ES(fStandard) && ( 547cb93a386Sopenharmony_ci fExtensions.has("GL_APPLE_framebuffer_multisample")))) { 548cb93a386Sopenharmony_ci if (!fFunctions.fResolveMultisampleFramebuffer || 549cb93a386Sopenharmony_ci !fFunctions.fRenderbufferStorageMultisampleES2APPLE) { 550cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 551cb93a386Sopenharmony_ci } 552cb93a386Sopenharmony_ci } 553cb93a386Sopenharmony_ci 554cb93a386Sopenharmony_ci if (GR_IS_GR_GL(fStandard) || 555cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 556cb93a386Sopenharmony_ci fExtensions.has("GL_OES_mapbuffer")))) { 557cb93a386Sopenharmony_ci if (!fFunctions.fMapBuffer) { 558cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 559cb93a386Sopenharmony_ci } 560cb93a386Sopenharmony_ci } 561cb93a386Sopenharmony_ci 562cb93a386Sopenharmony_ci if (GR_IS_GR_GL(fStandard) || 563cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 564cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 565cb93a386Sopenharmony_ci fExtensions.has("GL_OES_mapbuffer")))) { 566cb93a386Sopenharmony_ci if (!fFunctions.fUnmapBuffer) { 567cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 568cb93a386Sopenharmony_ci } 569cb93a386Sopenharmony_ci } 570cb93a386Sopenharmony_ci 571cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 572cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 573cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_map_buffer_range"))) || 574cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 575cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 576cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_map_buffer_range")))) { 577cb93a386Sopenharmony_ci if (!fFunctions.fFlushMappedBufferRange || 578cb93a386Sopenharmony_ci !fFunctions.fMapBufferRange) { 579cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 580cb93a386Sopenharmony_ci } 581cb93a386Sopenharmony_ci } 582cb93a386Sopenharmony_ci 583cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 584cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_debug_marker"))) || 585cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 586cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_debug_marker")))) { 587cb93a386Sopenharmony_ci if (!fFunctions.fInsertEventMarker || 588cb93a386Sopenharmony_ci !fFunctions.fPopGroupMarker || 589cb93a386Sopenharmony_ci !fFunctions.fPushGroupMarker) { 590cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 591cb93a386Sopenharmony_ci } 592cb93a386Sopenharmony_ci } 593cb93a386Sopenharmony_ci 594cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 595cb93a386Sopenharmony_ci fExtensions.has("GL_NV_framebuffer_mixed_samples"))) || 596cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 597cb93a386Sopenharmony_ci fExtensions.has("GL_CHROMIUM_framebuffer_mixed_samples") || 598cb93a386Sopenharmony_ci fExtensions.has("GL_NV_framebuffer_mixed_samples")))) { 599cb93a386Sopenharmony_ci if (!fFunctions.fCoverageModulation) { 600cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 601cb93a386Sopenharmony_ci } 602cb93a386Sopenharmony_ci } 603cb93a386Sopenharmony_ci 604cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 605cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,3)) || 606cb93a386Sopenharmony_ci fExtensions.has("GL_KHR_debug"))) || 607cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 608cb93a386Sopenharmony_ci fExtensions.has("GL_KHR_debug")))) { 609cb93a386Sopenharmony_ci if (!fFunctions.fDebugMessageCallback || 610cb93a386Sopenharmony_ci !fFunctions.fDebugMessageControl || 611cb93a386Sopenharmony_ci !fFunctions.fDebugMessageInsert || 612cb93a386Sopenharmony_ci !fFunctions.fGetDebugMessageLog || 613cb93a386Sopenharmony_ci !fFunctions.fObjectLabel || 614cb93a386Sopenharmony_ci !fFunctions.fPopDebugGroup || 615cb93a386Sopenharmony_ci !fFunctions.fPushDebugGroup) { 616cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 617cb93a386Sopenharmony_ci } 618cb93a386Sopenharmony_ci } 619cb93a386Sopenharmony_ci 620cb93a386Sopenharmony_ci if ((GR_IS_GR_GL_ES(fStandard) && ( 621cb93a386Sopenharmony_ci fExtensions.has("GL_CHROMIUM_bind_uniform_location")))) { 622cb93a386Sopenharmony_ci if (!fFunctions.fBindUniformLocation) { 623cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 624cb93a386Sopenharmony_ci } 625cb93a386Sopenharmony_ci } 626cb93a386Sopenharmony_ci 627cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 628cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_window_rectangles"))) || 629cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 630cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_window_rectangles")))) { 631cb93a386Sopenharmony_ci if (!fFunctions.fWindowRectangles) { 632cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 633cb93a386Sopenharmony_ci } 634cb93a386Sopenharmony_ci } 635cb93a386Sopenharmony_ci 636cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 637cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,2)) || 638cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_sync"))) || 639cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 640cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 641cb93a386Sopenharmony_ci fExtensions.has("GL_APPLE_sync"))) || 642cb93a386Sopenharmony_ci (GR_IS_GR_WEBGL(fStandard) && ( 643cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(2,0))))) { 644cb93a386Sopenharmony_ci if (!fFunctions.fClientWaitSync || 645cb93a386Sopenharmony_ci !fFunctions.fDeleteSync || 646cb93a386Sopenharmony_ci !fFunctions.fFenceSync || 647cb93a386Sopenharmony_ci !fFunctions.fIsSync || 648cb93a386Sopenharmony_ci !fFunctions.fWaitSync) { 649cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 650cb93a386Sopenharmony_ci } 651cb93a386Sopenharmony_ci } 652cb93a386Sopenharmony_ci 653cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 654cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,2)) || 655cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_internalformat_query"))) || 656cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 657cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0))))) { 658cb93a386Sopenharmony_ci if (!fFunctions.fGetInternalformativ) { 659cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 660cb93a386Sopenharmony_ci } 661cb93a386Sopenharmony_ci } 662cb93a386Sopenharmony_ci 663cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 664cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,1)))) || 665cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 666cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 667cb93a386Sopenharmony_ci fExtensions.has("GL_OES_get_program_binary")))) { 668cb93a386Sopenharmony_ci if (!fFunctions.fGetProgramBinary || 669cb93a386Sopenharmony_ci !fFunctions.fProgramBinary) { 670cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 671cb93a386Sopenharmony_ci } 672cb93a386Sopenharmony_ci } 673cb93a386Sopenharmony_ci 674cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 675cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,1)))) || 676cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 677cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0))))) { 678cb93a386Sopenharmony_ci if (!fFunctions.fProgramParameteri) { 679cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 680cb93a386Sopenharmony_ci } 681cb93a386Sopenharmony_ci } 682cb93a386Sopenharmony_ci 683cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 684cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,2)) || 685cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_sampler_objects"))) || 686cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 687cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)))) || 688cb93a386Sopenharmony_ci (GR_IS_GR_WEBGL(fStandard) && ( 689cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(2,0))))) { 690cb93a386Sopenharmony_ci if (!fFunctions.fBindSampler || 691cb93a386Sopenharmony_ci !fFunctions.fDeleteSamplers || 692cb93a386Sopenharmony_ci !fFunctions.fGenSamplers || 693cb93a386Sopenharmony_ci !fFunctions.fSamplerParameteri || 694cb93a386Sopenharmony_ci !fFunctions.fSamplerParameteriv) { 695cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 696cb93a386Sopenharmony_ci } 697cb93a386Sopenharmony_ci } 698cb93a386Sopenharmony_ci 699cb93a386Sopenharmony_ci if (GR_IS_GR_GL(fStandard)) { 700cb93a386Sopenharmony_ci if (!fFunctions.fGetQueryObjectiv) { 701cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 702cb93a386Sopenharmony_ci } 703cb93a386Sopenharmony_ci } 704cb93a386Sopenharmony_ci 705cb93a386Sopenharmony_ci if (GR_IS_GR_GL(fStandard) || 706cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 707cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)) || 708cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_occlusion_query_boolean")))) { 709cb93a386Sopenharmony_ci#if GR_TEST_UTILS 710cb93a386Sopenharmony_ci if (!fFunctions.fBeginQuery || 711cb93a386Sopenharmony_ci !fFunctions.fDeleteQueries || 712cb93a386Sopenharmony_ci !fFunctions.fEndQuery || 713cb93a386Sopenharmony_ci !fFunctions.fGenQueries || 714cb93a386Sopenharmony_ci !fFunctions.fGetQueryObjectuiv || 715cb93a386Sopenharmony_ci !fFunctions.fGetQueryiv) { 716cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 717cb93a386Sopenharmony_ci } 718cb93a386Sopenharmony_ci#endif 719cb93a386Sopenharmony_ci // all functions were marked optional or test_only 720cb93a386Sopenharmony_ci } 721cb93a386Sopenharmony_ci 722cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 723cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,3)) || 724cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_timer_query") || 725cb93a386Sopenharmony_ci fExtensions.has("GL_EXT_timer_query")))) { 726cb93a386Sopenharmony_ci if (!fFunctions.fGetQueryObjecti64v || 727cb93a386Sopenharmony_ci !fFunctions.fGetQueryObjectui64v) { 728cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 729cb93a386Sopenharmony_ci } 730cb93a386Sopenharmony_ci } 731cb93a386Sopenharmony_ci 732cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 733cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,3)) || 734cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_timer_query")))) { 735cb93a386Sopenharmony_ci if (!fFunctions.fQueryCounter) { 736cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 737cb93a386Sopenharmony_ci } 738cb93a386Sopenharmony_ci } 739cb93a386Sopenharmony_ci 740cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 741cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,3)) || 742cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_invalidate_subdata")))) { 743cb93a386Sopenharmony_ci if (!fFunctions.fInvalidateBufferData || 744cb93a386Sopenharmony_ci !fFunctions.fInvalidateBufferSubData || 745cb93a386Sopenharmony_ci !fFunctions.fInvalidateTexImage || 746cb93a386Sopenharmony_ci !fFunctions.fInvalidateTexSubImage) { 747cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 748cb93a386Sopenharmony_ci } 749cb93a386Sopenharmony_ci } 750cb93a386Sopenharmony_ci 751cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 752cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,3)) || 753cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_invalidate_subdata"))) || 754cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 755cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(3,0)))) || 756cb93a386Sopenharmony_ci (GR_IS_GR_WEBGL(fStandard) && ( 757cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(2,0))))) { 758cb93a386Sopenharmony_ci if (!fFunctions.fInvalidateFramebuffer || 759cb93a386Sopenharmony_ci !fFunctions.fInvalidateSubFramebuffer) { 760cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 761cb93a386Sopenharmony_ci } 762cb93a386Sopenharmony_ci } 763cb93a386Sopenharmony_ci 764cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 765cb93a386Sopenharmony_ci (glVer >= GR_GL_VER(4,3)) || 766cb93a386Sopenharmony_ci fExtensions.has("GL_ARB_ES2_compatibility"))) || 767cb93a386Sopenharmony_ci GR_IS_GR_GL_ES(fStandard) || 768cb93a386Sopenharmony_ci GR_IS_GR_WEBGL(fStandard)) { 769cb93a386Sopenharmony_ci if (!fFunctions.fGetShaderPrecisionFormat) { 770cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 771cb93a386Sopenharmony_ci } 772cb93a386Sopenharmony_ci } 773cb93a386Sopenharmony_ci 774cb93a386Sopenharmony_ci if ((GR_IS_GR_GL(fStandard) && ( 775cb93a386Sopenharmony_ci fExtensions.has("GL_NV_fence"))) || 776cb93a386Sopenharmony_ci (GR_IS_GR_GL_ES(fStandard) && ( 777cb93a386Sopenharmony_ci fExtensions.has("GL_NV_fence")))) { 778cb93a386Sopenharmony_ci if (!fFunctions.fDeleteFences || 779cb93a386Sopenharmony_ci !fFunctions.fFinishFence || 780cb93a386Sopenharmony_ci !fFunctions.fGenFences || 781cb93a386Sopenharmony_ci !fFunctions.fSetFence || 782cb93a386Sopenharmony_ci !fFunctions.fTestFence) { 783cb93a386Sopenharmony_ci RETURN_FALSE_INTERFACE; 784cb93a386Sopenharmony_ci } 785cb93a386Sopenharmony_ci } 786cb93a386Sopenharmony_ci 787cb93a386Sopenharmony_ci 788cb93a386Sopenharmony_ci // End autogenerated content 789cb93a386Sopenharmony_ci return true; 790cb93a386Sopenharmony_ci} 791cb93a386Sopenharmony_ci 792cb93a386Sopenharmony_ci#if GR_TEST_UTILS 793cb93a386Sopenharmony_ci 794cb93a386Sopenharmony_civoid GrGLInterface::abandon() const { 795cb93a386Sopenharmony_ci const_cast<GrGLInterface*>(this)->fFunctions = GrGLInterface::Functions(); 796cb93a386Sopenharmony_ci} 797cb93a386Sopenharmony_ci 798cb93a386Sopenharmony_ci#endif // GR_TEST_UTILS 799