From 59e96bc513be3938e2d6dc4357e4d38fa5481f6a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Wed, 19 Feb 2020 20:28:01 -0500 Subject: [PATCH] glthread: add support for TexParameteri and SamplerParameteri functions It's straightfoward except that I had to hack the python scripts to add "marshal_count", which behaves just like "count" except that "variable_param" is ignored. ("variable_param" changes the behavior of "count", which I don't want) Reviewed-by: Timothy Arceri Part-of: --- .../glapi/gen/ARB_direct_state_access.xml | 8 ++-- src/mapi/glapi/gen/ARB_sampler_objects.xml | 8 ++-- .../glapi/gen/EXT_direct_state_access.xml | 16 ++++---- src/mapi/glapi/gen/GL3x.xml | 4 +- src/mapi/glapi/gen/OES_fixed_point.xml | 2 +- src/mapi/glapi/gen/gl_API.dtd | 3 ++ src/mapi/glapi/gen/gl_API.xml | 6 ++- src/mapi/glapi/gen/gl_XML.py | 11 ++++-- src/mapi/glapi/gen/gl_and_es_API.xml | 3 +- src/mapi/glapi/gen/gl_marshal.py | 10 ++--- src/mapi/glapi/gen/marshal_XML.py | 4 +- src/mesa/main/marshal.h | 38 +++++++++++++++++++ 12 files changed, 80 insertions(+), 33 deletions(-) diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml index 42ed70a7633..c652a412aa7 100644 --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml @@ -487,7 +487,7 @@ - + @@ -499,19 +499,19 @@ - + - + - + diff --git a/src/mapi/glapi/gen/ARB_sampler_objects.xml b/src/mapi/glapi/gen/ARB_sampler_objects.xml index b8fdd125e24..1e628124c7f 100644 --- a/src/mapi/glapi/gen/ARB_sampler_objects.xml +++ b/src/mapi/glapi/gen/ARB_sampler_objects.xml @@ -42,25 +42,25 @@ - + - + - + - + diff --git a/src/mapi/glapi/gen/EXT_direct_state_access.xml b/src/mapi/glapi/gen/EXT_direct_state_access.xml index 0d29282d293..b1cda780361 100644 --- a/src/mapi/glapi/gen/EXT_direct_state_access.xml +++ b/src/mapi/glapi/gen/EXT_direct_state_access.xml @@ -151,7 +151,7 @@ - + @@ -165,7 +165,7 @@ - + @@ -402,7 +402,7 @@ - + @@ -416,7 +416,7 @@ - + @@ -1288,14 +1288,14 @@ - + - + @@ -1316,14 +1316,14 @@ - + - + diff --git a/src/mapi/glapi/gen/GL3x.xml b/src/mapi/glapi/gen/GL3x.xml index 5608353cb28..4bf7c132560 100644 --- a/src/mapi/glapi/gen/GL3x.xml +++ b/src/mapi/glapi/gen/GL3x.xml @@ -451,13 +451,13 @@ - + - + diff --git a/src/mapi/glapi/gen/OES_fixed_point.xml b/src/mapi/glapi/gen/OES_fixed_point.xml index edd0acdba6f..5b4c48a7824 100644 --- a/src/mapi/glapi/gen/OES_fixed_point.xml +++ b/src/mapi/glapi/gen/OES_fixed_point.xml @@ -234,7 +234,7 @@ - + diff --git a/src/mapi/glapi/gen/gl_API.dtd b/src/mapi/glapi/gen/gl_API.dtd index b464250777c..1f10e1e012d 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_count CDATA #IMPLIED> @@ -134,6 +135,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_count - same as count, but variable_param is ignored. Used by + glthread. glx: rop - Opcode value for "render" commands diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml index a33e82ad53d..151148060b7 100644 --- a/src/mapi/glapi/gen/gl_API.xml +++ b/src/mapi/glapi/gen/gl_API.xml @@ -2131,7 +2131,8 @@ - + @@ -2145,7 +2146,8 @@ - + diff --git a/src/mapi/glapi/gen/gl_XML.py b/src/mapi/glapi/gen/gl_XML.py index 5b5f6e23b0a..7f1edbde9dd 100644 --- a/src/mapi/glapi/gen/gl_XML.py +++ b/src/mapi/glapi/gen/gl_XML.py @@ -431,6 +431,7 @@ class gl_parameter(object): self.count = 0 self.counter = c + self.marshal_count = element.get("marshal_count") self.count_scale = int(element.get( "count_scale", "1" )) elements = (count * self.count_scale) @@ -493,7 +494,7 @@ class gl_parameter(object): def is_variable_length(self): - return len(self.count_parameter_list) or self.counter + return len(self.count_parameter_list) or self.counter or self.marshal_count def is_64_bit(self): @@ -564,7 +565,7 @@ class gl_parameter(object): return c - def size_string(self, use_parens = 1): + def size_string(self, use_parens = 1, marshal = 0): base_size_str = "" count = self.get_element_count() @@ -573,10 +574,12 @@ class gl_parameter(object): base_size_str += "sizeof(%s)" % ( self.get_base_type_string() ) - if self.counter or self.count_parameter_list: + if self.counter or self.count_parameter_list or (self.marshal_count and marshal): list = [ "compsize" ] - if self.counter and self.count_parameter_list: + if self.marshal_count and marshal: + list = [ self.marshal_count ] + elif self.counter and self.count_parameter_list: list.append( self.counter ) elif self.counter: list = [ self.counter ] diff --git a/src/mapi/glapi/gen/gl_and_es_API.xml b/src/mapi/glapi/gen/gl_and_es_API.xml index fc152841028..2f47edf6914 100644 --- a/src/mapi/glapi/gen/gl_and_es_API.xml +++ b/src/mapi/glapi/gen/gl_and_es_API.xml @@ -259,7 +259,8 @@ - + diff --git a/src/mapi/glapi/gen/gl_marshal.py b/src/mapi/glapi/gen/gl_marshal.py index 476f54d6aa6..a421c95dcfe 100644 --- a/src/mapi/glapi/gen/gl_marshal.py +++ b/src/mapi/glapi/gen/gl_marshal.py @@ -156,12 +156,12 @@ class PrintCode(gl_XML.gl_print_base): if p.count_scale != 1: out(('/* Next {0} bytes are ' '{1} {2}[{3}][{4}] */').format( - p.size_string(), p.get_base_type_string(), + p.size_string(marshal = 1), p.get_base_type_string(), p.name, p.counter, p.count_scale)) else: out(('/* Next {0} bytes are ' '{1} {2}[{3}] */').format( - p.size_string(), p.get_base_type_string(), + p.size_string(marshal = 1), p.get_base_type_string(), p.name, p.counter)) out('};') @@ -203,9 +203,9 @@ class PrintCode(gl_XML.gl_print_base): if i < len(func.variable_params): out('else') with indent(): - out('variable_data += {0};'.format(p.size_string(False))) + out('variable_data += {0};'.format(p.size_string(False, marshal = 1))) elif i < len(func.variable_params): - out('variable_data += {0};'.format(p.size_string(False))) + out('variable_data += {0};'.format(p.size_string(False, marshal = 1))) i += 1 self.print_sync_call(func) @@ -240,7 +240,7 @@ class PrintCode(gl_XML.gl_print_base): with indent(): out('GET_CURRENT_CONTEXT(ctx);') for p in func.variable_params: - out('int {0}_size = {1};'.format(p.name, p.size_string())) + out('int {0}_size = {1};'.format(p.name, p.size_string(marshal = 1))) struct = 'struct marshal_cmd_{0}'.format(func.name) size_terms = ['sizeof({0})'.format(struct)] diff --git a/src/mapi/glapi/gen/marshal_XML.py b/src/mapi/glapi/gen/marshal_XML.py index 5b682c51965..f6103b9e8fe 100644 --- a/src/mapi/glapi/gen/marshal_XML.py +++ b/src/mapi/glapi/gen/marshal_XML.py @@ -77,11 +77,11 @@ 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 or p.marshal_count) and not (self.marshal == 'draw' and (p.name == 'indices' or p.name == 'indirect'))): return 'sync' - if p.count_parameter_list: + if p.count_parameter_list and not p.marshal_count: # Parameter size is determined by enums; haven't # written logic to handle this yet. TODO: fix. return 'sync' diff --git a/src/mesa/main/marshal.h b/src/mesa/main/marshal.h index 676050319f1..15551668fc6 100644 --- a/src/mesa/main/marshal.h +++ b/src/mesa/main/marshal.h @@ -261,4 +261,42 @@ _mesa_buffer_enum_to_count(GLenum buffer) } } +static inline unsigned +_mesa_tex_param_enum_to_count(GLenum pname) +{ + switch (pname) { + case GL_TEXTURE_MIN_FILTER: + case GL_TEXTURE_MAG_FILTER: + case GL_TEXTURE_WRAP_S: + case GL_TEXTURE_WRAP_T: + case GL_TEXTURE_WRAP_R: + case GL_TEXTURE_BASE_LEVEL: + case GL_TEXTURE_MAX_LEVEL: + case GL_GENERATE_MIPMAP_SGIS: + case GL_TEXTURE_COMPARE_MODE_ARB: + case GL_TEXTURE_COMPARE_FUNC_ARB: + case GL_DEPTH_TEXTURE_MODE_ARB: + case GL_DEPTH_STENCIL_TEXTURE_MODE: + case GL_TEXTURE_SRGB_DECODE_EXT: + case GL_TEXTURE_CUBE_MAP_SEAMLESS: + case GL_TEXTURE_SWIZZLE_R: + case GL_TEXTURE_SWIZZLE_G: + case GL_TEXTURE_SWIZZLE_B: + case GL_TEXTURE_SWIZZLE_A: + case GL_TEXTURE_MIN_LOD: + case GL_TEXTURE_MAX_LOD: + case GL_TEXTURE_PRIORITY: + case GL_TEXTURE_MAX_ANISOTROPY_EXT: + case GL_TEXTURE_LOD_BIAS: + case GL_TEXTURE_TILING_EXT: + return 1; + case GL_TEXTURE_CROP_RECT_OES: + case GL_TEXTURE_SWIZZLE_RGBA: + case GL_TEXTURE_BORDER_COLOR: + return 4; + default: + return 0; + } +} + #endif /* MARSHAL_H */ -- 2.30.2