haikuwebkit/Source/WebCore/html/canvas/WebGLMultiDraw.idl

75 lines
2.6 KiB
Plaintext
Raw Permalink Normal View History

Support WEBGL_multi_draw extension https://bugs.webkit.org/show_bug.cgi?id=219139 Patch by Kenneth Russell <kbr@chromium.org> on 2021-01-20 Reviewed by Dean Jackson. Source/WebCore: Support the WEBGL_multi_draw extension in WebKit, delegating to ANGLE's underlying implementation. This extension significantly reduces draw-call overhead in certain scenarios, and is requested by CAD/CAM web apps using WebGL. Test: webgl/conformance/extensions/webgl-multi-draw.html * CMakeLists.txt: * DerivedSources-input.xcfilelist: * DerivedSources-output.xcfilelist: * DerivedSources.make: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * bindings/js/JSDOMConvertWebGL.cpp: (WebCore::convertToJSValue): * html/canvas/WebGL2RenderingContext.cpp: (WebCore::WebGL2RenderingContext::getExtension): (WebCore::WebGL2RenderingContext::getSupportedExtensions): * html/canvas/WebGLExtension.h: * html/canvas/WebGLMultiDraw.cpp: Added. (WebCore::makeSpanWithOffset): (WebCore::WebGLMultiDraw::WebGLMultiDraw): (WebCore::WebGLMultiDraw::getName const): (WebCore::WebGLMultiDraw::supported): (WebCore::WebGLMultiDraw::multiDrawArraysWEBGL): (WebCore::WebGLMultiDraw::multiDrawArraysInstancedWEBGL): (WebCore::WebGLMultiDraw::multiDrawElementsWEBGL): (WebCore::WebGLMultiDraw::multiDrawElementsInstancedWEBGL): (WebCore::WebGLMultiDraw::validateDrawcount): (WebCore::WebGLMultiDraw::validateOffset): * html/canvas/WebGLMultiDraw.h: Added. * html/canvas/WebGLMultiDraw.idl: Added. * html/canvas/WebGLRenderingContext.cpp: (WebCore::WebGLRenderingContext::getExtension): (WebCore::WebGLRenderingContext::getSupportedExtensions): * html/canvas/WebGLRenderingContextBase.cpp: (WebCore::WebGLRenderingContextBase::extensionIsEnabled): * html/canvas/WebGLRenderingContextBase.h: * platform/graphics/GraphicsContextGL.h: * platform/graphics/angle/GraphicsContextGLANGLE.cpp: (WebCore::GraphicsContextGLOpenGL::multiDrawArraysANGLE): (WebCore::GraphicsContextGLOpenGL::multiDrawArraysInstancedANGLE): (WebCore::GraphicsContextGLOpenGL::multiDrawElementsANGLE): (WebCore::GraphicsContextGLOpenGL::multiDrawElementsInstancedANGLE): * platform/graphics/opengl/GraphicsContextGLOpenGL.h: * platform/graphics/opengl/GraphicsContextGLOpenGLCommon.cpp: (WebCore::GraphicsContextGLOpenGL::multiDrawArraysANGLE): (WebCore::GraphicsContextGLOpenGL::multiDrawArraysInstancedANGLE): (WebCore::GraphicsContextGLOpenGL::multiDrawElementsANGLE): (WebCore::GraphicsContextGLOpenGL::multiDrawElementsInstancedANGLE): Source/WebInspectorUI: Tell the Inspector about the method signatures in the WEBGL_multi_draw extension. * UserInterface/Models/NativeFunctionParameters.js: Source/WebKit: Add automatically-generated stubs for supporting the multi-draw extension in the GPU process. * GPUProcess/graphics/RemoteGraphicsContextGL.messages.in: * GPUProcess/graphics/RemoteGraphicsContextGLFunctionsGenerated.h: (multiDrawArraysANGLE): (multiDrawArraysInstancedANGLE): (multiDrawElementsANGLE): (multiDrawElementsInstancedANGLE): * WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.h: * WebProcess/GPU/graphics/RemoteGraphicsContextGLProxyFunctionsGenerated.cpp: (WebKit::RemoteGraphicsContextGLProxy::multiDrawArraysANGLE): (WebKit::RemoteGraphicsContextGLProxy::multiDrawArraysInstancedANGLE): (WebKit::RemoteGraphicsContextGLProxy::multiDrawElementsANGLE): (WebKit::RemoteGraphicsContextGLProxy::multiDrawElementsInstancedANGLE): LayoutTests: Add conformance test for the multi-draw extension, which is expected to pass. Temporarily suppress the test due to failures on Intel GPUs on macOS caused by recently-discovered OpenGL driver bugs, which are currently being investigated. * TestExpectations: * webgl/conformance/extensions/webgl-multi-draw-expected.txt: Added. * webgl/conformance/extensions/webgl-multi-draw.html: Added. * webgl/resources/webgl_test_files/conformance/extensions/webgl-multi-draw.html: Added. Canonical link: https://commits.webkit.org/233192@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@271679 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-01-21 01:42:45 +00:00
/*
* Copyright (C) 2021 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
typedef unsigned long GLenum;
typedef long GLint;
typedef long GLsizei;
typedef unsigned long GLuint;
typedef (Int32Array or sequence<GLint>) Int32List;
[
LegacyNoInterfaceObject,
Conditional=WEBGL,
GenerateIsReachable=ImplWebGLRenderingContext
] interface WebGLMultiDraw {
undefined multiDrawArraysWEBGL(
GLenum mode,
Int32List firstsList,
GLuint firstsOffset,
Int32List countsList,
GLuint countsOffset,
GLsizei drawcount);
undefined multiDrawArraysInstancedWEBGL(
GLenum mode,
Int32List firstsList,
GLuint firstsOffset,
Int32List countsList,
GLuint countsOffset,
Int32List instanceCountsList,
GLuint instanceCountsOffset,
GLsizei drawcount);
undefined multiDrawElementsWEBGL(
GLenum mode,
Int32List countsList,
GLuint countsOffset,
GLenum type,
Int32List offsetsList,
GLuint offsetsOffset,
GLsizei drawcount);
undefined multiDrawElementsInstancedWEBGL(
GLenum mode,
Int32List countsList,
GLuint countsOffset,
GLenum type,
Int32List offsetsList,
GLuint offsetsOffset,
Int32List instanceCountsList,
GLuint instanceCountsOffset,
GLsizei drawcount);
};