diff options
author | Marek Olšák <[email protected]> | 2020-02-20 20:40:31 -0500 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-03-06 01:06:14 +0000 |
commit | 85276e2c1b8dfdf090a656a7fa1b5613d373515e (patch) | |
tree | dcf379473ce6106848a3090e60c1466593b38c3f /src/mapi | |
parent | 28a2ad7ddf76702a5de56a7bc0d8754b7dbd66a0 (diff) |
glthread: sync instead of disabling glthread for non-VBO pointers
Reviewed-by: Timothy Arceri <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3948>
Diffstat (limited to 'src/mapi')
-rw-r--r-- | src/mapi/glapi/gen/ARB_base_instance.xml | 6 | ||||
-rw-r--r-- | src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml | 8 | ||||
-rw-r--r-- | src/mapi/glapi/gen/ARB_draw_indirect.xml | 8 | ||||
-rw-r--r-- | src/mapi/glapi/gen/ARB_draw_instanced.xml | 4 | ||||
-rw-r--r-- | src/mapi/glapi/gen/ARB_indirect_parameters.xml | 4 | ||||
-rw-r--r-- | src/mapi/glapi/gen/gl_API.dtd | 3 | ||||
-rw-r--r-- | src/mapi/glapi/gen/gl_API.xml | 14 | ||||
-rw-r--r-- | src/mapi/glapi/gen/gl_marshal.py | 8 | ||||
-rw-r--r-- | src/mapi/glapi/gen/marshal_XML.py | 1 |
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): |