}
}
+bool
+glsl_type_is_vector(const struct glsl_type *t)
+{
+ return t->vector_elements > 1 &&
+ t->matrix_columns == 1 &&
+ t->base_type >= GLSL_TYPE_UINT &&
+ t->base_type <= GLSL_TYPE_BOOL;
+}
+
+bool
+glsl_type_is_scalar(const struct glsl_type *t)
+{
+ return t->vector_elements == 1 &&
+ t->base_type >= GLSL_TYPE_UINT &&
+ t->base_type <= GLSL_TYPE_IMAGE;
+}
+
+bool
+glsl_type_is_vector_or_scalar(const struct glsl_type *t)
+{
+ return glsl_type_is_vector(t) || glsl_type_is_scalar(t);
+}
+
+bool
+glsl_type_is_matrix(const struct glsl_type *t)
+{
+ /* GLSL only has float matrices. */
+ return t->matrix_columns > 1 && (t->base_type == GLSL_TYPE_FLOAT ||
+ t->base_type == GLSL_TYPE_DOUBLE ||
+ t->base_type == GLSL_TYPE_FLOAT16);
+}
+
+bool
+glsl_type_is_array_or_matrix(const struct glsl_type *t)
+{
+ return glsl_type_is_array(t) || glsl_type_is_matrix(t);
+}
+
+bool
+glsl_type_is_dual_slot(const struct glsl_type *t)
+{
+ return glsl_type_is_64bit(t) && t->vector_elements > 2;
+}
+
+const struct glsl_type *
+glsl_get_array_element(const struct glsl_type *t)
+{
+ if (glsl_type_is_matrix(t))
+ return t->column_type();
+ else if (glsl_type_is_vector(t))
+ return t->get_scalar_type();
+ return t->fields.array;
+}
+
+bool
+glsl_type_is_leaf(const struct glsl_type *t)
+{
+ if (glsl_type_is_struct_or_ifc(t) ||
+ (glsl_type_is_array(t) &&
+ (glsl_type_is_array(glsl_get_array_element(t)) ||
+ glsl_type_is_struct_or_ifc(glsl_get_array_element(t))))) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
}
static inline bool glsl_type_is_void(const struct glsl_type *t) { return t->base_type == GLSL_TYPE_VOID; }
static inline bool glsl_type_is_subroutine(const struct glsl_type *t) { return t->base_type == GLSL_TYPE_SUBROUTINE; }
static inline bool glsl_type_is_error(const struct glsl_type *t) { return t->base_type == GLSL_TYPE_ERROR; }
+static inline bool glsl_type_is_double(const struct glsl_type *t) { return t->base_type == GLSL_TYPE_DOUBLE; }
+
+static inline bool
+glsl_type_is_numeric(const struct glsl_type *t)
+{
+ return t->base_type >= GLSL_TYPE_UINT &&
+ t->base_type <= GLSL_TYPE_INT64;
+}
+
+static inline bool
+glsl_type_is_integer(const struct glsl_type *t)
+{
+ return glsl_base_type_is_integer(t->base_type);
+}
static inline bool
glsl_type_is_struct_or_ifc(const struct glsl_type *t)
return glsl_type_is_struct(t) || glsl_type_is_interface(t);
}
-bool glsl_type_is_packed(const struct glsl_type *t);
-bool glsl_type_is_16bit(const struct glsl_type *t);
-bool glsl_type_is_32bit(const struct glsl_type *t);
-bool glsl_type_is_64bit(const struct glsl_type *t);
-
-bool glsl_type_is_unsized_array(const struct glsl_type *t);
-bool glsl_type_is_numeric(const struct glsl_type *t);
-bool glsl_type_is_integer(const struct glsl_type *t);
-bool glsl_type_is_double(const struct glsl_type *t);
-bool glsl_type_is_array_of_arrays(const struct glsl_type *t);
-bool glsl_type_is_bare_sampler(const struct glsl_type *t);
+static inline bool
+glsl_type_is_packed(const struct glsl_type *t)
+{
+ return t->packed;
+}
+
+static inline bool
+glsl_type_is_16bit(const struct glsl_type *t)
+{
+ return glsl_base_type_is_16bit(t->base_type);
+}
+
+static inline bool
+glsl_type_is_32bit(const struct glsl_type *t)
+{
+ return t->base_type == GLSL_TYPE_UINT ||
+ t->base_type == GLSL_TYPE_INT ||
+ t->base_type == GLSL_TYPE_FLOAT;
+}
+
+static inline bool
+glsl_type_is_64bit(const struct glsl_type *t)
+{
+ return glsl_base_type_is_64bit(t->base_type);
+}
+
+static inline bool
+glsl_type_is_unsized_array(const struct glsl_type *t)
+{
+ return glsl_type_is_array(t) && t->length == 0;
+}
+
+static inline bool
+glsl_type_is_array_of_arrays(const struct glsl_type *t)
+{
+ return glsl_type_is_array(t) && glsl_type_is_array(t->fields.array);
+}
+
+static inline bool
+glsl_type_is_bare_sampler(const struct glsl_type *t)
+{
+ return glsl_type_is_sampler(t) && t->sampled_type == GLSL_TYPE_VOID;
+}
+
bool glsl_type_is_vector(const struct glsl_type *t);
bool glsl_type_is_scalar(const struct glsl_type *t);
bool glsl_type_is_vector_or_scalar(const struct glsl_type *t);
bool glsl_type_is_dual_slot(const struct glsl_type *t);
bool glsl_type_is_leaf(const struct glsl_type *type);
-bool glsl_matrix_type_is_row_major(const struct glsl_type *t);
-bool glsl_sampler_type_is_shadow(const struct glsl_type *t);
-bool glsl_sampler_type_is_array(const struct glsl_type *t);
-bool glsl_struct_type_is_packed(const struct glsl_type *t);
+static inline bool
+glsl_matrix_type_is_row_major(const struct glsl_type *t)
+{
+ assert((glsl_type_is_matrix(t) && t->explicit_stride) || glsl_type_is_interface(t));
+ return t->interface_row_major;
+}
+
+static inline bool
+glsl_sampler_type_is_shadow(const struct glsl_type *t)
+{
+ assert(glsl_type_is_sampler(t));
+ return t->sampler_shadow;
+}
+
+static inline bool
+glsl_sampler_type_is_array(const struct glsl_type *t)
+{
+ assert(glsl_type_is_sampler(t) ||
+ glsl_type_is_texture(t) ||
+ glsl_type_is_image(t));
+ return t->sampler_array;
+}
+
+static inline bool
+glsl_struct_type_is_packed(const struct glsl_type *t)
+{
+ assert(glsl_type_is_struct(t));
+ return t->packed;
+}
const struct glsl_type *glsl_get_bare_type(const struct glsl_type *t);
inline bool glsl_type::is_subroutine() const { return glsl_type_is_subroutine(this); }
inline bool glsl_type::is_atomic_uint() const { return glsl_type_is_atomic_uint(this); }
-inline bool
-glsl_type::is_scalar() const
-{
- return (vector_elements == 1)
- && (base_type >= GLSL_TYPE_UINT)
- && (base_type <= GLSL_TYPE_IMAGE);
-}
-
-inline bool
-glsl_type::is_vector() const
-{
- return (vector_elements > 1)
- && (matrix_columns == 1)
- && (base_type >= GLSL_TYPE_UINT)
- && (base_type <= GLSL_TYPE_BOOL);
-}
-
-inline bool
-glsl_type::is_matrix() const
-{
- /* GLSL only has float matrices. */
- return (matrix_columns > 1) && (base_type == GLSL_TYPE_FLOAT ||
- base_type == GLSL_TYPE_DOUBLE ||
- base_type == GLSL_TYPE_FLOAT16);
-}
-
-inline bool
-glsl_type::is_numeric() const
-{
- return (base_type >= GLSL_TYPE_UINT) && (base_type <= GLSL_TYPE_INT64);
-}
-
-inline bool glsl_type::is_integer() const { return glsl_base_type_is_integer(base_type); }
-inline bool glsl_type::is_double() const { return base_type == GLSL_TYPE_DOUBLE; }
-
-inline bool
-glsl_type::is_array_of_arrays() const
-{
- return is_array() && fields.array->is_array();
-}
-
-inline bool
-glsl_type::is_dual_slot() const
-{
- return is_64bit() && vector_elements > 2;
-}
-
-inline bool
-glsl_type::is_64bit() const
-{
- return glsl_base_type_is_64bit(base_type);
-}
-
-inline bool
-glsl_type::is_16bit() const
-{
- return glsl_base_type_is_16bit(base_type);
-}
-
-inline bool
-glsl_type::is_32bit() const
-{
- return base_type == GLSL_TYPE_UINT ||
- base_type == GLSL_TYPE_INT ||
- base_type == GLSL_TYPE_FLOAT;
-}
+inline bool glsl_type::is_scalar() const { return glsl_type_is_scalar(this); }
+inline bool glsl_type::is_vector() const { return glsl_type_is_vector(this); }
+inline bool glsl_type::is_matrix() const { return glsl_type_is_matrix(this); }
+inline bool glsl_type::is_numeric() const { return glsl_type_is_numeric(this); }
+inline bool glsl_type::is_integer() const { return glsl_type_is_integer(this); }
+inline bool glsl_type::is_double() const { return glsl_type_is_double(this); }
+
+inline bool glsl_type::is_array_of_arrays() const { return glsl_type_is_array_of_arrays(this); }
+inline bool glsl_type::is_dual_slot() const { return glsl_type_is_dual_slot(this); }
+inline bool glsl_type::is_16bit() const { return glsl_type_is_16bit(this); }
+inline bool glsl_type::is_32bit() const { return glsl_type_is_32bit(this); }
+inline bool glsl_type::is_64bit() const { return glsl_type_is_64bit(this); }
inline unsigned
glsl_type::components() const
return is_array() ? length : -1;
}
-inline bool
-glsl_type::is_unsized_array() const
-{
- return is_array() && length == 0;
-}
+inline bool glsl_type::is_unsized_array() const { return glsl_type_is_unsized_array(this); }
inline enum glsl_interface_packing
glsl_type::get_interface_packing() const
}
const struct glsl_type *
-glsl_get_array_element(const struct 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;
-}
-
-const struct glsl_type *
glsl_without_array(const struct glsl_type *type)
{
return type->without_array();
}
bool
-glsl_type_is_16bit(const struct glsl_type *type)
-{
- return type->is_16bit();
-}
-
-bool
-glsl_type_is_32bit(const struct glsl_type *type)
-{
- return type->is_32bit();
-}
-
-bool
-glsl_type_is_64bit(const struct glsl_type *type)
-{
- return type->is_64bit();
-}
-
-bool
-glsl_type_is_vector(const struct glsl_type *type)
-{
- return type->is_vector();
-}
-
-bool
-glsl_type_is_scalar(const struct glsl_type *type)
-{
- return type->is_scalar();
-}
-
-bool
-glsl_type_is_vector_or_scalar(const struct glsl_type *type)
-{
- return type->is_vector() || type->is_scalar();
-}
-
-bool
-glsl_type_is_matrix(const struct glsl_type *type)
-{
- return type->is_matrix();
-}
-
-bool
-glsl_matrix_type_is_row_major(const struct glsl_type *type)
-{
- assert((type->is_matrix() && type->explicit_stride) || type->is_interface());
- return type->interface_row_major;
-}
-
-bool
-glsl_type_is_unsized_array(const struct glsl_type *type)
-{
- return type->is_unsized_array();
-}
-
-bool
-glsl_type_is_array_of_arrays(const struct glsl_type *type)
-{
- return type->is_array_of_arrays();
-}
-
-bool
-glsl_type_is_array_or_matrix(const struct glsl_type *type)
-{
- return type->is_array() || type->is_matrix();
-}
-
-bool
-glsl_type_is_bare_sampler(const struct glsl_type *type)
-{
- return type->is_sampler() && type->sampled_type == GLSL_TYPE_VOID;
-}
-
-bool
-glsl_sampler_type_is_shadow(const struct glsl_type *type)
-{
- assert(glsl_type_is_sampler(type));
- return type->sampler_shadow;
-}
-
-bool
-glsl_sampler_type_is_array(const struct glsl_type *type)
-{
- assert(glsl_type_is_sampler(type) ||
- glsl_type_is_texture(type) ||
- glsl_type_is_image(type));
- return type->sampler_array;
-}
-
-bool
-glsl_struct_type_is_packed(const struct glsl_type *type)
-{
- assert(glsl_type_is_struct(type));
- return type->packed;
-}
-
-bool
-glsl_type_is_dual_slot(const struct glsl_type *type)
-{
- return type->is_dual_slot();
-}
-
-bool
-glsl_type_is_numeric(const struct glsl_type *type)
-{
- return type->is_numeric();
-}
-
-bool
-glsl_type_is_integer(const struct glsl_type *type)
-{
- return type->is_integer();
-}
-
-bool
glsl_type_contains_64bit(const struct glsl_type *type)
{
return type->contains_64bit();
return type->explicit_alignment;
}
-bool
-glsl_type_is_packed(const struct glsl_type *type)
-{
- return type->packed;
-}
-
-bool
-glsl_type_is_leaf(const struct glsl_type *type)
-{
- if (glsl_type_is_struct_or_ifc(type) ||
- (glsl_type_is_array(type) &&
- (glsl_type_is_array(glsl_get_array_element(type)) ||
- glsl_type_is_struct_or_ifc(glsl_get_array_element(type))))) {
- return false;
- } else {
- return true;
- }
-}
-
const struct glsl_type *
glsl_get_explicit_type_for_size_align(const struct glsl_type *type,
glsl_type_size_align_func type_info,