summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2020-02-20 20:40:31 -0500
committerMarge Bot <eric+marge@anholt.net>2020-03-06 01:06:14 +0000
commit85276e2c1b8dfdf090a656a7fa1b5613d373515e (patch)
treedcf379473ce6106848a3090e60c1466593b38c3f
parent28a2ad7ddf76702a5de56a7bc0d8754b7dbd66a0 (diff)
glthread: sync instead of disabling glthread for non-VBO pointers
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3948>
-rw-r--r--src/mapi/glapi/gen/ARB_base_instance.xml6
-rw-r--r--src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml8
-rw-r--r--src/mapi/glapi/gen/ARB_draw_indirect.xml8
-rw-r--r--src/mapi/glapi/gen/ARB_draw_instanced.xml4
-rw-r--r--src/mapi/glapi/gen/ARB_indirect_parameters.xml4
-rw-r--r--src/mapi/glapi/gen/gl_API.dtd3
-rw-r--r--src/mapi/glapi/gen/gl_API.xml14
-rw-r--r--src/mapi/glapi/gen/gl_marshal.py8
-rw-r--r--src/mapi/glapi/gen/marshal_XML.py1
9 files changed, 34 insertions, 22 deletions
diff --git a/src/mapi/glapi/gen/ARB_base_instance.xml b/src/mapi/glapi/gen/ARB_base_instance.xml
index 22c57167fd5..2846e913c06 100644
--- a/src/mapi/glapi/gen/ARB_base_instance.xml
+++ b/src/mapi/glapi/gen/ARB_base_instance.xml
@@ -9,7 +9,7 @@
<category name="GL_ARB_base_instance" number="107">
<function name="DrawArraysInstancedBaseInstance" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_arrays(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_arrays(ctx)">
<param name="mode" type="GLenum"/>
<param name="first" type="GLint"/>
<param name="count" type="GLsizei"/>
@@ -18,7 +18,7 @@
</function>
<function name="DrawElementsInstancedBaseInstance" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
@@ -28,7 +28,7 @@
</function>
<function name="DrawElementsInstancedBaseVertexBaseInstance" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
diff --git a/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml b/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml
index 9f18cacd1e6..28d47839433 100644
--- a/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml
+++ b/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml
@@ -9,7 +9,7 @@
<category name="GL_ARB_draw_elements_base_vertex" number="62">
<function name="DrawElementsBaseVertex" es2="3.2" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
@@ -18,7 +18,7 @@
</function>
<function name="DrawRangeElementsBaseVertex" es2="3.2" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
<param name="mode" type="GLenum"/>
<param name="start" type="GLuint"/>
<param name="end" type="GLuint"/>
@@ -29,7 +29,7 @@
</function>
<function name="MultiDrawElementsBaseVertex" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
<param name="mode" type="GLenum"/>
<param name="count" type="const GLsizei *" count="primcount"/>
<param name="type" type="GLenum"/>
@@ -39,7 +39,7 @@
</function>
<function name="DrawElementsInstancedBaseVertex" es2="3.2" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
diff --git a/src/mapi/glapi/gen/ARB_draw_indirect.xml b/src/mapi/glapi/gen/ARB_draw_indirect.xml
index c17b4337baa..af342eb8683 100644
--- a/src/mapi/glapi/gen/ARB_draw_indirect.xml
+++ b/src/mapi/glapi/gen/ARB_draw_indirect.xml
@@ -10,14 +10,14 @@
<function name="DrawArraysIndirect" exec="dynamic" es2="3.1"
marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_arrays_indirect(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_arrays_indirect(ctx)">
<param name="mode" type="GLenum"/>
<param name="indirect" type="const GLvoid *"/>
</function>
<function name="DrawElementsIndirect" exec="dynamic" es2="3.1"
marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_elements_indirect(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_elements_indirect(ctx)">
<param name="mode" type="GLenum"/>
<param name="type" type="GLenum"/>
<param name="indirect" type="const GLvoid *"/>
@@ -29,7 +29,7 @@
<category name="GL_ARB_multi_draw_indirect" number="133">
<function name="MultiDrawArraysIndirect" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_arrays_indirect(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_arrays_indirect(ctx)">
<param name="mode" type="GLenum"/>
<param name="indirect" type="const GLvoid *"/>
<param name="primcount" type="GLsizei"/>
@@ -37,7 +37,7 @@
</function>
<function name="MultiDrawElementsIndirect" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_elements_indirect(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_elements_indirect(ctx)">
<param name="mode" type="GLenum"/>
<param name="type" type="GLenum"/>
<param name="indirect" type="const GLvoid *"/>
diff --git a/src/mapi/glapi/gen/ARB_draw_instanced.xml b/src/mapi/glapi/gen/ARB_draw_instanced.xml
index e450f04a8e1..bf24fc5709f 100644
--- a/src/mapi/glapi/gen/ARB_draw_instanced.xml
+++ b/src/mapi/glapi/gen/ARB_draw_instanced.xml
@@ -9,7 +9,7 @@
<category name="GL_ARB_draw_instanced" number="44">
<function name="DrawArraysInstancedARB" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_arrays(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_arrays(ctx)">
<param name="mode" type="GLenum"/>
<param name="first" type="GLint"/>
<param name="count" type="GLsizei"/>
@@ -17,7 +17,7 @@
</function>
<function name="DrawElementsInstancedARB" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
diff --git a/src/mapi/glapi/gen/ARB_indirect_parameters.xml b/src/mapi/glapi/gen/ARB_indirect_parameters.xml
index 3938bd643bb..89d11746654 100644
--- a/src/mapi/glapi/gen/ARB_indirect_parameters.xml
+++ b/src/mapi/glapi/gen/ARB_indirect_parameters.xml
@@ -9,7 +9,7 @@
<enum name="PARAMETER_BUFFER_BINDING_ARB" value="0x80EF"/>
<function name="MultiDrawArraysIndirectCountARB" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_arrays(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_arrays(ctx)">
<param name="mode" type="GLenum"/>
<param name="indirect" type="GLintptr"/>
<param name="drawcount" type="GLintptr"/>
@@ -19,7 +19,7 @@
<!-- Use "...vbo_draw_arrays", because indices always come from a buffer object. -->
<function name="MultiDrawElementsIndirectCountARB" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_arrays(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_arrays(ctx)">
<param name="mode" type="GLenum"/>
<param name="type" type="GLenum"/>
<param name="indirect" type="GLintptr"/>
diff --git a/src/mapi/glapi/gen/gl_API.dtd b/src/mapi/glapi/gen/gl_API.dtd
index 787fcbf2675..96d70982c83 100644
--- a/src/mapi/glapi/gen/gl_API.dtd
+++ b/src/mapi/glapi/gen/gl_API.dtd
@@ -41,6 +41,7 @@
desktop (true | false) "true"
marshal NMTOKEN #IMPLIED
marshal_fail CDATA #IMPLIED>
+ marshal_sync CDATA #IMPLIED>
marshal_count CDATA #IMPLIED>
marshal_call_after CDATA #IMPLIED>
<!ATTLIST size name NMTOKEN #REQUIRED
@@ -136,6 +137,8 @@ param:
to switch back to the Mesa implementation and call it directly. Used
to disable glthread for GL compatibility interactions that we don't
want to track state for.
+ marshal_sync - an expression that, if it evaluates true, causes glthread
+ to sync and execute the call directly.
marshal_count - same as count, but variable_param is ignored. Used by
glthread.
marshal_call_after - insert the string at the end of the marshal function
diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml
index 6de88c6d7fe..fd21297d721 100644
--- a/src/mapi/glapi/gen/gl_API.xml
+++ b/src/mapi/glapi/gen/gl_API.xml
@@ -3180,7 +3180,7 @@
</function>
<function name="DrawArrays" es1="1.0" es2="2.0" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_arrays(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_arrays(ctx)">
<param name="mode" type="GLenum"/>
<param name="first" type="GLint"/>
<param name="count" type="GLsizei"/>
@@ -3188,7 +3188,7 @@
</function>
<function name="DrawElements" es1="1.0" es2="2.0" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
@@ -3756,7 +3756,7 @@
</function>
<function name="DrawRangeElements" es2="3.0" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
<param name="mode" type="GLenum"/>
<param name="start" type="GLuint"/>
<param name="end" type="GLuint"/>
@@ -4756,7 +4756,7 @@
</function>
<function name="MultiDrawArrays" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_arrays(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_arrays(ctx)">
<param name="mode" type="GLenum"/>
<param name="first" type="const GLint *" count="primcount"/>
<param name="count" type="const GLsizei *" count="primcount"/>
@@ -10277,7 +10277,7 @@
</function>
<function name="MultiDrawElementsEXT" es1="1.0" es2="2.0" exec="dynamic" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
<param name="mode" type="GLenum"/>
<param name="count" type="const GLsizei *" count="primcount"/>
<param name="type" type="GLenum"/>
@@ -11392,7 +11392,7 @@
<category name="GL_IBM_multimode_draw_arrays" number="200">
<function name="MultiModeDrawArraysIBM" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_arrays(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_arrays(ctx)">
<param name="mode" type="const GLenum *" count="primcount"/>
<param name="first" type="const GLint *" count="primcount"/>
<param name="count" type="const GLsizei *" count="primcount"/>
@@ -11402,7 +11402,7 @@
</function>
<function name="MultiModeDrawElementsIBM" marshal="draw"
- marshal_fail="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
+ marshal_sync="_mesa_glthread_is_non_vbo_draw_elements(ctx)">
<param name="mode" type="const GLenum *" count="primcount"/>
<param name="count" type="const GLsizei *" count="primcount"/>
<param name="type" type="GLenum"/>
diff --git a/src/mapi/glapi/gen/gl_marshal.py b/src/mapi/glapi/gen/gl_marshal.py
index 19deba7b3c1..3147b702c70 100644
--- a/src/mapi/glapi/gen/gl_marshal.py
+++ b/src/mapi/glapi/gen/gl_marshal.py
@@ -270,6 +270,14 @@ class PrintCode(gl_XML.gl_print_base):
out('return;')
out('}')
+ if func.marshal_sync:
+ out('if ({0}) {{'.format(func.marshal_sync))
+ with indent():
+ out('_mesa_glthread_finish_before(ctx, "{0}");'.format(func.name))
+ self.print_sync_dispatch(func)
+ out('return;')
+ out('}')
+
with indent():
self.print_async_dispatch(func)
out('}')
diff --git a/src/mapi/glapi/gen/marshal_XML.py b/src/mapi/glapi/gen/marshal_XML.py
index b673c8535d6..f0be4f8780a 100644
--- a/src/mapi/glapi/gen/marshal_XML.py
+++ b/src/mapi/glapi/gen/marshal_XML.py
@@ -58,6 +58,7 @@ class marshal_function(gl_XML.gl_function):
# Store the "marshal" attribute, if present.
self.marshal = element.get('marshal')
self.marshal_fail = element.get('marshal_fail')
+ self.marshal_sync = element.get('marshal_sync')
self.marshal_call_after = element.get('marshal_call_after')
def marshal_flavor(self):