mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 04:10:09 +01:00
glsl: add field to track if xfb_buffer is an explicit or implicit value
Since any of the xfb_* qualifiers trigger the shader to be in transform feedback mode we need an extra field to track if the xfb_buffer on interface members was set explicitly since xfb_buffer will always have a default value. Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
733f1b2a55
commit
04d2f770c8
4 changed files with 17 additions and 0 deletions
|
|
@ -6955,6 +6955,8 @@ ast_interface_block::hir(exec_list *instructions,
|
|||
earlier_per_vertex->fields.structure[j].patch;
|
||||
fields[i].precision =
|
||||
earlier_per_vertex->fields.structure[j].precision;
|
||||
fields[i].explicit_xfb_buffer =
|
||||
earlier_per_vertex->fields.structure[j].explicit_xfb_buffer;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -334,6 +334,7 @@ per_vertex_accumulator::add_field(int slot, const glsl_type *type,
|
|||
this->fields[this->num_fields].image_coherent = 0;
|
||||
this->fields[this->num_fields].image_volatile = 0;
|
||||
this->fields[this->num_fields].image_restrict = 0;
|
||||
this->fields[this->num_fields].explicit_xfb_buffer = 0;
|
||||
this->fields[this->num_fields].xfb_buffer = -1;
|
||||
this->fields[this->num_fields].xfb_stride = -1;
|
||||
this->num_fields++;
|
||||
|
|
|
|||
|
|
@ -132,6 +132,8 @@ glsl_type::glsl_type(const glsl_struct_field *fields, unsigned num_fields,
|
|||
this->fields.structure[i].image_volatile = fields[i].image_volatile;
|
||||
this->fields.structure[i].image_restrict = fields[i].image_restrict;
|
||||
this->fields.structure[i].precision = fields[i].precision;
|
||||
this->fields.structure[i].explicit_xfb_buffer =
|
||||
fields[i].explicit_xfb_buffer;
|
||||
this->fields.structure[i].xfb_buffer = fields[i].xfb_buffer;
|
||||
this->fields.structure[i].xfb_stride = fields[i].xfb_stride;
|
||||
}
|
||||
|
|
@ -174,6 +176,8 @@ glsl_type::glsl_type(const glsl_struct_field *fields, unsigned num_fields,
|
|||
this->fields.structure[i].image_volatile = fields[i].image_volatile;
|
||||
this->fields.structure[i].image_restrict = fields[i].image_restrict;
|
||||
this->fields.structure[i].precision = fields[i].precision;
|
||||
this->fields.structure[i].explicit_xfb_buffer =
|
||||
fields[i].explicit_xfb_buffer;
|
||||
this->fields.structure[i].xfb_buffer = fields[i].xfb_buffer;
|
||||
this->fields.structure[i].xfb_stride = fields[i].xfb_stride;
|
||||
}
|
||||
|
|
@ -919,6 +923,9 @@ glsl_type::record_compare(const glsl_type *b) const
|
|||
if (this->fields.structure[i].precision
|
||||
!= b->fields.structure[i].precision)
|
||||
return false;
|
||||
if (this->fields.structure[i].explicit_xfb_buffer
|
||||
!= b->fields.structure[i].explicit_xfb_buffer)
|
||||
return false;
|
||||
if (this->fields.structure[i].xfb_buffer
|
||||
!= b->fields.structure[i].xfb_buffer)
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -901,6 +901,13 @@ struct glsl_struct_field {
|
|||
unsigned image_volatile:1;
|
||||
unsigned image_restrict:1;
|
||||
|
||||
/**
|
||||
* Any of the xfb_* qualifiers trigger the shader to be in transform
|
||||
* feedback mode so we need to keep track of whether the buffer was
|
||||
* explicitly set or if its just been assigned the default global value.
|
||||
*/
|
||||
unsigned explicit_xfb_buffer:1;
|
||||
|
||||
#ifdef __cplusplus
|
||||
glsl_struct_field(const struct glsl_type *_type, const char *_name)
|
||||
: type(_type), name(_name), location(-1), interpolation(0), centroid(0),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue