summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2013-02-27 14:28:16 -0800
committerTimothy Arceri <[email protected]>2017-03-16 14:14:19 +1100
commit43d4f7a227eaa01ea4be32e598682abc912e8e83 (patch)
treef767bfddcd75d8adeacb83ce680b61ccd241de7c
parentb18755a457996cc4e7d9ca9d6beea9314de2d005 (diff)
mesa: Add support for asynchronous glDraw* on GL core.
Acked-by: Timothy Arceri <[email protected]> Acked-by: Marek Olšák <[email protected]> Tested-by: Dieter Nützel <[email protected]> Tested-by: Mike Lothian <[email protected]>
-rw-r--r--src/mapi/glapi/gen/gl_marshal.py4
-rw-r--r--src/mapi/glapi/gen/marshal_XML.py9
2 files changed, 6 insertions, 7 deletions
diff --git a/src/mapi/glapi/gen/gl_marshal.py b/src/mapi/glapi/gen/gl_marshal.py
index 3b9868f9a1f..1a633435001 100644
--- a/src/mapi/glapi/gen/gl_marshal.py
+++ b/src/mapi/glapi/gen/gl_marshal.py
@@ -244,6 +244,10 @@ class PrintCode(gl_XML.gl_print_base):
self.print_sync_dispatch(func)
out('}')
+ if func.marshal == 'draw':
+ out('/* We relied on all vertex and index data being in VBOs */')
+ out('assert(ctx->API == API_OPENGL_CORE);')
+
out('}')
def print_async_body(self, func):
diff --git a/src/mapi/glapi/gen/marshal_XML.py b/src/mapi/glapi/gen/marshal_XML.py
index 9d5688decac..d56e4dda4af 100644
--- a/src/mapi/glapi/gen/marshal_XML.py
+++ b/src/mapi/glapi/gen/marshal_XML.py
@@ -64,12 +64,7 @@ class marshal_function(gl_XML.gl_function):
client and server threads."""
# If a "marshal" attribute was present, that overrides any
# determination that would otherwise be made by this function.
- if self.marshal != None:
- if self.marshal == 'draw':
- # TODO: as a temporary measure, do draw functions
- # synchronously, since they may access client memory
- # via vertex attribute pointers.
- return 'sync'
+ if self.marshal not in (None, 'draw'):
return self.marshal
if self.exec_flavor == 'skip':
@@ -82,7 +77,7 @@ class marshal_function(gl_XML.gl_function):
for p in self.parameters:
if p.is_output:
return 'sync'
- if p.is_pointer() and not (p.count or p.counter):
+ if p.is_pointer() and not (p.count or p.counter) and not (self.marshal == 'draw' and p.name == 'indices'):
return 'sync'
if p.count_parameter_list:
# Parameter size is determined by enums; haven't