diff options
-rw-r--r-- | src/mapi/glapi/gen/gl_API.dtd | 7 | ||||
-rw-r--r-- | src/mapi/glapi/gen/gl_marshal.py | 8 | ||||
-rw-r--r-- | src/mapi/glapi/gen/marshal_XML.py | 1 |
3 files changed, 15 insertions, 1 deletions
diff --git a/src/mapi/glapi/gen/gl_API.dtd b/src/mapi/glapi/gen/gl_API.dtd index 133bc042aa9..dc4a199bb99 100644 --- a/src/mapi/glapi/gen/gl_API.dtd +++ b/src/mapi/glapi/gen/gl_API.dtd @@ -39,7 +39,8 @@ deprecated CDATA "none" exec NMTOKEN #IMPLIED desktop (true | false) "true" - marshal NMTOKEN #IMPLIED> + marshal NMTOKEN #IMPLIED + marshal_fail CDATA #IMPLIED> <!ATTLIST size name NMTOKEN #REQUIRED count NMTOKEN #IMPLIED mode (get | set) "set"> @@ -129,6 +130,10 @@ param: 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). + marshal_fail - an expression that, if it evaluates true, causes glthread + to finish and tear down before the Mesa implementation is called + directly. Used to disable glthread for GL compatibility interactions + that we don't want to track state for. glx: rop - Opcode value for "render" commands diff --git a/src/mapi/glapi/gen/gl_marshal.py b/src/mapi/glapi/gen/gl_marshal.py index 1a633435001..a50d773e27e 100644 --- a/src/mapi/glapi/gen/gl_marshal.py +++ b/src/mapi/glapi/gen/gl_marshal.py @@ -236,6 +236,14 @@ class PrintCode(gl_XML.gl_print_base): self.validate_count_or_return(func) + if func.marshal_fail: + out('if ({0}) {{'.format(func.marshal_fail)) + with indent(): + out('_mesa_glthread_destroy(ctx);') + self.print_sync_dispatch(func) + out('return;') + out('}') + out('if (cmd_size <= MARSHAL_MAX_CMD_SIZE) {') with indent(): self.print_async_dispatch(func) diff --git a/src/mapi/glapi/gen/marshal_XML.py b/src/mapi/glapi/gen/marshal_XML.py index d56e4dda4af..80f7f542e43 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') def marshal_flavor(self): """Find out how this function should be marshalled between |