[Mesa-dev] [PATCH 30/46] glsl: relax unsized input/output block arrays for TCS/TES
Dave Airlie
airlied at gmail.com
Tue Jul 21 16:40:31 PDT 2015
This should use
_mesa_shader_stage_to_string
in the _mesa_glsl_error strings,
Change that and it can have
Reviewed-by: Dave Airlie <airlied at redhat.com>
>
> ---
> src/glsl/ast_to_hir.cpp | 33 ++++++++++++++++++++++++++-------
> 1 file changed, 26 insertions(+), 7 deletions(-)
>
> diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
> index 837bac7..fb957a1 100644
> --- a/src/glsl/ast_to_hir.cpp
> +++ b/src/glsl/ast_to_hir.cpp
> @@ -5938,16 +5938,35 @@ ast_interface_block::hir(exec_list *instructions,
> * geometry shader inputs. All other input and output block
> * arrays must specify an array size.
> *
> + * The same applies to tessellation shaders.
> + *
> * The upshot of this is that the only circumstance where an
> * interface array size *doesn't* need to be specified is on a
> - * geometry shader input.
> + * geometry shader input, tessellation control shader input,
> + * tessellation control shader output, and tessellation evaluation
> + * shader input.
> */
> - if (this->array_specifier->is_unsized_array &&
> - (state->stage != MESA_SHADER_GEOMETRY || !this->layout.flags.q.in)) {
> - _mesa_glsl_error(&loc, state,
> - "only geometry shader inputs may be unsized "
> - "instance block arrays");
> -
> + if (this->array_specifier->is_unsized_array) {
> + bool allow_inputs = state->stage == MESA_SHADER_GEOMETRY ||
> + state->stage == MESA_SHADER_TESS_CTRL ||
> + state->stage == MESA_SHADER_TESS_EVAL;
> + bool allow_outputs = state->stage == MESA_SHADER_TESS_CTRL;
> +
> + if (this->layout.flags.q.in) {
> + if (!allow_inputs)
> + _mesa_glsl_error(&loc, state,
> + "unsized input block arrays not allowed in this "
> + "shader stage");
> + } else if (this->layout.flags.q.out) {
> + if (!allow_outputs)
> + _mesa_glsl_error(&loc, state,
> + "unsized output block arrays not allowed in this "
> + "shader stage");
> + } else {
> + /* by elimination, this is a uniform block array */
> + _mesa_glsl_error(&loc, state,
> + "unsized uniform block arrays not allowed");
> + }
> }
>
> const glsl_type *block_array_type =
> --
> 2.1.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list