aboutsummaryrefslogtreecommitdiff
path: root/extensions
diff options
context:
space:
mode:
authorAustin Eng <enga@chromium.org>2018-10-19 15:34:02 -0700
committerCommit Bot <commit-bot@chromium.org>2018-11-06 18:04:07 +0000
commit1bf18ce9e2caca7067b4439373f4fb04a5cd7d21 (patch)
tree0fad52812e82d9b6a48c5699caeaa513594395ac /extensions
parentbc5834cdadbd5c278c57024c15bbf70d9a224262 (diff)
downloadangle-1bf18ce9e2caca7067b4439373f4fb04a5cd7d21.tar.gz
Implement GL_ANGLE_multi_draw
This patch adds entrypoints glMultiDrawArraysANGLE, glMultiDrawElementsANGLE, glMultiDrawArraysInstancedANGLE, annd glMultiDrawElementsInstancedANGLE Bug: chromium:890539 Change-Id: Ic9c374c53892460f44ca6e73a253b78473ac2dff Reviewed-on: https://chromium-review.googlesource.com/c/1282268 Reviewed-by: Kai Ninomiya <kainino@chromium.org> Commit-Queue: Austin Eng <enga@chromium.org>
Diffstat (limited to 'extensions')
-rw-r--r--extensions/ANGLE_multi_draw.txt228
1 files changed, 228 insertions, 0 deletions
diff --git a/extensions/ANGLE_multi_draw.txt b/extensions/ANGLE_multi_draw.txt
new file mode 100644
index 0000000000..c71996cd07
--- /dev/null
+++ b/extensions/ANGLE_multi_draw.txt
@@ -0,0 +1,228 @@
+Name
+
+ ANGLE_multi_draw
+
+Name Strings
+
+ GL_ANGLE_multi_draw
+
+Contributors
+
+ Austin Eng, Google Inc.
+ Kai Ninomiya, Google Inc.
+ Kenneth Russell, Google Inc.
+ Contributors to the EXT_multi_draw_arrays specification
+ Contributors to the ARB_shader_draw_parameters specification
+
+Contact
+
+ Austin Eng (enga 'at' google.com)
+
+Status
+
+ Incomplete
+
+Version
+
+ Last Modified Date: October 24, 2018
+ Author Revision: 1
+
+Number
+
+ OpenGL ES Extension XX
+
+Dependencies
+
+ OpenGL ES 2.0 is required.
+
+ This extension is written against the OpenGL ES 2.0 specification,
+ the OpenGL ES 3.0 specification, and the OpenGL ES Shading Language 3.0
+ specification.
+
+ The presence of the GL_ANGLE_instanced_arrays extension affects the
+ definition of this extension.
+
+Overview
+
+ This extension exposes the Multi* draw call variants in
+ EXT_multi_draw_arrays functionality in addition to the vertex shader builtin
+ gl_DrawID exposed by ARB_shader_draw_parameters for OpenGL.
+
+ These functions behave identically to the standard functions
+ DrawArrays() and DrawElements() except they handle multiple lists of
+ vertices in one call. Their main purpose is to allow one function call
+ to render more than one primitive such as triangle strip, triangle fan,
+ etc.
+
+ Additionally, this extension adds a further built-in variable, gl_DrawID
+ to the shading language. This variable contains the index of the draw
+ currently being processed by a Multi* variant of a drawing command.
+
+IP Status
+
+ No known IP claims.
+
+New Procedures and Functions
+
+ void MultiDrawArraysANGLE(enum mode,
+ const GLint* firsts,
+ const GLsizei* counts,
+ const GLsizei drawcount);
+
+ void MultiDrawElementsANGLE(enum mode,
+ const GLint* counts,
+ GLenum type,
+ const GLsizei* offsets,
+ const GLsizei drawcount);
+
+ void MultiDrawArraysInstancedANGLE(enum mode,
+ const GLint* firsts,
+ const GLsizei* counts,
+ const GLsizei* instanceCounts,
+ const GLsizei drawcount);
+
+ void MultiDrawElementsInstancedANGLE(enum mode,
+ const GLint* counts,
+ GLenum type,
+ const GLsizei* offsets,
+ const GLsizei* instanceCounts,
+ const GLsizei drawcount);
+
+New Tokens
+
+ None.
+
+Additions to Chapter 2 of the OpenGL ES 2.0 Specification
+
+ Section 2.8 Vertex Arrays:
+
+ The command
+
+ void MultiDrawArraysANGLE(GLenum mode,
+ const GLint* firsts,
+ const GLsizei *counts,
+ GLsizei drawcount)
+
+ Behaves identically to DrawArrays except that a list of arrays is
+ specified instead. The number of lists is specified in the drawcount
+ parameter. It has the same effect as:
+
+ for(i=0; i<drawcount; i++) {
+ if (*(counts+i)>0) DrawArrays(mode, *(firsts+i), *(counts+i));
+ }
+
+ The index of the draw (<i> in the above pseudo-code) may be read by
+ a vertex shader as <gl_DrawID>.
+
+ The command
+
+ void MultiDrawElementsANGLE(GLenum mode,
+ GLsizei* counts,
+ GLenum type,
+ GLsizei* offsets,
+ GLsizei drawcount)
+
+ Behaves identically to DrawElements except that a list of arrays is
+ specified instead. The number of lists is specified in the drawcount
+ parameter. It has the same effect as:
+
+ for(i=0; i<drawcount; i++) {
+ if (*(counts+i)>0) DrawElements(mode, *(counts+i), type,
+ (const void*)(long)(*(offsets+i)));
+ }
+
+ The index of the draw (<i> in the above pseudo-code) may be read by
+ a vertex shader as <gl_DrawID>.
+
+Additions to Chapter 2 of the OpenGL ES 3.0 Specification
+
+ Section 2.9.3 Drawing Commands:
+
+ The command
+
+ void MultiDrawArraysInstancedANGLE(
+ GLenum mode,
+ const GLint* firsts,
+ const GLsizei *counts,
+ const GLsizei* instanceCounts,
+ GLsizei drawcount)
+
+ Behaves identically to DrawArraysInstanced except that a list of arrays is
+ specified instead. The number of lists is specified in the drawcount
+ parameter. It has the same effect as:
+
+ for(i=0; i<drawcount; i++) {
+ if (*(counts+i)>0) DrawArraysInstanced(mode, *(firsts+i), *(counts+i),
+ *(instanceCounts+1));
+ }
+
+ The index of the draw (<i> in the above pseudo-code) may be read by
+ a vertex shader as <gl_DrawID>.
+
+ The command
+
+ void MultiDrawElementsInstancedANGLE(
+ GLenum mode,
+ GLsizei* counts,
+ GLenum type,
+ GLsizei* offsets,
+ const GLsizei* instanceCounts,
+ GLsizei drawcount)
+
+ Behaves identically to DrawElementsInstanced except that a list of arrays is
+ specified instead. The number of lists is specified in the drawcount
+ parameter. It has the same effect as:
+
+ for(i=0; i<drawcount; i++) {
+ if (*(counts+i)>0) DrawElementsInstanced(mode, *(counts+i), type,
+ (const void*)(long)(*(offsets+i)), *(instanceCounts+1));
+ }
+
+ The index of the draw (<i> in the above pseudo-code) may be read by
+ a vertex shader as <gl_DrawID>.
+
+Errors
+
+ The error INVALID_VALUE is generated by the new functions if <drawcount>
+ is less than 0.
+
+ MultiDrawArraysANGLE, MultiDrawElementsANGLE,
+ MultiDrawArraysInstancedANGLE, and MultiDrawElementsInstancedANGLE generate
+ the same errors as DrawArrays, DrawElements, DrawArraysInstanced,
+ and DrawElementsInstanced, respectively, for any draw <i> where an error
+ is generated. If any call would produce an error, no drawing is performed.
+
+Modifications to the OpenGL ES Shading Language Specification, Version 3.00
+
+ Including the following line in a shader can be used to control the
+ language featured described in this extension:
+
+ #extension GL_ANGLE_multi_draw : <behavior>
+
+ where <behavior> is as specified in section 3.5.
+
+ A new preprocessor #define is added to the OpenGL ES Shading Language:
+
+ #define GL_ANGLE_multi_draw 1
+
+Dependencies on GL_ANGLE_instanced_arrays
+
+ If GL_ANGLE_instanced_arrays is enabled, append the lanuage in "Additions to
+ Chapter 2 of the OpenGL ES 3.0 Specification, Section 2.9.3 Drawing
+ Commands" to the language in "Additions to Chapter 2 of the OpenGL ES 2.0
+ Specification, Section 2.8 Vertex Arrays".
+
+ If GL_ANGLE_instanced_arrays is not enabled and the context is less than a
+ OpenGL ES 3.0 context, the error INVALID_OPERATION is generated by any call
+ to the functions MultiDrawArraysInstancedANGLE and
+ MultiDrawElementsInstancedANGLE.
+
+Issues
+ None
+
+Revision History
+
+ Rev. Date Author Changes
+ ---- -------- ---------- --------------------------------------------
+ 1 10/24/18 Austin Eng First revision.
+ 2 10/25/18 Austin Eng Second revision. Add instanced variants