<category name="GL_ARB_draw_elements_base_vertex" number="62">
- <function name="DrawElementsBaseVertex" es2="3.2" exec="dynamic">
+ <function name="DrawElementsBaseVertex" es2="3.2" exec="dynamic" marshal="draw">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
<param name="basevertex" type="GLint"/>
</function>
- <function name="DrawRangeElementsBaseVertex" es2="3.2" exec="dynamic">
+ <function name="DrawRangeElementsBaseVertex" es2="3.2" exec="dynamic" marshal="draw">
<param name="mode" type="GLenum"/>
<param name="start" type="GLuint"/>
<param name="end" type="GLuint"/>
<param name="basevertex" type="GLint"/>
</function>
- <function name="MultiDrawElementsBaseVertex" exec="dynamic">
+ <function name="MultiDrawElementsBaseVertex" exec="dynamic" marshal="draw">
<param name="mode" type="GLenum"/>
<param name="count" type="const GLsizei *"/>
<param name="type" type="GLenum"/>
<param name="basevertex" type="const GLint *"/>
</function>
- <function name="DrawElementsInstancedBaseVertex" es2="3.2" exec="dynamic">
+ <function name="DrawElementsInstancedBaseVertex" es2="3.2" exec="dynamic" marshal="draw">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
es2 CDATA "none"
deprecated CDATA "none"
exec NMTOKEN #IMPLIED
- desktop (true | false) "true">
+ desktop (true | false) "true"
+ marshal NMTOKEN #IMPLIED>
<!ATTLIST size name NMTOKEN #REQUIRED
count NMTOKEN #IMPLIED
mode (get | set) "set">
offset data should be padded to the next even number of dimensions.
For example, this will insert an empty "height" field after the
"width" field in the protocol for TexImage1D.
+ marshal - One of "sync", "async", "draw", or "custom", defaulting to
+ async unless one of the arguments is something we know we can't
+ codegen for. If "sync", we finish any queued glthread work and call
+ the Mesa implementation directly. If "async", we queue the function
+ call to be performed by glthread. If "custom", the prototype will be
+ generated but a custom implementation will be present in marshal.c.
+ If "draw", it will follow the "async" rules except that "indices" are
+ ignored (since they may come from a VBO).
glx:
rop - Opcode value for "render" commands
<glx rop="139" handcode="client"/>
</function>
- <function name="Finish" es1="1.0" es2="2.0">
+ <function name="Finish" es1="1.0" es2="2.0" marshal="sync">
<glx sop="108" handcode="true"/>
</function>
- <function name="Flush" es1="1.0" es2="2.0">
+ <!-- TODO: Flush is marshalled synchronously as a temporary hack
+ since we don't yet have a hook into SwapBuffers.
+
+ NOTE: when we remove this hack, we'll still have to handle Flush
+ specially to ensure that it causes all previous commands to get
+ delivered to the server thread.
+ -->
+
+ <function name="Flush" es1="1.0" es2="2.0" marshal="sync">
<glx sop="142" handcode="true"/>
</function>
<glx sop="110" handcode="client"/>
</function>
- <function name="PixelMapfv" deprecated="3.1">
+ <function name="PixelMapfv" deprecated="3.1" marshal="sync">
<param name="map" type="GLenum"/>
<param name="mapsize" type="GLsizei" counter="true"/>
<param name="values" type="const GLfloat *" count="mapsize"/>
<glx rop="168" large="true"/>
</function>
- <function name="PixelMapuiv" deprecated="3.1">
+ <function name="PixelMapuiv" deprecated="3.1" marshal="sync">
<param name="map" type="GLenum"/>
<param name="mapsize" type="GLsizei" counter="true"/>
<param name="values" type="const GLuint *" count="mapsize"/>
<glx rop="169" large="true"/>
</function>
- <function name="PixelMapusv" deprecated="3.1">
+ <function name="PixelMapusv" deprecated="3.1" marshal="sync">
<param name="map" type="GLenum"/>
<param name="mapsize" type="GLsizei" counter="true"/>
<param name="values" type="const GLushort *" count="mapsize"/>
<enum name="CLIENT_VERTEX_ARRAY_BIT" value="0x00000002"/>
<enum name="CLIENT_ALL_ATTRIB_BITS" value="0xFFFFFFFF"/>
- <function name="ArrayElement" deprecated="3.1" exec="dynamic">
+ <function name="ArrayElement" deprecated="3.1" exec="dynamic" marshal="draw">
<param name="i" type="GLint"/>
<glx handcode="true"/>
</function>
<glx handcode="true"/>
</function>
- <function name="DrawArrays" es1="1.0" es2="2.0" exec="dynamic">
+ <function name="DrawArrays" es1="1.0" es2="2.0" exec="dynamic" marshal="draw">
<param name="mode" type="GLenum"/>
<param name="first" type="GLint"/>
<param name="count" type="GLsizei"/>
<glx rop="193" handcode="true"/>
</function>
- <function name="DrawElements" es1="1.0" es2="2.0" exec="dynamic">
+ <function name="DrawElements" es1="1.0" es2="2.0" exec="dynamic" marshal="draw">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
<glx rop="4097"/>
</function>
- <function name="DrawRangeElements" es2="3.0" exec="dynamic">
+ <function name="DrawRangeElements" es2="3.0" exec="dynamic" marshal="draw">
<param name="mode" type="GLenum"/>
<param name="start" type="GLuint"/>
<param name="end" type="GLuint"/>
<glx handcode="true"/>
</function>
- <function name="MultiDrawArrays">
+ <function name="MultiDrawArrays" marshal="draw">
<param name="mode" type="GLenum"/>
<param name="first" type="const GLint *"/>
<param name="count" type="const GLsizei *"/>
<enum name="MAX_TRANSFORM_FEEDBACK_BUFFERS" value="0x8E70"/>
<enum name="MAX_VERTEX_STREAMS" value="0x8E71"/>
- <function name="DrawTransformFeedbackStream" exec="dynamic">
+ <function name="DrawTransformFeedbackStream" exec="dynamic" marshal="draw">
<param name="mode" type="GLenum"/>
<param name="id" type="GLuint"/>
<param name="stream" type="GLuint"/>
<xi:include href="ARB_base_instance.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<category name="GL_ARB_transform_feedback_instanced" number="109">
- <function name="DrawTransformFeedbackInstanced" exec="dynamic">
+ <function name="DrawTransformFeedbackInstanced" exec="dynamic" marshal="draw">
<param name="mode" type="GLenum"/>
<param name="id" type="GLuint"/>
<param name="primcount" type="GLsizei"/>
</function>
- <function name="DrawTransformFeedbackStreamInstanced" exec="dynamic">
+ <function name="DrawTransformFeedbackStreamInstanced" exec="dynamic" marshal="draw">
<param name="mode" type="GLenum"/>
<param name="id" type="GLuint"/>
<param name="stream" type="GLuint"/>
<param name="primcount" type="GLsizei"/>
</function>
- <function name="MultiDrawElementsEXT" es1="1.0" es2="2.0" exec="dynamic">
+ <function name="MultiDrawElementsEXT" es1="1.0" es2="2.0" exec="dynamic" marshal="draw">
<param name="mode" type="GLenum"/>
<param name="count" type="const GLsizei *"/>
<param name="type" type="GLenum"/>
</category>
<category name="GL_IBM_multimode_draw_arrays" number="200">
- <function name="MultiModeDrawArraysIBM">
+ <function name="MultiModeDrawArraysIBM" marshal="draw">
<param name="mode" type="const GLenum *"/>
<param name="first" type="const GLint *"/>
<param name="count" type="const GLsizei *"/>
<glx handcode="true" ignore="true"/>
</function>
- <function name="MultiModeDrawElementsIBM">
+ <function name="MultiModeDrawElementsIBM" marshal="draw">
<param name="mode" type="const GLenum *"/>
<param name="count" type="const GLsizei *"/>
<param name="type" type="GLenum"/>