[Mesa-dev] [PATCH 2/2] glsl: remove duplicate validation
Timothy Arceri
tarceri at itsqueeze.com
Wed Apr 26 08:07:14 UTC 2017
On 26/04/17 17:40, Samuel Pitoiset wrote:
> Nope, I'm pretty sure this allows to declare "out bool foo" in a
> fragment shader because is_varying_var() only returns TRUE for inputs.
The code below what this patch removes validates frag outputs. That
should catch your example.
>
> On 04/26/2017 05:56 AM, Timothy Arceri wrote:
>> Varying types have already been validated in
>> apply_type_qualifier_to_variable() by this point.
>> ---
>> src/compiler/glsl/ast_to_hir.cpp | 15 ---------------
>> 1 file changed, 15 deletions(-)
>>
>> diff --git a/src/compiler/glsl/ast_to_hir.cpp
>> b/src/compiler/glsl/ast_to_hir.cpp
>> index 0ae87cb..ef6f6cc 100644
>> --- a/src/compiler/glsl/ast_to_hir.cpp
>> +++ b/src/compiler/glsl/ast_to_hir.cpp
>> @@ -5028,35 +5028,20 @@ ast_declarator_list::hir(exec_list *instructions,
>> }
>> } else if (state->stage == MESA_SHADER_TESS_CTRL ||
>> state->stage == MESA_SHADER_TESS_EVAL) {
>> handle_tess_shader_input_decl(state, loc, var);
>> }
>> } else if (var->data.mode == ir_var_shader_out) {
>> const glsl_type *check_type = var->type->without_array();
>> /* 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);
>> -
>> - /* 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) {
>>
More information about the mesa-dev
mailing list