glsl: simplify interface block stream qualifier validation
Qualifiers on member variables are redundent all we need to do if check if it matches the stream associated with the block and throw an error if its not. Reviewed-by: Samuel Iglesias Gonsalvez <siglesias@igalia.com> Cc: Emil Velikov <emil.l.velikov@gmail.com>
This commit is contained in:

committed by
Timothy Arceri

parent
3ea3727998
commit
a4a46fe3fa
@@ -5964,8 +5964,19 @@ ast_process_structure_or_interface_block(exec_list *instructions,
|
||||
fields[i].sample = qual->flags.q.sample ? 1 : 0;
|
||||
fields[i].patch = qual->flags.q.patch ? 1 : 0;
|
||||
|
||||
/* Only save explicitly defined streams in block's field */
|
||||
fields[i].stream = qual->flags.q.explicit_stream ? qual->stream : -1;
|
||||
/* From Section 4.4.2.3 (Geometry Outputs) of the GLSL 4.50 spec:
|
||||
*
|
||||
* "A block member may be declared with a stream identifier, but
|
||||
* the specified stream must match the stream associated with the
|
||||
* containing block."
|
||||
*/
|
||||
if (qual->flags.q.explicit_stream &&
|
||||
qual->stream != layout->stream) {
|
||||
_mesa_glsl_error(&loc, state, "stream layout qualifier on "
|
||||
"interface block member `%s' does not match "
|
||||
"the interface block (%d vs %d)",
|
||||
fields[i].name, qual->stream, layout->stream);
|
||||
}
|
||||
|
||||
if (qual->flags.q.row_major || qual->flags.q.column_major) {
|
||||
if (!qual->flags.q.uniform && !qual->flags.q.buffer) {
|
||||
@@ -6267,18 +6278,6 @@ ast_interface_block::hir(exec_list *instructions,
|
||||
|
||||
state->struct_specifier_depth--;
|
||||
|
||||
for (unsigned i = 0; i < num_variables; i++) {
|
||||
if (fields[i].stream != -1 &&
|
||||
(unsigned) fields[i].stream != this->layout.stream) {
|
||||
_mesa_glsl_error(&loc, state,
|
||||
"stream layout qualifier on "
|
||||
"interface block member `%s' does not match "
|
||||
"the interface block (%d vs %d)",
|
||||
fields[i].name, fields[i].stream,
|
||||
this->layout.stream);
|
||||
}
|
||||
}
|
||||
|
||||
if (!redeclaring_per_vertex) {
|
||||
validate_identifier(this->block_name, loc, state);
|
||||
|
||||
|
@@ -828,13 +828,6 @@ struct glsl_struct_field {
|
||||
*/
|
||||
unsigned patch:1;
|
||||
|
||||
/**
|
||||
* For interface blocks, it has a value if this variable uses multiple vertex
|
||||
* streams (as in ir_variable::stream). -1 otherwise.
|
||||
*/
|
||||
int stream;
|
||||
|
||||
|
||||
/**
|
||||
* Image qualifiers, applicable to buffer variables defined in shader
|
||||
* storage buffer objects (SSBOs)
|
||||
@@ -847,8 +840,7 @@ struct glsl_struct_field {
|
||||
|
||||
glsl_struct_field(const struct glsl_type *_type, const char *_name)
|
||||
: type(_type), name(_name), location(-1), interpolation(0), centroid(0),
|
||||
sample(0), matrix_layout(GLSL_MATRIX_LAYOUT_INHERITED), patch(0),
|
||||
stream(-1)
|
||||
sample(0), matrix_layout(GLSL_MATRIX_LAYOUT_INHERITED), patch(0)
|
||||
{
|
||||
/* empty */
|
||||
}
|
||||
|
Reference in New Issue
Block a user