X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fglsl_types.h;h=6a57c7026a6d87e8d0172489df350875977a12da;hb=ff124e3fe3e89c594b91e62d3e233cfc2af3ef34;hp=ae1a6e0fa7c71434b79ffb4f00c1f7a8272d1be9;hpb=8d07d66180b1523d7e70681ca142955f896ebda9;p=mesa.git diff --git a/src/compiler/glsl_types.h b/src/compiler/glsl_types.h index ae1a6e0fa7c..6a57c7026a6 100644 --- a/src/compiler/glsl_types.h +++ b/src/compiler/glsl_types.h @@ -27,6 +27,7 @@ #include #include +#include #include "shader_enums.h" #include "c11/threads.h" @@ -56,14 +57,13 @@ glsl_type_singleton_decref(); extern void _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state); +void +glsl_print_type(FILE *f, const struct glsl_type *t); + void encode_type_to_blob(struct blob *blob, const struct glsl_type *type); const struct glsl_type *decode_type_from_blob(struct blob_reader *blob); -#ifdef __cplusplus -} -#endif - typedef void (*glsl_type_size_align_func)(const struct glsl_type *type, unsigned *size, unsigned *align); @@ -231,6 +231,9 @@ enum glsl_sampler_dim { GLSL_SAMPLER_DIM_SUBPASS_MS, /* for multisampled vulkan input attachments */ }; +int +glsl_get_sampler_dim_coordinate_components(enum glsl_sampler_dim dim); + enum glsl_matrix_layout { /** * The layout of the matrix is inherited from the object containing the @@ -260,6 +263,8 @@ enum { }; #ifdef __cplusplus +} /* extern "C" */ + #include "GL/gl.h" #include "util/ralloc.h" #include "main/menums.h" /* for gl_texture_index, C++'s enum rules are broken */ @@ -394,6 +399,21 @@ public: */ const glsl_type *get_bare_type() const; + /** + * Gets the float16 version of this type. + */ + const glsl_type *get_float16_type() const; + + /** + * Gets the int16 version of this type. + */ + const glsl_type *get_int16_type() const; + + /** + * Gets the uint16 version of this type. + */ + const glsl_type *get_uint16_type() const; + /** * Get the instance of a built-in scalar, vector, or matrix type */ @@ -705,6 +725,14 @@ public: return glsl_base_type_is_integer(base_type); } + /** + * Query whether or not a type is a 16-bit integer. + */ + bool is_integer_16() const + { + return base_type == GLSL_TYPE_UINT16 || base_type == GLSL_TYPE_INT16; + } + /** * Query whether or not a type is an 32-bit integer. */ @@ -729,6 +757,22 @@ public: return is_integer_32() || is_integer_64(); } + /** + * Query whether or not a type is a 16-bit or 32-bit integer + */ + bool is_integer_16_32() const + { + return is_integer_16() || is_integer_32() || is_integer_64(); + } + + /** + * Query whether or not a type is a 16-bit, 32-bit or 64-bit integer + */ + bool is_integer_16_32_64() const + { + return is_integer_16() || is_integer_32() || is_integer_64(); + } + /** * Query whether or not type is an integral type, or for struct and array * types, contains an integral type. @@ -755,6 +799,56 @@ public: return base_type == GLSL_TYPE_FLOAT; } + /** + * Query whether or not a type is a half-float or float type + */ + bool is_float_16_32() const + { + return base_type == GLSL_TYPE_FLOAT16 || is_float(); + } + + /** + * Query whether or not a type is a half-float, float or double + */ + bool is_float_16_32_64() const + { + return base_type == GLSL_TYPE_FLOAT16 || is_float() || is_double(); + } + + /** + * Query whether or not a type is a float or double + */ + bool is_float_32_64() const + { + return is_float() || is_double(); + } + + bool is_int_16_32_64() const + { + return base_type == GLSL_TYPE_INT16 || + base_type == GLSL_TYPE_INT || + base_type == GLSL_TYPE_INT64; + } + + bool is_uint_16_32_64() const + { + return base_type == GLSL_TYPE_UINT16 || + base_type == GLSL_TYPE_UINT || + base_type == GLSL_TYPE_UINT64; + } + + bool is_int_16_32() const + { + return base_type == GLSL_TYPE_INT || + base_type == GLSL_TYPE_INT16; + } + + bool is_uint_16_32() const + { + return base_type == GLSL_TYPE_UINT || + base_type == GLSL_TYPE_UINT16; + } + /** * Query whether or not a type is a double type */ @@ -1250,93 +1344,94 @@ struct glsl_struct_field { * -1 otherwise. */ int xfb_stride; - - /** - * For interface blocks, the interpolation mode (as in - * ir_variable::interpolation). 0 otherwise. - */ - unsigned interpolation:3; - - /** - * For interface blocks, 1 if this variable uses centroid interpolation (as - * in ir_variable::centroid). 0 otherwise. - */ - unsigned centroid:1; - - /** - * For interface blocks, 1 if this variable uses sample interpolation (as - * in ir_variable::sample). 0 otherwise. - */ - unsigned sample:1; - - /** - * Layout of the matrix. Uses glsl_matrix_layout values. - */ - unsigned matrix_layout:2; - - /** - * For interface blocks, 1 if this variable is a per-patch input or output - * (as in ir_variable::patch). 0 otherwise. - */ - unsigned patch:1; - - /** - * Precision qualifier - */ - unsigned precision:2; - - /** - * Memory qualifiers, applicable to buffer variables defined in shader - * storage buffer objects (SSBOs) - */ - unsigned memory_read_only:1; - unsigned memory_write_only:1; - unsigned memory_coherent:1; - unsigned memory_volatile:1; - unsigned memory_restrict:1; - /** * Layout format, applicable to image variables only. */ enum pipe_format image_format; - /** - * Any of the xfb_* qualifiers trigger the shader to be in transform - * feedback mode so we need to keep track of whether the buffer was - * explicitly set or if its just been assigned the default global value. - */ - unsigned explicit_xfb_buffer:1; - - unsigned implicit_sized_array:1; + union { + struct { + /** + * For interface blocks, the interpolation mode (as in + * ir_variable::interpolation). 0 otherwise. + */ + unsigned interpolation:3; + + /** + * For interface blocks, 1 if this variable uses centroid interpolation (as + * in ir_variable::centroid). 0 otherwise. + */ + unsigned centroid:1; + + /** + * For interface blocks, 1 if this variable uses sample interpolation (as + * in ir_variable::sample). 0 otherwise. + */ + unsigned sample:1; + + /** + * Layout of the matrix. Uses glsl_matrix_layout values. + */ + unsigned matrix_layout:2; + + /** + * For interface blocks, 1 if this variable is a per-patch input or output + * (as in ir_variable::patch). 0 otherwise. + */ + unsigned patch:1; + + /** + * Precision qualifier + */ + unsigned precision:2; + + /** + * Memory qualifiers, applicable to buffer variables defined in shader + * storage buffer objects (SSBOs) + */ + unsigned memory_read_only:1; + unsigned memory_write_only:1; + unsigned memory_coherent:1; + unsigned memory_volatile:1; + unsigned memory_restrict:1; + + /** + * Any of the xfb_* qualifiers trigger the shader to be in transform + * feedback mode so we need to keep track of whether the buffer was + * explicitly set or if its just been assigned the default global value. + */ + unsigned explicit_xfb_buffer:1; + + unsigned implicit_sized_array:1; + }; + unsigned flags; + }; #ifdef __cplusplus -#define DEFAULT_CONSTRUCTORS(_type, _precision, _name) \ +#define DEFAULT_CONSTRUCTORS(_type, _name) \ type(_type), name(_name), location(-1), offset(-1), xfb_buffer(0), \ - xfb_stride(0), interpolation(0), centroid(0), \ - sample(0), matrix_layout(GLSL_MATRIX_LAYOUT_INHERITED), patch(0), \ - precision(_precision), memory_read_only(0), \ - memory_write_only(0), memory_coherent(0), memory_volatile(0), \ - memory_restrict(0), image_format(PIPE_FORMAT_NONE), \ - explicit_xfb_buffer(0), \ - implicit_sized_array(0) + xfb_stride(0), image_format(PIPE_FORMAT_NONE), flags(0) \ glsl_struct_field(const struct glsl_type *_type, int _precision, const char *_name) - : DEFAULT_CONSTRUCTORS(_type, _precision, _name) + : DEFAULT_CONSTRUCTORS(_type, _name) { - /* empty */ + matrix_layout = GLSL_MATRIX_LAYOUT_INHERITED; + precision = _precision; } glsl_struct_field(const struct glsl_type *_type, const char *_name) - : DEFAULT_CONSTRUCTORS(_type, GLSL_PRECISION_NONE, _name) + : DEFAULT_CONSTRUCTORS(_type, _name) { - /* empty */ + matrix_layout = GLSL_MATRIX_LAYOUT_INHERITED; + precision = GLSL_PRECISION_NONE; } glsl_struct_field() - : DEFAULT_CONSTRUCTORS(NULL, GLSL_PRECISION_NONE, NULL) + : DEFAULT_CONSTRUCTORS(NULL, NULL) { - /* empty */ + matrix_layout = GLSL_MATRIX_LAYOUT_INHERITED; + precision = GLSL_PRECISION_NONE; } #undef DEFAULT_CONSTRUCTORS #endif