On 01/31/2015 09:54 PM, Francisco Jerez wrote: > --- > src/glsl/ast_to_hir.cpp | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp > index 1ba29f7..783384e 100644 > --- a/src/glsl/ast_to_hir.cpp > +++ b/src/glsl/ast_to_hir.cpp > @@ -1596,6 +1596,18 @@ ast_expression::do_hir(exec_list *instructions, > error_emitted = true; > } > > + /* From section 4.1.7 of the GLSL 4.50 spec (Opaque Types): > + * > + * "Except for array indexing, structure member selection, and > + * parentheses, opaque variables are not allowed to be operands in > + * expressions; such use results in a compile-time error." > + */ > + if (type->contains_opaque()) { > + _mesa_glsl_error(&loc, state, "opaque variables cannot be operands " > + "of the ?: operator"); > + error_emitted = true; > + } > +
This is what the spec says, but I'm suspicious that other vendors may also allow it. Can we poke at AMD and NVIDIA close-source drivers to see if they allow things like x = texture(b ? sampler1 : sampler2, t); If they allow it, I'll submit a spec bug. If they do not allow it, we shouldn't either. > ir_constant *cond_val = op[0]->constant_expression_value(); > ir_constant *then_val = op[1]->constant_expression_value(); > ir_constant *else_val = op[2]->constant_expression_value(); _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev