mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 21:50:12 +01:00
GLX: Fix protocol for glTexSubImage#D
The TexSubImage commands do not have the "NULL image" flag that was introduced with glTexImage3D. However, there is a CARD32 pad element where that flag would be. Removing the img_null_flag causes the flag to be removed from the protocol. This changes the protocol and breaks everything. In order to prevent needing to hand-code all of the TexSubImage functions, a new attribute was added to the param element. This new attribute, called "padding," is a boolean flag that selects whether or not the parameter is a real parameter (default / false) or is protocol padding (true) that does not appear in the function's parameter list. This change resulted in a number of changes to other Python scripts. In almost all cases parameters with the is_padding flag set should not be emitted. This patch only changes the the XML, the DTD, and the generator scripts. It does NOT include the resulting changes to the generated code. Generated code in the X server is also changed by the script / XML changes in this patch. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
8be02fc8c6
commit
0f73302d24
8 changed files with 39 additions and 6 deletions
|
|
@ -174,6 +174,9 @@ class PrintGlExtensionGlue(gl_XML.gl_print_base):
|
|||
|
||||
parameter_signature = ''
|
||||
for p in f.parameterIterator():
|
||||
if p.is_padding:
|
||||
continue
|
||||
|
||||
# FIXME: This is a *really* ugly hack. :(
|
||||
|
||||
tn = p.type_expr.get_base_type_node()
|
||||
|
|
|
|||
|
|
@ -225,6 +225,8 @@ class PrintGlxDispatchFunctions(glX_proto_common.glx_print_proto):
|
|||
list = []
|
||||
|
||||
for param in f.parameterIterator():
|
||||
if param.is_padding:
|
||||
continue
|
||||
|
||||
if param.is_counter or param.is_image() or param.is_output or param.name in f.count_parameter_list or len(param.count_parameter_list):
|
||||
location = param.name
|
||||
|
|
|
|||
|
|
@ -333,7 +333,7 @@ const GLuint __glXDefaultPixelStore[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 1 };
|
|||
if image.img_pad_dimensions:
|
||||
do_it = 1
|
||||
break
|
||||
|
||||
|
||||
|
||||
if do_it:
|
||||
[h, n] = hash_pixel_function(func)
|
||||
|
|
@ -422,7 +422,10 @@ generic_%u_byte( GLint rop, const void * ptr )
|
|||
else:
|
||||
src_ptr = "&" + p.name
|
||||
|
||||
if not extra_offset:
|
||||
if p.is_padding:
|
||||
print '(void) memset((void *)(%s + %u), 0, %s);' \
|
||||
% (pc, p.offset + adjust, p.size_string() )
|
||||
elif not extra_offset:
|
||||
print '(void) memcpy((void *)(%s + %u), (void *)(%s), %s);' \
|
||||
% (pc, p.offset + adjust, src_ptr, p.size_string() )
|
||||
else:
|
||||
|
|
@ -472,6 +475,10 @@ generic_%u_byte( GLint rop, const void * ptr )
|
|||
else:
|
||||
dim_str = str(dim)
|
||||
|
||||
if param.is_padding:
|
||||
print '(void) memset((void *)(%s + %u), 0, %s);' \
|
||||
% (pc, (param.offset - 4) + adjust, param.size_string() )
|
||||
|
||||
if param.img_null_flag:
|
||||
if large:
|
||||
print '(void) memcpy((void *)(%s + %u), zero, 4);' % (pc, (param.offset - 4) + adjust)
|
||||
|
|
@ -739,6 +746,9 @@ generic_%u_byte( GLint rop, const void * ptr )
|
|||
|
||||
p_string = ""
|
||||
for param in f.parameterIterateGlxSend():
|
||||
if param.is_padding:
|
||||
continue
|
||||
|
||||
p_string += ", " + param.name
|
||||
|
||||
if param.is_image():
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@
|
|||
counter (true | false) "false"
|
||||
count_scale NMTOKEN "1"
|
||||
output (true | false) "false"
|
||||
padding (true | false) "false"
|
||||
img_width NMTOKEN #IMPLIED
|
||||
img_height NMTOKEN #IMPLIED
|
||||
img_depth NMTOKEN #IMPLIED
|
||||
|
|
|
|||
|
|
@ -3267,7 +3267,8 @@
|
|||
<param name="width" type="GLsizei"/>
|
||||
<param name="format" type="GLenum"/>
|
||||
<param name="type" type="GLenum"/>
|
||||
<param name="pixels" type="const GLvoid *" img_width="width" img_xoff="xoffset" img_format="format" img_type="type" img_target="target" img_null_flag="true" img_pad_dimensions="true"/>
|
||||
<param name="UNUSED" type="GLuint" padding="true"/>
|
||||
<param name="pixels" type="const GLvoid *" img_width="width" img_xoff="xoffset" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
|
||||
<glx rop="4099" large="true"/>
|
||||
</function>
|
||||
|
||||
|
|
@ -3280,7 +3281,8 @@
|
|||
<param name="height" type="GLsizei"/>
|
||||
<param name="format" type="GLenum"/>
|
||||
<param name="type" type="GLenum"/>
|
||||
<param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_xoff="xoffset" img_yoff="yoffset" img_format="format" img_type="type" img_target="target" img_null_flag="true" img_pad_dimensions="true"/>
|
||||
<param name="UNUSED" type="GLuint" padding="true"/>
|
||||
<param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_xoff="xoffset" img_yoff="yoffset" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
|
||||
<glx rop="4100" large="true"/>
|
||||
</function>
|
||||
|
||||
|
|
@ -3994,7 +3996,8 @@
|
|||
<param name="depth" type="GLsizei"/>
|
||||
<param name="format" type="GLenum"/>
|
||||
<param name="type" type="GLenum"/>
|
||||
<param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_depth="depth" img_xoff="xoffset" img_yoff="yoffset" img_zoff="zoffset" img_format="format" img_type="type" img_target="target" img_null_flag="true" img_pad_dimensions="true"/>
|
||||
<param name="UNUSED" type="GLuint" padding="true"/>
|
||||
<param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_depth="depth" img_xoff="xoffset" img_yoff="yoffset" img_zoff="zoffset" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
|
||||
<glx rop="4115" large="true"/>
|
||||
</function>
|
||||
|
||||
|
|
@ -8061,6 +8064,7 @@
|
|||
<param name="depth" type="GLsizei"/>
|
||||
<param name="format" type="GLenum"/>
|
||||
<param name="type" type="GLenum"/>
|
||||
<param name="UNUSED" type="GLuint" padding="true"/>
|
||||
<param name="pixels" type="const GLvoid *"/>
|
||||
</function>
|
||||
</category>
|
||||
|
|
@ -8092,6 +8096,7 @@
|
|||
<param name="width" type="GLsizei"/>
|
||||
<param name="format" type="GLenum"/>
|
||||
<param name="type" type="GLenum"/>
|
||||
<param name="UNUSED" type="GLuint" padding="true"/>
|
||||
<param name="pixels" type="const GLvoid *"/>
|
||||
</function>
|
||||
|
||||
|
|
@ -8104,6 +8109,7 @@
|
|||
<param name="height" type="GLsizei"/>
|
||||
<param name="format" type="GLenum"/>
|
||||
<param name="type" type="GLenum"/>
|
||||
<param name="UNUSED" type="GLuint" padding="true"/>
|
||||
<param name="pixels" type="const GLvoid *"/>
|
||||
</function>
|
||||
</category>
|
||||
|
|
@ -8627,7 +8633,8 @@
|
|||
<param name="size4d" type="GLsizei"/>
|
||||
<param name="format" type="GLenum"/>
|
||||
<param name="type" type="GLenum"/>
|
||||
<param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_depth="depth" img_extent="size4d" img_xoff="xoffset" img_yoff="yoffset" img_zoff="zoffset" img_woff="woffset" img_format="format" img_type="type" img_target="target" img_null_flag="true" img_pad_dimensions="true"/>
|
||||
<param name="UNUSED" type="GLuint" padding="true"/>
|
||||
<param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_depth="depth" img_extent="size4d" img_xoff="xoffset" img_yoff="yoffset" img_zoff="zoffset" img_woff="woffset" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
|
||||
<glx rop="2058" ignore="true"/>
|
||||
</function>
|
||||
</category>
|
||||
|
|
|
|||
|
|
@ -309,6 +309,9 @@ def create_parameter_string(parameters, include_names):
|
|||
|
||||
list = []
|
||||
for p in parameters:
|
||||
if p.is_padding:
|
||||
continue
|
||||
|
||||
if include_names:
|
||||
list.append( p.string() )
|
||||
else:
|
||||
|
|
@ -463,6 +466,7 @@ class gl_parameter:
|
|||
self.img_null_flag = is_attr_true( element, 'img_null_flag' )
|
||||
self.img_send_null = is_attr_true( element, 'img_send_null' )
|
||||
|
||||
self.is_padding = is_attr_true( element, 'padding' )
|
||||
return
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -63,6 +63,9 @@ class PrintGlOffsets(gl_XML.gl_print_base):
|
|||
n = f.static_name(name)
|
||||
|
||||
for p in f.parameterIterator():
|
||||
if p.is_padding:
|
||||
continue
|
||||
|
||||
if p.is_pointer():
|
||||
cast = "(const void *) "
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -44,6 +44,9 @@ class PrintGenericStubs(gl_XML.gl_print_base):
|
|||
def get_stack_size(self, f):
|
||||
size = 0
|
||||
for p in f.parameterIterator():
|
||||
if p.is_padding:
|
||||
continue
|
||||
|
||||
size += p.get_stack_size()
|
||||
|
||||
return size
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue