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:
@@ -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">
|
||||
|
@@ -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">
|
||||
|
@@ -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">
|
||||
|
@@ -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">
|
||||
|
@@ -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 -->
|
||||
|
@@ -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
|
||||
|
@@ -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>
|
||||
|
||||
|
@@ -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 ]
|
||||
|
@@ -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 -->
|
||||
|
@@ -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)]
|
||||
|
@@ -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'
|
||||
|
@@ -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 */
|
||||
|
Reference in New Issue
Block a user