5846ff3c7a
TBR=michaelludwig@google.com Change-Id: Ie9fc5eb6aee8cffde5d17a01fc816a1c49d02e9c Reviewed-on: https://skia-review.googlesource.com/c/skia/+/281881 Reviewed-by: Chris Dalton <csmartdalton@google.com> Commit-Queue: Chris Dalton <csmartdalton@google.com>
749 lines
23 KiB
Plaintext
749 lines
23 KiB
Plaintext
// This file specifies which functions should be attached to GrGLInterface
|
|
// for a given standard (OpenGL, OpenGL ES, etc). It allows specifing
|
|
// how and when to attach them (e.g. only if an extension is present).
|
|
// It is used for both the assemble and validate step.
|
|
//
|
|
// To regenerate the Assemble/Validate code after editing this file, execute:
|
|
//
|
|
// make -C tools/gpu/gl/interface generate
|
|
//
|
|
// Currently it assumes the minimum versions:
|
|
// - GL: 2.0
|
|
// - GLES: 2.0
|
|
// - WebGL: [WIP] 1.0
|
|
//
|
|
// http://web.eecs.umich.edu/~sugih/courses/eecs487/common/notes/APITables.xml
|
|
// is a handy reference comparing GL and GLES API
|
|
[
|
|
{
|
|
"GL": [{"ext": "<core>"}],
|
|
"GLES": [{"ext": "<core>"}],
|
|
"WebGL": [{"ext": "<core>"}],
|
|
|
|
"functions": [
|
|
"ActiveTexture", "AttachShader", "BindAttribLocation", "BindBuffer",
|
|
"BindTexture", "BlendColor", "BlendEquation", "BlendFunc",
|
|
"BufferData", "BufferSubData", "Clear", "ClearColor",
|
|
"ClearStencil", "ColorMask", "CompileShader", "CompressedTexImage2D",
|
|
"CompressedTexSubImage2D", "CopyTexSubImage2D", "CreateProgram", "CreateShader",
|
|
"CullFace", "DeleteBuffers", "DeleteProgram",
|
|
"DeleteShader", "DeleteTextures", "DepthMask", "Disable",
|
|
"DisableVertexAttribArray", "DrawArrays", "DrawElements", "Enable",
|
|
"EnableVertexAttribArray", "Finish", "Flush",
|
|
"FrontFace", "GenBuffers",
|
|
"GenTextures", "GetBufferParameteriv", "GetError",
|
|
"GetIntegerv", "GetProgramInfoLog",
|
|
"GetProgramiv", "GetShaderInfoLog",
|
|
"GetShaderiv", "GetString",
|
|
"GetUniformLocation", "IsTexture", "LineWidth", "LinkProgram", "PixelStorei",
|
|
"ReadPixels", "Scissor", "ShaderSource", "StencilFunc",
|
|
"StencilFuncSeparate", "StencilMask", "StencilMaskSeparate", "StencilOp",
|
|
"StencilOpSeparate", "TexImage2D", "TexParameterf", "TexParameterfv", "TexParameteri",
|
|
"TexParameteriv", "TexSubImage2D", "Uniform1f", "Uniform1fv", "Uniform1i", "Uniform1iv",
|
|
"Uniform2f", "Uniform2fv", "Uniform2i", "Uniform2iv", "Uniform3f", "Uniform3fv", "Uniform3i",
|
|
"Uniform3iv", "Uniform4f", "Uniform4fv", "Uniform4i", "Uniform4iv", "UniformMatrix2fv",
|
|
"UniformMatrix3fv", "UniformMatrix4fv", "UseProgram", "VertexAttrib1f",
|
|
"VertexAttrib2fv", "VertexAttrib3fv", "VertexAttrib4fv", "VertexAttribPointer",
|
|
"Viewport",
|
|
],
|
|
},
|
|
{ // GL exclusive core functions
|
|
"GL": [{"ext": "<core>"}],
|
|
"GLES": null,
|
|
|
|
"functions": [
|
|
"DrawBuffer", "PolygonMode",
|
|
],
|
|
},
|
|
{
|
|
"GL": [{"min_version": [3, 0], "ext": "<core>"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"}],
|
|
"WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
|
|
|
|
"functions": [
|
|
"GetStringi",
|
|
]
|
|
},
|
|
{
|
|
"GL": [{"min_version": [4, 2], "ext": "<core>"}],
|
|
"GLES": [{"min_version": [3, 1], "ext": "<core>"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"MemoryBarrier",
|
|
],
|
|
// TODO: Remove 'optional' once Chrome sets this function in the interface.
|
|
"optional": [
|
|
"MemoryBarrier",
|
|
]
|
|
},
|
|
|
|
{
|
|
"GL": [{"ext": "<core>"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_OES_vertex_array_object"}],
|
|
"WebGL": [{"min_version": [2, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_OES_vertex_array_object"},
|
|
{/* else if */ "ext": "OES_vertex_array_object"}],
|
|
|
|
// WebGL uses createVertexArray instead of genVertexArrays, but Emscripten
|
|
// creates an alias called genVertexArray which papers over this difference.
|
|
"functions": [
|
|
"BindVertexArray", "DeleteVertexArrays", "GenVertexArrays",
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [4, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_tessellation_shader"}],
|
|
"GLES": [{"min_version": [3, 2], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_OES_tessellation_shader"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"PatchParameteri",
|
|
],
|
|
// FIXME: Make this method non-optional once Chrome starts adding it to the interface.
|
|
"optional": [
|
|
"PatchParameteri",
|
|
]
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [3, 0], "ext": "<core>"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "GL_EXT_blend_func_extended"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"BindFragDataLocation",
|
|
],
|
|
},
|
|
{
|
|
"GL": [{"min_version": [3, 3], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_blend_func_extended"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "GL_EXT_blend_func_extended"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"BindFragDataLocationIndexed",
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": [{"ext": "GL_KHR_blend_equation_advanced"},
|
|
{"ext": "GL_NV_blend_equation_advanced"}],
|
|
"GLES": [{"ext": "GL_KHR_blend_equation_advanced"},
|
|
{"ext": "GL_NV_blend_equation_advanced"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"BlendBarrier",
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [4, 4], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_clear_texture"}],
|
|
"GLES": [{"ext": "GL_EXT_clear_texture", "suffix": "EXT"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"ClearTexImage", "ClearTexSubImage",
|
|
],
|
|
// https://bugs.chromium.org/p/skia/issues/detail?id=8913
|
|
"optional": [
|
|
"ClearTexImage", "ClearTexSubImage",
|
|
]
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [3, 1], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_draw_instanced"},
|
|
{/* else if */ "ext": "GL_EXT_draw_instanced"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_EXT_draw_instanced"}],
|
|
"WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
|
|
|
|
"functions": [
|
|
"DrawArraysInstanced", "DrawElementsInstanced",
|
|
]
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [4, 2], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_base_instance"}],
|
|
"GLES": [{"ext": "GL_EXT_base_instance"},
|
|
{/* else if */ "ext": "GL_ANGLE_base_vertex_base_instance"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"DrawArraysInstancedBaseInstance", "DrawElementsInstancedBaseVertexBaseInstance"
|
|
]
|
|
},
|
|
|
|
{ // ES 3.0 has glDrawBuffers but not glDrawBuffer
|
|
"GL": [{"ext": "<core>"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"}],
|
|
"WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
|
|
|
|
"functions": [
|
|
"DrawBuffers", "ReadBuffer",
|
|
]
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [4, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_draw_indirect"}],
|
|
"GLES": [{"min_version": [3, 1], "ext": "<core>"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"DrawArraysIndirect", "DrawElementsIndirect",
|
|
]
|
|
},
|
|
|
|
{ // glDrawRangeElements was added to ES in 3.0.
|
|
"GL": [{"ext": "<core>"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"}],
|
|
"WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
|
|
|
|
"functions": [
|
|
"DrawRangeElements",
|
|
]
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [3, 2], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_texture_multisample"}],
|
|
"GLES": [{"min_version": [3, 1], "ext": "<core>"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"GetMultisamplefv",
|
|
]
|
|
},
|
|
|
|
// glGetTexLevelParameteriv was added to ES in 3.1.
|
|
{
|
|
"GL": [{"ext": "<core>"}],
|
|
"GLES": [{"min_version": [3, 1], "ext": "<core>"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"GetTexLevelParameteriv",
|
|
]
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [4, 3], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_multi_draw_indirect"}],
|
|
"GLES": [{"ext": "GL_EXT_multi_draw_indirect"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"MultiDrawArraysIndirect", "MultiDrawElementsIndirect",
|
|
]
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [3, 1], "ext": "<core>"}],
|
|
"GLES": [{"min_version": [3, 2], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_OES_texture_buffer"},
|
|
{/* else if */ "ext": "GL_EXT_texture_buffer"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"TexBuffer",
|
|
]
|
|
},
|
|
{
|
|
"GL": [{"min_version": [4, 3], "ext": "<core>"}],
|
|
"GLES": [{"min_version": [3, 2], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_OES_texture_buffer"},
|
|
{/* else if */ "ext": "GL_EXT_texture_buffer"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"TexBufferRange",
|
|
]
|
|
},
|
|
|
|
// GL_EXT_texture_storage is part of desktop 4.2
|
|
// There is a desktop ARB extension and an ES+desktop EXT extension
|
|
{
|
|
"GL": [{"min_version": [4, 2], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_texture_storage"},
|
|
{/* else if */ "ext": "GL_EXT_texture_storage"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_EXT_texture_storage"}],
|
|
"WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
|
|
|
|
"functions": [
|
|
"TexStorage2D",
|
|
]
|
|
},
|
|
|
|
// glTextureBarrier is part of desktop 4.5. There are also ARB and NV extensions.
|
|
{
|
|
"GL": [{"min_version": [4, 5], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_texture_barrier"},
|
|
{/* else if */ "ext": "GL_NV_texture_barrier"}],
|
|
"GLES": [{"ext": "GL_NV_texture_barrier"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"TextureBarrier",
|
|
]
|
|
},
|
|
|
|
{
|
|
"GL": null, // Not supported
|
|
"GLES": [{"ext": "GL_EXT_discard_framebuffer"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"DiscardFramebuffer",
|
|
]
|
|
},
|
|
|
|
{
|
|
"GL": null, // Not supported
|
|
"GLES": [{"ext": "GL_QCOM_tiled_rendering"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"StartTiling", "EndTiling",
|
|
],
|
|
// https://github.com/flutter/flutter/issues/47164
|
|
// https://github.com/flutter/flutter/issues/47804
|
|
"optional": [
|
|
"StartTiling", "EndTiling",
|
|
]
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [3, 2], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_instanced_arrays"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_EXT_instanced_arrays"}],
|
|
"WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
|
|
|
|
"functions": [
|
|
"VertexAttribDivisor",
|
|
]
|
|
},
|
|
{
|
|
"GL": [{"min_version": [3, 0], "ext": "<core>"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"}],
|
|
"WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
|
|
|
|
"functions": [
|
|
"VertexAttribIPointer",
|
|
]
|
|
},
|
|
|
|
// FrameBuffer Object (FBO) related calls
|
|
{
|
|
"GL": [{"min_version": [3, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_framebuffer_object"},
|
|
{/* else if */ "ext": "GL_EXT_framebuffer_object"}],
|
|
"GLES": [{"ext": "<core>"}], // These are all in ES 2.0 and above
|
|
"WebGL": [{"ext": "<core>"}],
|
|
|
|
"functions": [
|
|
"BindFramebuffer", "BindRenderbuffer", "CheckFramebufferStatus",
|
|
"DeleteFramebuffers", "DeleteRenderbuffers", "FramebufferRenderbuffer",
|
|
"FramebufferTexture2D", "GenFramebuffers", "GenRenderbuffers", "GenerateMipmap",
|
|
"GetFramebufferAttachmentParameteriv", "GetRenderbufferParameteriv",
|
|
"RenderbufferStorage",
|
|
],
|
|
},
|
|
{
|
|
"GL": [{"min_version": [3, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_framebuffer_object"},
|
|
{/* else if */ "ext": "GL_EXT_framebuffer_blit"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_CHROMIUM_framebuffer_multisample"},
|
|
{/* else if */ "ext": "GL_ANGLE_framebuffer_blit"}],
|
|
"WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
|
|
|
|
"functions": [
|
|
"BlitFramebuffer",
|
|
],
|
|
},
|
|
{
|
|
"GL": [{"min_version": [3, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_framebuffer_object"},
|
|
{/* else if */ "ext": "GL_EXT_framebuffer_multisample"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_CHROMIUM_framebuffer_multisample"},
|
|
{/* else if */ "ext": "GL_ANGLE_framebuffer_multisample"}],
|
|
"WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
|
|
|
|
"functions": [
|
|
"RenderbufferStorageMultisample",
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": null,
|
|
"GLES": [{"ext": "GL_CHROMIUM_map_sub"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"MapBufferSubData", "MapTexSubImage2D", "UnmapBufferSubData",
|
|
"UnmapTexSubImage2D"
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": null,
|
|
"GLES": [{"ext": "GL_EXT_multisampled_render_to_texture"},
|
|
{"ext": "GL_IMG_multisampled_render_to_texture"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"FramebufferTexture2DMultisample",
|
|
],
|
|
},
|
|
{
|
|
"GL": null,
|
|
"GLES": [{"ext": "GL_EXT_multisampled_render_to_texture"}],
|
|
"WebGL": null,
|
|
|
|
"hardcode_functions" : [
|
|
{
|
|
"ptr_name": "fRenderbufferStorageMultisampleES2EXT",
|
|
"cast_name": "GrGLRenderbufferStorageMultisampleFn",
|
|
"get_name": "glRenderbufferStorageMultisampleEXT",
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"GL": null,
|
|
"GLES": [{"ext": "GL_IMG_multisampled_render_to_texture"}],
|
|
"WebGL": null,
|
|
|
|
"hardcode_functions" : [
|
|
{
|
|
"ptr_name": "fRenderbufferStorageMultisampleES2EXT",
|
|
"cast_name": "GrGLRenderbufferStorageMultisampleFn",
|
|
"get_name": "glRenderbufferStorageMultisampleIMG",
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"GL": null,
|
|
"GLES": [{"ext": "GL_APPLE_framebuffer_multisample"}],
|
|
"WebGL": null,
|
|
|
|
"functions" : ["ResolveMultisampleFramebuffer"],
|
|
"hardcode_functions" : [
|
|
{
|
|
"ptr_name": "fRenderbufferStorageMultisampleES2APPLE",
|
|
"cast_name": "GrGLRenderbufferStorageMultisampleFn",
|
|
"get_name": "glRenderbufferStorageMultisampleAPPLE",
|
|
}
|
|
]
|
|
},
|
|
|
|
// There are several APIs for buffer mapping:
|
|
// ES2 + GL_OES_mapbuffer: MapBufferOES and UnmapBufferOES
|
|
// ES2 + GL_EXT_map_buffer_range: Adds MapBufferRangeEXT and FlushMappedBufferRangeEXT
|
|
// ES3: MapBufferRange, FlushMappedBufferRange, and UnmapBuffer are core (so no suffix).
|
|
//
|
|
// MapBuffer is not part of ES3, but implementations may still report the OES versions of
|
|
// MapBuffer and UnmapBuffer, per the older GL_OES_mapbuffer extension. Some implementations
|
|
// let us mix the newer MapBufferRange with the older UnmapBufferOES, but we've hit others that
|
|
// don't permit it. Note that in GrGLBuffer, we choose which API to use based on version and
|
|
// extensions. This code is written so that we never mix OES and non-OES functions.
|
|
{
|
|
"GL": [{"ext": "<core>"}],
|
|
"GLES": [{"ext": "GL_OES_mapbuffer"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"MapBuffer",
|
|
],
|
|
},
|
|
{
|
|
"GL": [{"ext": "<core>"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_OES_mapbuffer"}],
|
|
"WebGL": null, // explicitly removed https://www.khronos.org/registry/webgl/specs/2.0/#5.14
|
|
|
|
"functions": [
|
|
"UnmapBuffer",
|
|
],
|
|
},
|
|
{
|
|
"GL": [{"min_version": [3, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_map_buffer_range"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_EXT_map_buffer_range"}],
|
|
"WebGL": null, // explicitly removed https://www.khronos.org/registry/webgl/specs/2.0/#5.14
|
|
|
|
"functions": [
|
|
// These functions are added to the 3.0 version of both GLES and GL.
|
|
"MapBufferRange", "FlushMappedBufferRange",
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": [{"ext": "GL_EXT_debug_marker"}],
|
|
"GLES": [{"ext": "GL_EXT_debug_marker"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"InsertEventMarker", "PushGroupMarker", "PopGroupMarker"
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [4, 3], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_program_interface_query"}],
|
|
"GLES": [{"min_version": [3, 1], "ext": "<core>"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"GetProgramResourceLocation",
|
|
],
|
|
},
|
|
|
|
{ // It appears that the GL_NV_path_rendering sometimes provides these
|
|
// functions under the "EXT" extension instead of "NV".
|
|
"GL": [{"ext": "GL_NV_path_rendering", "suffix": "EXT"}],
|
|
|
|
"GLES": [{"ext": "GL_CHROMIUM_path_rendering"},
|
|
{"ext": "GL_NV_path_rendering", "suffix": "EXT"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"MatrixLoadIdentity", "MatrixLoadf"
|
|
],
|
|
},
|
|
{
|
|
"GL": [{"ext": "GL_NV_path_rendering"}],
|
|
"GLES": [{"ext": "GL_CHROMIUM_path_rendering"},
|
|
{"ext": "GL_NV_path_rendering"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"CoverFillPath", "CoverFillPathInstanced", "CoverStrokePath",
|
|
"CoverStrokePathInstanced", "DeletePaths", "GenPaths",
|
|
"IsPath", "PathCommands", "PathParameterf", "PathParameteri",
|
|
"PathStencilFunc", "ProgramPathFragmentInputGen", "StencilFillPath",
|
|
"StencilFillPathInstanced", "StencilStrokePath", "StencilStrokePathInstanced",
|
|
"StencilThenCoverFillPath", "StencilThenCoverFillPathInstanced",
|
|
"StencilThenCoverStrokePath", "StencilThenCoverStrokePathInstanced",
|
|
],
|
|
// List of functions that Skia uses, but which have been added since the initial release
|
|
// of NV_path_rendering driver. We do not want to fail interface validation due to
|
|
// missing features, we will just not use the extension.
|
|
// If one updates this list, then update GrGLCaps::hasPathRenderingSupport too.
|
|
"optional": [
|
|
"ProgramPathFragmentInputGen", "StencilThenCoverFillPath",
|
|
"StencilThenCoverFillPathInstanced", "StencilThenCoverStrokePath",
|
|
"StencilThenCoverStrokePathInstanced",
|
|
],
|
|
},
|
|
{
|
|
"GL": null,
|
|
"GLES": [{"ext": "GL_CHROMIUM_path_rendering"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"BindFragmentInputLocation",
|
|
],
|
|
},
|
|
{
|
|
"GL": [{"ext": "GL_NV_framebuffer_mixed_samples"}],
|
|
"GLES": [{"ext": "GL_CHROMIUM_framebuffer_mixed_samples"},
|
|
{"ext": "GL_NV_framebuffer_mixed_samples"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"CoverageModulation",
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [4, 3], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_KHR_debug", "suffix": ""}],
|
|
"GLES": [{"ext": "GL_KHR_debug"}],
|
|
"WebGL": null,
|
|
|
|
// In OpenGL (but not ES), KHR_debug defines these methods to have no suffix.
|
|
"functions": [
|
|
"DebugMessageControl", "DebugMessageInsert", "DebugMessageCallback",
|
|
"GetDebugMessageLog", "PushDebugGroup", "PopDebugGroup", "ObjectLabel",
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": null,
|
|
"GLES": [{"ext": "GL_CHROMIUM_bind_uniform_location"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"BindUniformLocation",
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": [{"ext": "GL_EXT_window_rectangles"}],
|
|
"GLES": [{"ext": "GL_EXT_window_rectangles"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"WindowRectangles",
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [3, 2], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_sync"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_APPLE_sync"}],
|
|
"WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
|
|
|
|
"functions": [
|
|
"ClientWaitSync", "DeleteSync", "FenceSync",
|
|
"IsSync", "WaitSync"
|
|
],
|
|
},
|
|
|
|
{ // getInternalformativ was added in GL 4.2, ES 3.0, and with
|
|
// extension ARB_internalformat_query
|
|
"GL": [{"min_version": [4, 2], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_internalformat_query"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"GetInternalformativ"
|
|
],
|
|
},
|
|
|
|
// GetProgramBinary and ProgramBinary are available with an ES2 extension...
|
|
{
|
|
"GL": [{"min_version": [4, 1], "ext": "<core>"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_OES_get_program_binary"}],
|
|
"WebGL": null, // explicitly not supported in WebGL 2.0
|
|
|
|
"functions": [
|
|
"GetProgramBinary", "ProgramBinary",
|
|
],
|
|
},
|
|
|
|
// ... but the related ProgramParameteri is only in ES3
|
|
{
|
|
"GL": [{"min_version": [4, 1], "ext": "<core>"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"}],
|
|
"WebGL": null, // explicitly not supported in WebGL 2.0
|
|
|
|
"functions": [
|
|
"ProgramParameteri",
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [3, 2], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_sampler_objects"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"}],
|
|
"WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
|
|
|
|
"functions": [
|
|
"BindSampler", "DeleteSamplers", "GenSamplers",
|
|
"SamplerParameteri", "SamplerParameteriv",
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": [{"ext": "<core>"}],
|
|
"GLES": null, // not in ES
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"GetQueryObjectiv",
|
|
],
|
|
},
|
|
{
|
|
"GL": [{"ext": "<core>"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_EXT_occlusion_query_boolean"}],
|
|
"WebGL": null,
|
|
|
|
// We only use these in our test tools
|
|
"test_functions": [
|
|
"GenQueries", "DeleteQueries", "BeginQuery", "EndQuery",
|
|
"GetQueryObjectuiv", "GetQueryiv",
|
|
]
|
|
},
|
|
{
|
|
"GL": [{"min_version": [3, 3], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_timer_query"},
|
|
{/* else if */ "ext": "GL_EXT_timer_query"}],
|
|
"GLES": null,
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"GetQueryObjecti64v", "GetQueryObjectui64v",
|
|
],
|
|
},
|
|
{
|
|
"GL": [{"min_version": [3, 3], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_timer_query"}],
|
|
"GLES": null,
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"QueryCounter",
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [4, 3], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_invalidate_subdata"}],
|
|
"GLES": null,
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"InvalidateBufferData", "InvalidateBufferSubData", "InvalidateTexImage",
|
|
"InvalidateTexSubImage",
|
|
],
|
|
},
|
|
{ // ES 3.0 adds the framebuffer functions but not the others.
|
|
"GL": [{"min_version": [4, 3], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_invalidate_subdata"}],
|
|
"GLES": [{"min_version": [3, 0], "ext": "<core>"}],
|
|
"WebGL": [{"min_version": [2, 0], "ext": "<core>"}],
|
|
|
|
"functions": [
|
|
"InvalidateFramebuffer", "InvalidateSubFramebuffer",
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": [{"min_version": [4, 3], "ext": "<core>"},
|
|
{/* else if */ "ext": "GL_ARB_ES2_compatibility"}],
|
|
"GLES": [{"ext": "<core>"}],
|
|
"WebGL": [{"ext": "<core>"}],
|
|
|
|
"functions": [
|
|
"GetShaderPrecisionFormat",
|
|
],
|
|
},
|
|
|
|
{
|
|
"GL": [{"ext": "GL_NV_fence"}],
|
|
"GLES": [{"ext": "GL_NV_fence"}],
|
|
"WebGL": null,
|
|
|
|
"functions": [
|
|
"DeleteFences", "FinishFence", "GenFences", "SetFence", "TestFence",
|
|
],
|
|
}
|
|
]
|