-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathANGLE_base_vertex_base_instance.txt
More file actions
251 lines (183 loc) · 8.89 KB
/
ANGLE_base_vertex_base_instance.txt
File metadata and controls
251 lines (183 loc) · 8.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
Name
ANGLE_base_vertex_base_instance
Name Strings
GL_ANGLE_base_vertex_base_instance
Contributors
Shrek Shao, Google Inc.
Contributors to the OES_draw_elements_base_vertex specification
Contributors to the EXT_draw_elements_base_vertex specification
Contributors to the EXT_multi_draw_arrays specification
Contributors to the ARB_shader_draw_parameters specification
Contact
Shrek Shao (shrekshao 'at' google.com)
Status
Incomplete
Version
Last Modified Date: August 13, 2019
Author Revision: 1
Number
OpenGL ES Extension XX
Dependencies
OpenGL ES 3.1 is required.
This extension is written against the OpenGL ES 3.1 specification, the
OpenGL ES 3.2 specification, and the OpenGL ES Shading Language 3.0
specification.
GL_ANGLE_multi_draw is required.
Overview
This extension exposes the *BaseVertex* draw call in
OES_draw_elements_base_vertex/EXT_draw_elements_base_vertex together with
their newly added *BaseInstance and MultiDraw* variants in addition to the
vertex shader builtins <gl_BaseVertex> and <gl_BaseInstance> exposed by
ARB_shader_draw_parameters for OpenGL.
*BaseInstance behaves identically to its counterpart draw calls except that
<instanceCount> instances of the range of elements are executed and the
value of <instance> advances for each iteration. Those attributes that have
non-zero values for <divisor>, as specified by VertexAttribDivisor, advance
once per <divisor> instances of the set(s) of vertices being rendered.
Additionally, <baseInstance> specifies the first element within the
instanced vertex attributes.
*BaseVertex* is equivalent to its counterpart draw calls except that
the value of the base vertex passed into the driver is <baseVertex> instead
of zero, and that <instances> of the set of elements are executed and the
value of <instance> advances between each set.
Additionally, <gl_BaseVertex> and <gl_BaseInstance> builtins are added
to the shading language.
For any *BaseVertex* draw call variant, the <baseVertex> of the draw may be
read by the vertex shader as <gl_BaseVertex>. For non *BaseVertex* calls,
the value of <gl_BaseVertex> is 0.
For any *BaseInstance draw call variant, the baseInstance of the draw may
be read by the vertex shader as <gl_BaseInstance>. For non *BaseInstance
calls, the value of <gl_BaseInstance> is 0.
IP Status
No known IP claims.
New Procedures and Functions
void DrawArraysInstancedBaseInstanceANGLE(enum mode,
GLint first,
GLsizei count,
GLsizei instanceCount,
GLuint baseInstance);
void DrawElementsInstancedBaseVertexBaseInstanceANGLE(GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
GLsizei instanceCount,
GLint baseVertex,
GLuint baseInstance);
void MultiDrawArraysInstancedBaseInstanceANGLE(enum mode,
const GLsizei drawcount,
const GLsizei* counts,
const GLsizei* instanceCounts,
const GLint* firsts,
const GLint* baseInstances);
void MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE(enum mode,
const GLsizei drawcount,
const GLint* counts,
GLenum type,
const GLvoid* const* indices,
const GLsizei* instanceCounts,
const GLint* baseVertices,
const GLint* baseInstances);
New Tokens
None.
Additions to Chapter 10 of the OpenGL ES 3.2 Specification
Section 10.5 Drawing Commands Using Vertex Arrays:
The command
void DrawArraysInstancedBaseInstanceANGLE (GLenum mode,
GLint first,
GLsizei count,
GLsizei instanceCount,
GLuint baseInstance);
Behaves identically to DrawArraysInstanced except that <baseInstance> is
passed down to DrawArraysOneInstance instead of zero.
The base index of the instance may be read by a vertex shader as
<gl_BaseInstance>.
The command
void MultiDrawArraysInstancedBaseInstanceANGLE(GLenum mode,
GLsizei drawcount,
const GLsizei* counts,
const GLsizei* instanceCounts,
const GLint* firsts,
const GLuint* baseInstances);
Behaves identically to DrawArraysInstancedBaseInstanceANGLE 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) DrawArraysInstancedBaseInstance(
mode,
*(counts+i),
*(instanceCounts+i),
*(firsts+i),
*(baseInstance+i)
);
}
The index of the draw (<i> in the above pseudo-code) may be read by
a vertex shader as <gl_DrawID> which is defined in GL_ANGLE_multi_draw.
The command
void DrawElementsInstancedBaseVertexBaseInstanceANGLE (GLenum mode,
GLsizei count,
GLenum type,
const GLvoid* indices,
GLsizei instanceCount,
GLint baseVertex,
GLuint baseInstance);
Behaves identically to DrawElementsInstanced except that <baseVertex> and
<baseInstance> are passed down to DrawElementsOneInstance instead of zero.
The base index of the vertex may be read by a vertex shader as
<gl_BaseVertex>. This value is also added to the <gl_VertexID>.
The base index of the instance may be read by a vertex shader as
<gl_BaseInstance>. Note that this value is not added to the
<gl_InstanceID>.
The command
void MultiDrawElementsInstancedBaseVertexBaseInstanceANGL(GLenum mode,
GLenum type,
GLsizei drawcount,
const GLsizei* counts,
const GLsizei* instanceCounts,
const GLvoid* const* indices,
const GLint* baseVertices,
const GLuint* baseInstances);
Behaves identically to DrawElementsInstancedBaseVertexBaseInstanceANGLE
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) DrawElementsInstancedBaseVertexBaseInstanceANGLE(
mode,
*(counts+i),
type,
*(instanceCounts+i),
*(indices+i),
*(baseVertices+i),
*(baseInstances+i)
);
}
The index of the draw (<i> in the above pseudo-code) may be read by
a vertex shader as <gl_DrawID> which is defined in GL_ANGLE_multi_draw.
Errors
DrawArraysInstancedBaseInstanceANGLE and
DrawElementsInstancedBaseVertexBaseInstanceANGLE
generate the same errors as DrawArraysInstanced and DrawElementsInstanced.
MultiDrawArraysInstancedBaseInstanceANGLE and
MultiDrawElementsInstancedBaseVertexBaseInstanceANGL
generate the same errors as DrawArraysInstanced and DrawElementsInstanced,
respectively, for any draw <i> where an error is generated. If any call
would produce an error, no drawing is performed.
The error INVALID_VALUE is generated by the MultiDraw* functions if
<drawcount> is less than zero.
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_base_vertex_base_instance : <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_base_vertex_base_instance 1
Dependencies on GL_OES_draw_elements_base_vertex and
GL_EXT_draw_elements_base_vertex
If the OpenGL ES context version is less than 3.2, this extension is only
available when GL_OES_draw_elements_base_vertex or
GL_EXT_draw_elements_base_vertex are available.
Issues
None
Revision History
Rev. Date Author Changes
---- -------- ---------- --------------------------------------------
1 08/13/19 Shrek Shao First revision.