glsl: disallow implicit conversions in ESSL shaders
authorIlia Mirkin <imirkin@alum.mit.edu>
Wed, 27 Jan 2016 18:52:41 +0000 (13:52 -0500)
committerIlia Mirkin <imirkin@alum.mit.edu>
Thu, 28 Jan 2016 16:31:19 +0000 (11:31 -0500)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/compiler/glsl/ast_to_hir.cpp
src/compiler/glsl_types.cpp

index dfd3196..3fca18a 100644 (file)
@@ -291,6 +291,10 @@ apply_implicit_conversion(const glsl_type *to, ir_rvalue * &from,
    if (!state->is_version(120, 0))
       return false;
 
+   /* ESSL does not allow implicit conversions */
+   if (state->es_shader)
+      return false;
+
    /* From page 27 (page 33 of the PDF) of the GLSL 1.50 spec:
     *
     *    "There are no implicit array or structure conversions. For
index 17ebf07..ef6c3c6 100644 (file)
@@ -1139,6 +1139,13 @@ glsl_type::can_implicitly_convert_to(const glsl_type *desired,
    if (this == desired)
       return true;
 
+   /* ESSL does not allow implicit conversions. If there is no state, we're
+    * doing intra-stage function linking where these checks have already been
+    * done.
+    */
+   if (state && state->es_shader)
+      return false;
+
    /* There is no conversion among matrix types. */
    if (this->matrix_columns > 1 || desired->matrix_columns > 1)
       return false;