Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> On 10/01/2013 07:15 PM, Francisco Jerez wrote: > And use it to forbid comparisons of opaque operands. According to the > GL 4.2 specification: > >> Except for array indexing, structure member selection, and >> parentheses, opaque variables are not allowed to be operands in >> expressions. > --- > src/glsl/ast_to_hir.cpp | 4 ++++ > src/glsl/glsl_types.cpp | 18 ++++++++++++++++++ > src/glsl/glsl_types.h | 5 +++++ > 3 files changed, 27 insertions(+) > > diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp > index 99159dc..db59d0a 100644 > --- a/src/glsl/ast_to_hir.cpp > +++ b/src/glsl/ast_to_hir.cpp > @@ -1197,6 +1197,10 @@ ast_expression::hir(exec_list *instructions, > !state->check_version(120, 300, &loc, > "array comparisons forbidden")) { > error_emitted = true; > + } else if ((op[0]->type->contains_opaque() || > + op[1]->type->contains_opaque())) { > + _mesa_glsl_error(&loc, state, "opaque type comparisons forbidden"); > + error_emitted = true; > } > > if (error_emitted) { > diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp > index e1fe153..a9b7eb3 100644 > --- a/src/glsl/glsl_types.cpp > +++ b/src/glsl/glsl_types.cpp > @@ -162,6 +162,24 @@ glsl_type::contains_integer() const > } > } > > +bool > +glsl_type::contains_opaque() const { > + switch (base_type) { > + case GLSL_TYPE_SAMPLER: > + case GLSL_TYPE_ATOMIC_UINT: > + return true; > + case GLSL_TYPE_ARRAY: > + return element_type()->contains_opaque(); > + case GLSL_TYPE_STRUCT: > + for (unsigned int i = 0; i < length; i++) { > + if (fields.structure[i].type->contains_opaque()) > + return true; > + } > + return false; > + default: > + return false; > + } > +} > > gl_texture_index > glsl_type::sampler_index() const > diff --git a/src/glsl/glsl_types.h b/src/glsl/glsl_types.h > index d00b9e7..133b0af 100644 > --- a/src/glsl/glsl_types.h > +++ b/src/glsl/glsl_types.h > @@ -463,6 +463,11 @@ struct glsl_type { > } > > /** > + * Return whether a type contains any opaque types. > + */ > + bool contains_opaque() const; > + > + /** > * Query the full type of a matrix row > * > * \return >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev