On Fri, Feb 6, 2015 at 4:15 AM, Ian Romanick <i...@freedesktop.org> wrote: > On 02/06/2015 06:56 AM, Ilia Mirkin wrote: >> From: Tapani Pälli <tapani.pa...@intel.com> >> >> Patch fixes Piglit test: >> arb_gpu_shader_fp64/preprocessor/fs-output-double.frag >> >> and adds additional validation for shader outputs. >> >> Signed-off-by: Tapani Pälli <tapani.pa...@intel.com> >> Signed-off-by: Dave Airlie <airl...@redhat.com> >> --- >> src/glsl/ast_to_hir.cpp | 47 +++++++++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 47 insertions(+) >> >> diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp >> index 3ea3a13..2a74a51 100644 >> --- a/src/glsl/ast_to_hir.cpp >> +++ b/src/glsl/ast_to_hir.cpp >> @@ -3625,6 +3625,53 @@ ast_declarator_list::hir(exec_list *instructions, >> >> handle_geometry_shader_input_decl(state, loc, var); >> } >> + } else if (var->data.mode == ir_var_shader_out) { >> + const glsl_type *check_type = var->type; >> + while (check_type->is_array()) >> + check_type = check_type->element_type(); > > const glsl_type *const = var->type->without_array();
Right. > >> + >> + /* From section 4.3.6 (Output variables) of the GLSL 4.40 spec: >> + * >> + * It is a compile-time error to declare a vertex, tessellation >> + * evaluation, tessellation control, or geometry shader output >> + * that contains any of the following: >> + * >> + * * A Boolean type (bool, bvec2 ...) >> + * * An opaque type >> + */ >> + if (check_type->is_boolean() || check_type->contains_opaque()) >> + _mesa_glsl_error(&loc, state, >> + "%s shader output cannot have type %s", >> + _mesa_shader_stage_to_string(state->stage), >> + check_type->name); > > Aren't we already enforcing this somewhere? Do we have any test cases? http://cgit.freedesktop.org/~tpohjola/mesa/commit/?h=fp64_common&id=2556b37be981156dc91d51849e96f69e52467a5e Tapani? > >> + >> + /* From section 4.3.6 (Output variables) of the GLSL 4.40 spec: >> + * >> + * It is a compile-time error to declare a fragment shader >> output >> + * that contains any of the following: >> + * >> + * * A Boolean type (bool, bvec2 ...) >> + * * A double-precision scalar or vector (double, dvec2 ...) >> + * * An opaque type >> + * * Any matrix type >> + * * A structure >> + */ >> + if (state->stage == MESA_SHADER_FRAGMENT) { >> + if (check_type->is_record() || check_type->is_matrix()) >> + _mesa_glsl_error(&loc, state, >> + "fragment shader output " >> + "cannot have struct or array type"); >> + switch (check_type->base_type) { >> + case GLSL_TYPE_UINT: >> + case GLSL_TYPE_INT: >> + case GLSL_TYPE_FLOAT: >> + break; >> + default: >> + _mesa_glsl_error(&loc, state, >> + "fragment shader output cannot have " >> + "type %s", check_type->name); >> + } >> + } >> } >> >> /* Integer fragment inputs must be qualified with 'flat'. In GLSL ES, >> > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev