Browse Source

glsl: parse align layout qualifier

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
tags/12.0-branchpoint
Timothy Arceri 9 years ago
parent
commit
5a27fefffe
3 changed files with 26 additions and 0 deletions
  1. 11
    0
      src/compiler/glsl/ast.h
  2. 4
    0
      src/compiler/glsl/ast_type.cpp
  3. 11
    0
      src/compiler/glsl/glsl_parser.yy

+ 11
- 0
src/compiler/glsl/ast.h View File

@@ -479,6 +479,12 @@ struct ast_type_qualifier {
unsigned pixel_center_integer:1;
/*@}*/

/**
* Flag set if GL_ARB_enhanced_layouts "align" layout qualifier is
* used.
*/
unsigned explicit_align:1;

/**
* Flag set if GL_ARB_explicit_attrib_location "location" layout
* qualifier is used.
@@ -577,6 +583,11 @@ struct ast_type_qualifier {
/** Precision of the type (highp/medium/lowp). */
unsigned precision:2;

/**
* Alignment specified via GL_ARB_enhanced_layouts "align" layout qualifier
*/
ast_expression *align;

/** Geometry shader invocations for GL_ARB_gpu_shader5. */
ast_layout_expression *invocations;


+ 4
- 0
src/compiler/glsl/ast_type.cpp View File

@@ -73,6 +73,7 @@ ast_type_qualifier::has_layout() const
|| this->flags.q.column_major
|| this->flags.q.row_major
|| this->flags.q.packed
|| this->flags.q.explicit_align
|| this->flags.q.explicit_location
|| this->flags.q.explicit_image_format
|| this->flags.q.explicit_index
@@ -287,6 +288,9 @@ ast_type_qualifier::merge_qualifier(YYLTYPE *loc,
return false;
}

if (q.flags.q.explicit_align)
this->align = q.align;

if (q.flags.q.explicit_location)
this->location = q.location;


+ 11
- 0
src/compiler/glsl/glsl_parser.yy View File

@@ -1468,6 +1468,17 @@ layout_qualifier_id:
"GLSL 4.40 or ARB_enhanced_layouts");
}

if (match_layout_qualifier("align", $1, state) == 0) {
if (!state->has_enhanced_layouts()) {
_mesa_glsl_error(& @1, state,
"align qualifier requires "
"GLSL 4.40 or ARB_enhanced_layouts");
} else {
$$.flags.q.explicit_align = 1;
$$.align = $3;
}
}

if (match_layout_qualifier("location", $1, state) == 0) {
$$.flags.q.explicit_location = 1;


Loading…
Cancel
Save