X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Fcompiler%2Fnir_types.h;h=14fae6a5f58099ccc83eb22b1caf4fe4f1f38559;hp=2c31fa2e43bec0e28dacb145b372fdd02f8d844c;hb=1d018bc7fde744b5fc71108887a51e5bfaff8776;hpb=9f68b9ac711b39d030e795820b61285d9524555a diff --git a/src/compiler/nir_types.h b/src/compiler/nir_types.h index 2c31fa2e43b..14fae6a5f58 100644 --- a/src/compiler/nir_types.h +++ b/src/compiler/nir_types.h @@ -49,7 +49,23 @@ const struct glsl_type *glsl_get_struct_field(const struct glsl_type *type, int glsl_get_struct_field_offset(const struct glsl_type *type, unsigned index); +const struct glsl_struct_field * +glsl_get_struct_field_data(const struct glsl_type *type, unsigned index); + +enum glsl_interface_packing +glsl_get_internal_ifc_packing(const struct glsl_type *type, + bool std430_supported); +enum glsl_interface_packing +glsl_get_ifc_packing(const struct glsl_type *type); + +unsigned glsl_get_std140_base_alignment(const struct glsl_type *type, + bool row_major); +unsigned glsl_get_std140_size(const struct glsl_type *type, bool row_major); +unsigned glsl_get_std430_base_alignment(const struct glsl_type *type, + bool row_major); +unsigned glsl_get_std430_size(const struct glsl_type *type, bool row_major); unsigned glsl_get_explicit_stride(const struct glsl_type *type); +int glsl_array_size(const struct glsl_type *type); const struct glsl_type *glsl_get_array_element(const struct glsl_type *type); const struct glsl_type *glsl_without_array(const struct glsl_type *type); const struct glsl_type *glsl_without_array_or_matrix(const struct glsl_type *type); @@ -77,6 +93,9 @@ unsigned glsl_get_length(const struct glsl_type *type); unsigned glsl_get_aoa_size(const struct glsl_type *type); +unsigned glsl_count_vec4_slots(const struct glsl_type *type, + bool is_gl_vertex_input, bool is_bindless); +unsigned glsl_count_dword_slots(const struct glsl_type *type, bool is_bindless); unsigned glsl_count_attribute_slots(const struct glsl_type *type, bool is_gl_vertex_input); unsigned glsl_get_component_slots(const struct glsl_type *type); @@ -95,42 +114,23 @@ unsigned glsl_get_struct_location_offset(const struct glsl_type *type, unsigned glsl_atomic_size(const struct glsl_type *type); +int glsl_get_cl_size(const struct glsl_type *type); + +int glsl_get_cl_alignment(const struct glsl_type *type); + +void glsl_get_cl_type_size_align(const struct glsl_type *type, + unsigned *size, unsigned *align); + +unsigned glsl_get_explicit_size(const struct glsl_type *type, bool align_to_stride); +unsigned glsl_get_explicit_alignment(const struct glsl_type *type); + static inline unsigned glsl_get_bit_size(const struct glsl_type *type) { - switch (glsl_get_base_type(type)) { - case GLSL_TYPE_BOOL: - return 1; - - case GLSL_TYPE_INT: - case GLSL_TYPE_UINT: - case GLSL_TYPE_FLOAT: /* TODO handle mediump */ - case GLSL_TYPE_SUBROUTINE: - return 32; - - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - return 16; - - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - return 8; - - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_INT64: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_SAMPLER: - return 64; - - default: - unreachable("unknown base type"); - } - - return 0; + return glsl_base_type_get_bit_size(glsl_get_base_type(type)); } +bool glsl_type_is_packed(const struct glsl_type *type); bool glsl_type_is_16bit(const struct glsl_type *type); bool glsl_type_is_32bit(const struct glsl_type *type); bool glsl_type_is_64bit(const struct glsl_type *type); @@ -142,8 +142,11 @@ bool glsl_type_is_vector_or_scalar(const struct glsl_type *type); bool glsl_type_is_matrix(const struct glsl_type *type); bool glsl_matrix_type_is_row_major(const struct glsl_type *type); bool glsl_type_is_array(const struct glsl_type *type); +bool glsl_type_is_unsized_array(const struct glsl_type *type); bool glsl_type_is_array_of_arrays(const struct glsl_type *type); bool glsl_type_is_array_or_matrix(const struct glsl_type *type); +bool glsl_type_is_struct(const struct glsl_type *type); +bool glsl_type_is_interface(const struct glsl_type *type); bool glsl_type_is_struct_or_ifc(const struct glsl_type *type); bool glsl_type_is_sampler(const struct glsl_type *type); bool glsl_type_is_image(const struct glsl_type *type); @@ -154,7 +157,9 @@ bool glsl_type_is_integer(const struct glsl_type *type); bool glsl_type_contains_64bit(const struct glsl_type *type); bool glsl_sampler_type_is_shadow(const struct glsl_type *type); bool glsl_sampler_type_is_array(const struct glsl_type *type); +bool glsl_struct_type_is_packed(const struct glsl_type *type); bool glsl_contains_atomic(const struct glsl_type *type); +bool glsl_contains_opaque(const struct glsl_type *type); const struct glsl_type *glsl_void_type(void); const struct glsl_type *glsl_float_type(void); @@ -177,6 +182,8 @@ const struct glsl_type *glsl_bool_type(void); const struct glsl_type *glsl_scalar_type(enum glsl_base_type base_type); const struct glsl_type *glsl_vector_type(enum glsl_base_type base_type, unsigned components); +const struct glsl_type * glsl_replace_vector_type(const struct glsl_type *t, + unsigned components); const struct glsl_type *glsl_matrix_type(enum glsl_base_type base_type, unsigned rows, unsigned columns); const struct glsl_type *glsl_explicit_matrix_type(const struct glsl_type *mat, @@ -188,7 +195,8 @@ const struct glsl_type *glsl_array_type(const struct glsl_type *base, unsigned explicit_stride); const struct glsl_type *glsl_struct_type(const struct glsl_struct_field *fields, - unsigned num_fields, const char *name); + unsigned num_fields, const char *name, + bool packed); const struct glsl_type *glsl_interface_type(const struct glsl_struct_field *fields, unsigned num_fields, enum glsl_interface_packing packing, @@ -198,6 +206,7 @@ const struct glsl_type *glsl_sampler_type(enum glsl_sampler_dim dim, bool is_shadow, bool is_array, enum glsl_base_type base_type); const struct glsl_type *glsl_bare_sampler_type(); +const struct glsl_type *glsl_bare_shadow_sampler_type(); const struct glsl_type *glsl_image_type(enum glsl_sampler_dim dim, bool is_array, enum glsl_base_type base_type); @@ -209,14 +218,24 @@ const struct glsl_type *glsl_transposed_type(const struct glsl_type *type); const struct glsl_type *glsl_channel_type(const struct glsl_type *type); -typedef void (*glsl_type_size_align_func)(const struct glsl_type *type, - unsigned *size, unsigned *align); +const struct glsl_type *glsl_float16_type(const struct glsl_type *type); +const struct glsl_type *glsl_int16_type(const struct glsl_type *type); +const struct glsl_type *glsl_uint16_type(const struct glsl_type *type); void glsl_get_natural_size_align_bytes(const struct glsl_type *type, unsigned *size, unsigned *align); const struct glsl_type *glsl_atomic_uint_type(void); +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); + +unsigned glsl_type_get_sampler_count(const struct glsl_type *type); +unsigned glsl_type_get_image_count(const struct glsl_type *type); + +bool glsl_type_is_leaf(const struct glsl_type *type); + #ifdef __cplusplus } #endif