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 <tarceri@itsqueeze.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3948>
This commit is contained in:
Marek Olšák
2020-02-19 20:28:01 -05:00
committed by Marge Bot
parent 108fdb54c6
commit 59e96bc513
12 changed files with 80 additions and 33 deletions

View File

@@ -487,7 +487,7 @@
<function name="TextureParameterfv">
<param name="texture" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="param" type="const GLfloat *" />
<param name="param" type="const GLfloat *" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="TextureParameteri">
@@ -499,19 +499,19 @@
<function name="TextureParameterIiv">
<param name="texture" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="params" type="const GLint *" />
<param name="params" type="const GLint *" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="TextureParameterIuiv">
<param name="texture" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="params" type="const GLuint *" />
<param name="params" type="const GLuint *" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="TextureParameteriv">
<param name="texture" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="param" type="const GLint *" />
<param name="param" type="const GLint *" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="GenerateTextureMipmap" no_error="true">

View File

@@ -42,25 +42,25 @@
<function name="SamplerParameteriv" es2="3.0">
<param name="sampler" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *"/>
<param name="params" type="const GLint *" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="SamplerParameterfv" es2="3.0">
<param name="sampler" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *"/>
<param name="params" type="const GLfloat *" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="SamplerParameterIiv" es2="3.2">
<param name="sampler" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *"/>
<param name="params" type="const GLint *" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="SamplerParameterIuiv" es2="3.2">
<param name="sampler" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLuint *"/>
<param name="params" type="const GLuint *" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="GetSamplerParameteriv" es2="3.0">

View File

@@ -151,7 +151,7 @@
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
<param name="pname" type="GLenum" />
<param name="params" type="const GLint *" />
<param name="params" type="const GLint *" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="TextureParameterfEXT">
@@ -165,7 +165,7 @@
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
<param name="pname" type="GLenum" />
<param name="params" type="const float *" />
<param name="params" type="const float *" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="TextureImage1DEXT">
@@ -402,7 +402,7 @@
<param name="texunit" type="GLenum" />
<param name="target" type="GLenum" />
<param name="pname" type="GLenum" />
<param name="param" type="const GLint*" />
<param name="param" type="const GLint*" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="MultiTexParameterfEXT">
@@ -416,7 +416,7 @@
<param name="texunit" type="GLenum" />
<param name="target" type="GLenum" />
<param name="pname" type="GLenum" />
<param name="param" type="const GLfloat*" />
<param name="param" type="const GLfloat*" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="GetMultiTexParameterivEXT">
@@ -1288,14 +1288,14 @@
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
<param name="pname" type="GLenum" />
<param name="params" type="const GLint*" />
<param name="params" type="const GLint*" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="TextureParameterIuivEXT">
<param name="texture" type="GLuint" />
<param name="target" type="GLenum" />
<param name="pname" type="GLenum" />
<param name="params" type="const GLuint*" />
<param name="params" type="const GLuint*" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="GetTextureParameterIivEXT">
@@ -1316,14 +1316,14 @@
<param name="texunit" type="GLenum" />
<param name="target" type="GLenum" />
<param name="pname" type="GLenum" />
<param name="params" type="const GLint*" />
<param name="params" type="const GLint*" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="MultiTexParameterIuivEXT">
<param name="texunit" type="GLenum" />
<param name="target" type="GLenum" />
<param name="pname" type="GLenum" />
<param name="params" type="const GLuint*" />
<param name="params" type="const GLuint*" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="GetMultiTexParameterIivEXT">

View File

@@ -451,13 +451,13 @@
<function name="TexParameterIiv" es2="3.2">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *"/>
<param name="params" type="const GLint *" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="TexParameterIuiv" es2="3.2">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLuint *"/>
<param name="params" type="const GLuint *" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<function name="GetTexParameterIiv" es2="3.2">

View File

@@ -234,7 +234,7 @@
<function name="TexParameterxvOES" es1="1.0" alias="TexParameterxv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *"/>
<param name="params" type="const GLfixed *" count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<!-- texgen -->

View File

@@ -41,6 +41,7 @@
desktop (true | false) "true"
marshal NMTOKEN #IMPLIED
marshal_fail CDATA #IMPLIED>
marshal_count CDATA #IMPLIED>
<!ATTLIST size name NMTOKEN #REQUIRED
count NMTOKEN #IMPLIED
mode (get | set) "set">
@@ -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

View File

@@ -2131,7 +2131,8 @@
<function name="TexParameterfv" es1="1.1" es2="2.0">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *" variable_param="pname"/>
<param name="params" type="const GLfloat *" variable_param="pname"
marshal_count="_mesa_tex_param_enum_to_count(pname)"/>
<glx rop="106"/>
</function>
@@ -2145,7 +2146,8 @@
<function name="TexParameteriv" es1="1.1" es2="2.0">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *" variable_param="pname"/>
<param name="params" type="const GLint *" variable_param="pname"
marshal_count="_mesa_tex_param_enum_to_count(pname)"/>
<glx rop="108"/>
</function>

View File

@@ -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 ]

View File

@@ -259,7 +259,8 @@
<function name="TexParameterxv" es1="1.1" desktop="false">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *" variable_param="pname"/>
<param name="params" type="const GLfixed *" variable_param="pname"
marshal_count="_mesa_tex_param_enum_to_count(pname)"/>
</function>
<!-- from GL_OES_single_precision -->

View File

@@ -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)]

View File

@@ -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'

View File

@@ -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 */