2
* Copyright © 2014 Connor Abbott
4
* Permission is hereby granted, free of charge, to any person obtaining a
5
* copy of this software and associated documentation files (the "Software"),
6
* to deal in the Software without restriction, including without limitation
7
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
* and/or sell copies of the Software, and to permit persons to whom the
9
* Software is furnished to do so, subject to the following conditions:
11
* The above copyright notice and this permission notice (including the next
12
* paragraph) shall be included in all copies or substantial portions of the
15
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24
* Connor Abbott (cwabbott0@gmail.com)
34
/* C wrapper around compiler/glsl_types.h */
36
#include "glsl_types.h"
44
const char *glsl_get_type_name(const struct glsl_type *type);
46
const struct glsl_type *glsl_get_struct_field(const struct glsl_type *type,
49
int glsl_get_struct_field_offset(const struct glsl_type *type,
52
const struct glsl_struct_field *
53
glsl_get_struct_field_data(const struct glsl_type *type, unsigned index);
55
enum glsl_interface_packing
56
glsl_get_internal_ifc_packing(const struct glsl_type *type,
57
bool std430_supported);
58
enum glsl_interface_packing
59
glsl_get_ifc_packing(const struct glsl_type *type);
61
unsigned glsl_get_std140_base_alignment(const struct glsl_type *type,
63
unsigned glsl_get_std140_size(const struct glsl_type *type, bool row_major);
64
unsigned glsl_get_std430_base_alignment(const struct glsl_type *type,
66
unsigned glsl_get_std430_size(const struct glsl_type *type, bool row_major);
67
unsigned glsl_get_explicit_stride(const struct glsl_type *type);
68
int glsl_array_size(const struct glsl_type *type);
69
const struct glsl_type *glsl_get_array_element(const struct glsl_type *type);
70
const struct glsl_type *glsl_without_array(const struct glsl_type *type);
71
const struct glsl_type *glsl_without_array_or_matrix(const struct glsl_type *type);
72
const struct glsl_type *glsl_get_bare_type(const struct glsl_type *type);
74
const struct glsl_type *glsl_get_column_type(const struct glsl_type *type);
76
const struct glsl_type *
77
glsl_get_function_return_type(const struct glsl_type *type);
79
const struct glsl_function_param *
80
glsl_get_function_param(const struct glsl_type *type, unsigned index);
82
const struct glsl_type *
83
glsl_texture_type_to_sampler(const struct glsl_type *type, bool is_shadow);
84
const struct glsl_type *
85
glsl_sampler_type_to_texture(const struct glsl_type *type);
87
enum glsl_base_type glsl_get_base_type(const struct glsl_type *type);
89
unsigned glsl_get_vector_elements(const struct glsl_type *type);
91
unsigned glsl_get_components(const struct glsl_type *type);
93
unsigned glsl_get_matrix_columns(const struct glsl_type *type);
95
unsigned glsl_get_length(const struct glsl_type *type);
97
unsigned glsl_get_aoa_size(const struct glsl_type *type);
99
unsigned glsl_count_vec4_slots(const struct glsl_type *type,
100
bool is_gl_vertex_input, bool is_bindless);
101
unsigned glsl_count_dword_slots(const struct glsl_type *type, bool is_bindless);
102
unsigned glsl_count_attribute_slots(const struct glsl_type *type,
103
bool is_gl_vertex_input);
104
unsigned glsl_get_component_slots(const struct glsl_type *type);
105
unsigned glsl_varying_count(const struct glsl_type *type);
107
const char *glsl_get_struct_elem_name(const struct glsl_type *type,
110
enum glsl_sampler_dim glsl_get_sampler_dim(const struct glsl_type *type);
111
enum glsl_base_type glsl_get_sampler_result_type(const struct glsl_type *type);
112
unsigned glsl_get_sampler_target(const struct glsl_type *type);
113
int glsl_get_sampler_coordinate_components(const struct glsl_type *type);
115
unsigned glsl_get_struct_location_offset(const struct glsl_type *type,
118
unsigned glsl_atomic_size(const struct glsl_type *type);
120
int glsl_get_cl_size(const struct glsl_type *type);
122
int glsl_get_cl_alignment(const struct glsl_type *type);
124
void glsl_get_cl_type_size_align(const struct glsl_type *type,
125
unsigned *size, unsigned *align);
127
unsigned glsl_get_explicit_size(const struct glsl_type *type, bool align_to_stride);
128
unsigned glsl_get_explicit_alignment(const struct glsl_type *type);
130
static inline unsigned
131
glsl_get_bit_size(const struct glsl_type *type)
133
return glsl_base_type_get_bit_size(glsl_get_base_type(type));
136
bool glsl_type_is_packed(const struct glsl_type *type);
137
bool glsl_type_is_16bit(const struct glsl_type *type);
138
bool glsl_type_is_32bit(const struct glsl_type *type);
139
bool glsl_type_is_64bit(const struct glsl_type *type);
140
bool glsl_type_is_void(const struct glsl_type *type);
141
bool glsl_type_is_error(const struct glsl_type *type);
142
bool glsl_type_is_vector(const struct glsl_type *type);
143
bool glsl_type_is_scalar(const struct glsl_type *type);
144
bool glsl_type_is_vector_or_scalar(const struct glsl_type *type);
145
bool glsl_type_is_matrix(const struct glsl_type *type);
146
bool glsl_matrix_type_is_row_major(const struct glsl_type *type);
147
bool glsl_type_is_array(const struct glsl_type *type);
148
bool glsl_type_is_unsized_array(const struct glsl_type *type);
149
bool glsl_type_is_array_of_arrays(const struct glsl_type *type);
150
bool glsl_type_is_array_or_matrix(const struct glsl_type *type);
151
bool glsl_type_is_struct(const struct glsl_type *type);
152
bool glsl_type_is_interface(const struct glsl_type *type);
153
bool glsl_type_is_struct_or_ifc(const struct glsl_type *type);
154
bool glsl_type_is_sampler(const struct glsl_type *type);
155
bool glsl_type_is_bare_sampler(const struct glsl_type *type);
156
bool glsl_type_is_texture(const struct glsl_type *type);
157
bool glsl_type_is_image(const struct glsl_type *type);
158
bool glsl_type_is_dual_slot(const struct glsl_type *type);
159
bool glsl_type_is_numeric(const struct glsl_type *type);
160
bool glsl_type_is_boolean(const struct glsl_type *type);
161
bool glsl_type_is_integer(const struct glsl_type *type);
162
bool glsl_type_contains_64bit(const struct glsl_type *type);
163
bool glsl_type_contains_image(const struct glsl_type *type);
164
bool glsl_sampler_type_is_shadow(const struct glsl_type *type);
165
bool glsl_sampler_type_is_array(const struct glsl_type *type);
166
bool glsl_struct_type_is_packed(const struct glsl_type *type);
167
bool glsl_contains_atomic(const struct glsl_type *type);
168
bool glsl_contains_opaque(const struct glsl_type *type);
170
const struct glsl_type *glsl_void_type(void);
171
const struct glsl_type *glsl_float_type(void);
172
const struct glsl_type *glsl_float16_t_type(void);
173
const struct glsl_type *glsl_double_type(void);
174
const struct glsl_type *glsl_floatN_t_type(unsigned bit_size);
175
const struct glsl_type *glsl_vec_type(unsigned n);
176
const struct glsl_type *glsl_dvec_type(unsigned n);
177
const struct glsl_type *glsl_vec4_type(void);
178
const struct glsl_type *glsl_uvec4_type(void);
179
const struct glsl_type *glsl_ivec4_type(void);
180
const struct glsl_type *glsl_int_type(void);
181
const struct glsl_type *glsl_uint_type(void);
182
const struct glsl_type *glsl_int64_t_type(void);
183
const struct glsl_type *glsl_uint64_t_type(void);
184
const struct glsl_type *glsl_int16_t_type(void);
185
const struct glsl_type *glsl_uint16_t_type(void);
186
const struct glsl_type *glsl_int8_t_type(void);
187
const struct glsl_type *glsl_uint8_t_type(void);
188
const struct glsl_type *glsl_intN_t_type(unsigned bit_size);
189
const struct glsl_type *glsl_uintN_t_type(unsigned bit_size);
190
const struct glsl_type *glsl_bool_type(void);
192
const struct glsl_type *glsl_scalar_type(enum glsl_base_type base_type);
193
const struct glsl_type *glsl_vector_type(enum glsl_base_type base_type,
194
unsigned components);
195
const struct glsl_type * glsl_replace_vector_type(const struct glsl_type *t,
196
unsigned components);
197
const struct glsl_type *glsl_matrix_type(enum glsl_base_type base_type,
198
unsigned rows, unsigned columns);
199
const struct glsl_type *glsl_explicit_matrix_type(const struct glsl_type *mat,
203
const struct glsl_type *glsl_array_type(const struct glsl_type *base,
205
unsigned explicit_stride);
207
const struct glsl_type *glsl_struct_type(const struct glsl_struct_field *fields,
208
unsigned num_fields, const char *name,
210
const struct glsl_type *glsl_interface_type(const struct glsl_struct_field *fields,
212
enum glsl_interface_packing packing,
214
const char *block_name);
215
const struct glsl_type *glsl_sampler_type(enum glsl_sampler_dim dim,
216
bool is_shadow, bool is_array,
217
enum glsl_base_type base_type);
218
const struct glsl_type *glsl_bare_sampler_type();
219
const struct glsl_type *glsl_bare_shadow_sampler_type();
220
const struct glsl_type *glsl_texture_type(enum glsl_sampler_dim dim,
222
enum glsl_base_type base_type);
223
const struct glsl_type *glsl_image_type(enum glsl_sampler_dim dim,
225
enum glsl_base_type base_type);
226
const struct glsl_type * glsl_function_type(const struct glsl_type *return_type,
227
const struct glsl_function_param *params,
228
unsigned num_params);
230
const struct glsl_type *glsl_transposed_type(const struct glsl_type *type);
232
const struct glsl_type *glsl_channel_type(const struct glsl_type *type);
234
const struct glsl_type *glsl_float16_type(const struct glsl_type *type);
235
const struct glsl_type *glsl_int16_type(const struct glsl_type *type);
236
const struct glsl_type *glsl_uint16_type(const struct glsl_type *type);
238
void glsl_get_natural_size_align_bytes(const struct glsl_type *type,
239
unsigned *size, unsigned *align);
240
void glsl_get_vec4_size_align_bytes(const struct glsl_type *type,
241
unsigned *size, unsigned *align);
243
const struct glsl_type *glsl_atomic_uint_type(void);
245
const struct glsl_type *glsl_get_explicit_type_for_size_align(const struct glsl_type *type,
246
glsl_type_size_align_func type_info,
247
unsigned *size, unsigned *align);
249
const struct glsl_type *glsl_type_wrap_in_arrays(const struct glsl_type *type,
250
const struct glsl_type *arrays);
252
const struct glsl_type *glsl_type_replace_vec3_with_vec4(const struct glsl_type *type);
254
unsigned glsl_type_get_sampler_count(const struct glsl_type *type);
255
unsigned glsl_type_get_texture_count(const struct glsl_type *type);
256
unsigned glsl_type_get_image_count(const struct glsl_type *type);
258
bool glsl_type_is_leaf(const struct glsl_type *type);
264
#endif /* NIR_TYPES_H */