compiler/nir_types: Handle vectors in glsl_get_array_element
authorJason Ekstrand <jason.ekstrand@intel.com>
Thu, 24 Aug 2017 00:43:36 +0000 (17:43 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 7 Nov 2017 18:41:24 +0000 (10:41 -0800)
Most of NIR doesn't allow doing array indexing on a vector (though it
does on a matrix).  However, nir_lower_io handles it just fine and this
behavior is needed for shared variables in Vulkan.  This commit makes
glsl_get_array_element do something sensible for vector types and makes
nir_validate happy with them.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
src/compiler/nir_types.cpp

index b1b17ebd83125bfb649a13623e8eb4503d325124..c66cfff8be1bee9d97b8f6dcc87a847422b17394 100644 (file)
@@ -39,6 +39,8 @@ glsl_get_array_element(const glsl_type* type)
 {
    if (type->is_matrix())
       return type->column_type();
+   else if (type->is_vector())
+      return type->get_scalar_type();
    return type->fields.array;
 }