X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fnir_types.cpp;h=817dae09e7b9593950604cc21aec91ba239e507f;hb=eb3047c094abfa03e071453d7c373e9c2c574370;hp=7fa1741515db6742a5cff61a9e7838bf2c2147f2;hpb=0d1fb380b126a1eb03c0be1abea1969b4419aa9a;p=mesa.git diff --git a/src/compiler/nir_types.cpp b/src/compiler/nir_types.cpp index 7fa1741515d..817dae09e7b 100644 --- a/src/compiler/nir_types.cpp +++ b/src/compiler/nir_types.cpp @@ -279,6 +279,12 @@ glsl_type_is_array(const struct glsl_type *type) return type->is_array(); } +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) { @@ -355,7 +361,7 @@ glsl_type_is_boolean(const struct glsl_type *type) bool glsl_type_is_integer(const struct glsl_type *type) { - return glsl_base_type_is_integer(type->base_type); + return type->is_integer(); } bool @@ -639,9 +645,14 @@ glsl_get_natural_size_align_bytes(const struct glsl_type *type, break; case GLSL_TYPE_SAMPLER: + case GLSL_TYPE_IMAGE: + /* Bindless samplers and images. */ + *size = 8; + *align = 8; + break; + case GLSL_TYPE_ATOMIC_UINT: case GLSL_TYPE_SUBROUTINE: - case GLSL_TYPE_IMAGE: case GLSL_TYPE_VOID: case GLSL_TYPE_ERROR: case GLSL_TYPE_INTERFACE: @@ -668,6 +679,12 @@ glsl_contains_atomic(const struct glsl_type *type) return type->contains_atomic(); } +bool +glsl_contains_opaque(const struct glsl_type *type) +{ + return type->contains_opaque(); +} + int glsl_get_cl_size(const struct glsl_type *type) { @@ -721,3 +738,30 @@ glsl_type_get_image_count(const struct glsl_type *type) return 0; } + +unsigned +glsl_get_explicit_size(const struct glsl_type *type, bool align_to_stride) +{ + return type->explicit_size(align_to_stride); +} + +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, + unsigned *size, unsigned *align) +{ + return type->get_explicit_type_for_size_align(type_info, size, align); +}