glsl: Reject row_major and column_major on non-matrix types
authorIan Romanick <ian.d.romanick@intel.com>
Wed, 16 Jan 2013 20:01:50 +0000 (12:01 -0800)
committerIan Romanick <ian.d.romanick@intel.com>
Sat, 19 Jan 2013 01:35:32 +0000 (17:35 -0800)
commitbb47a4d081c383a2c42555c2bbde2f5d8ee2412c
tree154008b03bfece9c379b57fbe158205dd76c6467
parent1ec1b577f726a70dd787227260e61928e97474e5
glsl: Reject row_major and column_major on non-matrix types

About both row_major and column_major layout qualifiers, the GLSL spec
says:

    "It only affects the layout of matrices."

However, the OpenGL ES 3.0 conformance tests have taken this to mean it
is an error use it elsewhere.  This seems logical given that
'layout(row_major) vec4 foo' is probably not what the programmer meant.

The only catch is dealing with structures that contain matrices.  Layout
qualifiers cannot be applied directly to fields of structures, so the
only way to affect the layout of the fields is to apply a qualifier to
the structure declaration itself.  There is ongoing debate about this
within Khronos, and it seems to be settling in favor of allowing the
qualifiers on structures.  I light of this, I have chosen to allow the
qualifiers on structures but emit a warning since the usage may not be
portable.

Fixes gles3conform test
uniform_buffer_object_layouts_not_for_matrix_type and causes no
regressions.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/ast_to_hir.cpp