1b8e80941Smrg/* Copyright (C) 2018 Red Hat
2b8e80941Smrg *
3b8e80941Smrg * Permission is hereby granted, free of charge, to any person obtaining a
4b8e80941Smrg * copy of this software and associated documentation files (the "Software"),
5b8e80941Smrg * to deal in the Software without restriction, including without limitation
6b8e80941Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
7b8e80941Smrg * and/or sell copies of the Software, and to permit persons to whom the
8b8e80941Smrg * Software is furnished to do so, subject to the following conditions:
9b8e80941Smrg *
10b8e80941Smrg * The above copyright notice and this permission notice (including the next
11b8e80941Smrg * paragraph) shall be included in all copies or substantial portions of the
12b8e80941Smrg * Software.
13b8e80941Smrg *
14b8e80941Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15b8e80941Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16b8e80941Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17b8e80941Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18b8e80941Smrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19b8e80941Smrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20b8e80941Smrg * IN THE SOFTWARE.
21b8e80941Smrg */
22b8e80941Smrg
23b8e80941Smrg#ifndef _NIR_INTRINSICS_
24b8e80941Smrg#define _NIR_INTRINSICS_
25b8e80941Smrg
26b8e80941Smrg
27b8e80941Smrg
28b8e80941Smrgtypedef enum {
29b8e80941Smrg   nir_intrinsic_atomic_counter_add,
30b8e80941Smrg   nir_intrinsic_atomic_counter_add_deref,
31b8e80941Smrg   nir_intrinsic_atomic_counter_and,
32b8e80941Smrg   nir_intrinsic_atomic_counter_and_deref,
33b8e80941Smrg   nir_intrinsic_atomic_counter_comp_swap,
34b8e80941Smrg   nir_intrinsic_atomic_counter_comp_swap_deref,
35b8e80941Smrg   nir_intrinsic_atomic_counter_exchange,
36b8e80941Smrg   nir_intrinsic_atomic_counter_exchange_deref,
37b8e80941Smrg   nir_intrinsic_atomic_counter_inc,
38b8e80941Smrg   nir_intrinsic_atomic_counter_inc_deref,
39b8e80941Smrg   nir_intrinsic_atomic_counter_max,
40b8e80941Smrg   nir_intrinsic_atomic_counter_max_deref,
41b8e80941Smrg   nir_intrinsic_atomic_counter_min,
42b8e80941Smrg   nir_intrinsic_atomic_counter_min_deref,
43b8e80941Smrg   nir_intrinsic_atomic_counter_or,
44b8e80941Smrg   nir_intrinsic_atomic_counter_or_deref,
45b8e80941Smrg   nir_intrinsic_atomic_counter_post_dec,
46b8e80941Smrg   nir_intrinsic_atomic_counter_post_dec_deref,
47b8e80941Smrg   nir_intrinsic_atomic_counter_pre_dec,
48b8e80941Smrg   nir_intrinsic_atomic_counter_pre_dec_deref,
49b8e80941Smrg   nir_intrinsic_atomic_counter_read,
50b8e80941Smrg   nir_intrinsic_atomic_counter_read_deref,
51b8e80941Smrg   nir_intrinsic_atomic_counter_xor,
52b8e80941Smrg   nir_intrinsic_atomic_counter_xor_deref,
53b8e80941Smrg   nir_intrinsic_ballot,
54b8e80941Smrg   nir_intrinsic_ballot_bit_count_exclusive,
55b8e80941Smrg   nir_intrinsic_ballot_bit_count_inclusive,
56b8e80941Smrg   nir_intrinsic_ballot_bit_count_reduce,
57b8e80941Smrg   nir_intrinsic_ballot_bitfield_extract,
58b8e80941Smrg   nir_intrinsic_ballot_find_lsb,
59b8e80941Smrg   nir_intrinsic_ballot_find_msb,
60b8e80941Smrg   nir_intrinsic_barrier,
61b8e80941Smrg   nir_intrinsic_begin_invocation_interlock,
62b8e80941Smrg   nir_intrinsic_bindless_image_atomic_add,
63b8e80941Smrg   nir_intrinsic_bindless_image_atomic_and,
64b8e80941Smrg   nir_intrinsic_bindless_image_atomic_comp_swap,
65b8e80941Smrg   nir_intrinsic_bindless_image_atomic_exchange,
66b8e80941Smrg   nir_intrinsic_bindless_image_atomic_fadd,
67b8e80941Smrg   nir_intrinsic_bindless_image_atomic_max,
68b8e80941Smrg   nir_intrinsic_bindless_image_atomic_min,
69b8e80941Smrg   nir_intrinsic_bindless_image_atomic_or,
70b8e80941Smrg   nir_intrinsic_bindless_image_atomic_xor,
71b8e80941Smrg   nir_intrinsic_bindless_image_load,
72b8e80941Smrg   nir_intrinsic_bindless_image_load_raw_intel,
73b8e80941Smrg   nir_intrinsic_bindless_image_samples,
74b8e80941Smrg   nir_intrinsic_bindless_image_size,
75b8e80941Smrg   nir_intrinsic_bindless_image_store,
76b8e80941Smrg   nir_intrinsic_bindless_image_store_raw_intel,
77b8e80941Smrg   nir_intrinsic_copy_deref,
78b8e80941Smrg   nir_intrinsic_deref_atomic_add,
79b8e80941Smrg   nir_intrinsic_deref_atomic_and,
80b8e80941Smrg   nir_intrinsic_deref_atomic_comp_swap,
81b8e80941Smrg   nir_intrinsic_deref_atomic_exchange,
82b8e80941Smrg   nir_intrinsic_deref_atomic_fadd,
83b8e80941Smrg   nir_intrinsic_deref_atomic_fcomp_swap,
84b8e80941Smrg   nir_intrinsic_deref_atomic_fmax,
85b8e80941Smrg   nir_intrinsic_deref_atomic_fmin,
86b8e80941Smrg   nir_intrinsic_deref_atomic_imax,
87b8e80941Smrg   nir_intrinsic_deref_atomic_imin,
88b8e80941Smrg   nir_intrinsic_deref_atomic_or,
89b8e80941Smrg   nir_intrinsic_deref_atomic_umax,
90b8e80941Smrg   nir_intrinsic_deref_atomic_umin,
91b8e80941Smrg   nir_intrinsic_deref_atomic_xor,
92b8e80941Smrg   nir_intrinsic_deref_buffer_array_length,
93b8e80941Smrg   nir_intrinsic_discard,
94b8e80941Smrg   nir_intrinsic_discard_if,
95b8e80941Smrg   nir_intrinsic_elect,
96b8e80941Smrg   nir_intrinsic_emit_vertex,
97b8e80941Smrg   nir_intrinsic_emit_vertex_with_counter,
98b8e80941Smrg   nir_intrinsic_end_invocation_interlock,
99b8e80941Smrg   nir_intrinsic_end_primitive,
100b8e80941Smrg   nir_intrinsic_end_primitive_with_counter,
101b8e80941Smrg   nir_intrinsic_exclusive_scan,
102b8e80941Smrg   nir_intrinsic_first_invocation,
103b8e80941Smrg   nir_intrinsic_get_buffer_size,
104b8e80941Smrg   nir_intrinsic_global_atomic_add,
105b8e80941Smrg   nir_intrinsic_global_atomic_and,
106b8e80941Smrg   nir_intrinsic_global_atomic_comp_swap,
107b8e80941Smrg   nir_intrinsic_global_atomic_exchange,
108b8e80941Smrg   nir_intrinsic_global_atomic_fadd,
109b8e80941Smrg   nir_intrinsic_global_atomic_fcomp_swap,
110b8e80941Smrg   nir_intrinsic_global_atomic_fmax,
111b8e80941Smrg   nir_intrinsic_global_atomic_fmin,
112b8e80941Smrg   nir_intrinsic_global_atomic_imax,
113b8e80941Smrg   nir_intrinsic_global_atomic_imin,
114b8e80941Smrg   nir_intrinsic_global_atomic_or,
115b8e80941Smrg   nir_intrinsic_global_atomic_umax,
116b8e80941Smrg   nir_intrinsic_global_atomic_umin,
117b8e80941Smrg   nir_intrinsic_global_atomic_xor,
118b8e80941Smrg   nir_intrinsic_group_memory_barrier,
119b8e80941Smrg   nir_intrinsic_image_atomic_add,
120b8e80941Smrg   nir_intrinsic_image_atomic_and,
121b8e80941Smrg   nir_intrinsic_image_atomic_comp_swap,
122b8e80941Smrg   nir_intrinsic_image_atomic_exchange,
123b8e80941Smrg   nir_intrinsic_image_atomic_fadd,
124b8e80941Smrg   nir_intrinsic_image_atomic_max,
125b8e80941Smrg   nir_intrinsic_image_atomic_min,
126b8e80941Smrg   nir_intrinsic_image_atomic_or,
127b8e80941Smrg   nir_intrinsic_image_atomic_xor,
128b8e80941Smrg   nir_intrinsic_image_deref_atomic_add,
129b8e80941Smrg   nir_intrinsic_image_deref_atomic_and,
130b8e80941Smrg   nir_intrinsic_image_deref_atomic_comp_swap,
131b8e80941Smrg   nir_intrinsic_image_deref_atomic_exchange,
132b8e80941Smrg   nir_intrinsic_image_deref_atomic_fadd,
133b8e80941Smrg   nir_intrinsic_image_deref_atomic_max,
134b8e80941Smrg   nir_intrinsic_image_deref_atomic_min,
135b8e80941Smrg   nir_intrinsic_image_deref_atomic_or,
136b8e80941Smrg   nir_intrinsic_image_deref_atomic_xor,
137b8e80941Smrg   nir_intrinsic_image_deref_load,
138b8e80941Smrg   nir_intrinsic_image_deref_load_param_intel,
139b8e80941Smrg   nir_intrinsic_image_deref_load_raw_intel,
140b8e80941Smrg   nir_intrinsic_image_deref_samples,
141b8e80941Smrg   nir_intrinsic_image_deref_size,
142b8e80941Smrg   nir_intrinsic_image_deref_store,
143b8e80941Smrg   nir_intrinsic_image_deref_store_raw_intel,
144b8e80941Smrg   nir_intrinsic_image_load,
145b8e80941Smrg   nir_intrinsic_image_load_raw_intel,
146b8e80941Smrg   nir_intrinsic_image_samples,
147b8e80941Smrg   nir_intrinsic_image_size,
148b8e80941Smrg   nir_intrinsic_image_store,
149b8e80941Smrg   nir_intrinsic_image_store_raw_intel,
150b8e80941Smrg   nir_intrinsic_inclusive_scan,
151b8e80941Smrg   nir_intrinsic_interp_deref_at_centroid,
152b8e80941Smrg   nir_intrinsic_interp_deref_at_offset,
153b8e80941Smrg   nir_intrinsic_interp_deref_at_sample,
154b8e80941Smrg   nir_intrinsic_load_alpha_ref_float,
155b8e80941Smrg   nir_intrinsic_load_barycentric_at_offset,
156b8e80941Smrg   nir_intrinsic_load_barycentric_at_sample,
157b8e80941Smrg   nir_intrinsic_load_barycentric_centroid,
158b8e80941Smrg   nir_intrinsic_load_barycentric_pixel,
159b8e80941Smrg   nir_intrinsic_load_barycentric_sample,
160b8e80941Smrg   nir_intrinsic_load_base_instance,
161b8e80941Smrg   nir_intrinsic_load_base_vertex,
162b8e80941Smrg   nir_intrinsic_load_blend_const_color_a_float,
163b8e80941Smrg   nir_intrinsic_load_blend_const_color_aaaa8888_unorm,
164b8e80941Smrg   nir_intrinsic_load_blend_const_color_b_float,
165b8e80941Smrg   nir_intrinsic_load_blend_const_color_g_float,
166b8e80941Smrg   nir_intrinsic_load_blend_const_color_r_float,
167b8e80941Smrg   nir_intrinsic_load_blend_const_color_rgba8888_unorm,
168b8e80941Smrg   nir_intrinsic_load_constant,
169b8e80941Smrg   nir_intrinsic_load_deref,
170b8e80941Smrg   nir_intrinsic_load_draw_id,
171b8e80941Smrg   nir_intrinsic_load_first_vertex,
172b8e80941Smrg   nir_intrinsic_load_frag_coord,
173b8e80941Smrg   nir_intrinsic_load_front_face,
174b8e80941Smrg   nir_intrinsic_load_global,
175b8e80941Smrg   nir_intrinsic_load_global_invocation_id,
176b8e80941Smrg   nir_intrinsic_load_global_invocation_index,
177b8e80941Smrg   nir_intrinsic_load_helper_invocation,
178b8e80941Smrg   nir_intrinsic_load_input,
179b8e80941Smrg   nir_intrinsic_load_instance_id,
180b8e80941Smrg   nir_intrinsic_load_interpolated_input,
181b8e80941Smrg   nir_intrinsic_load_invocation_id,
182b8e80941Smrg   nir_intrinsic_load_is_indexed_draw,
183b8e80941Smrg   nir_intrinsic_load_kernel_input,
184b8e80941Smrg   nir_intrinsic_load_layer_id,
185b8e80941Smrg   nir_intrinsic_load_local_group_size,
186b8e80941Smrg   nir_intrinsic_load_local_invocation_id,
187b8e80941Smrg   nir_intrinsic_load_local_invocation_index,
188b8e80941Smrg   nir_intrinsic_load_num_subgroups,
189b8e80941Smrg   nir_intrinsic_load_num_work_groups,
190b8e80941Smrg   nir_intrinsic_load_output,
191b8e80941Smrg   nir_intrinsic_load_param,
192b8e80941Smrg   nir_intrinsic_load_patch_vertices_in,
193b8e80941Smrg   nir_intrinsic_load_per_vertex_input,
194b8e80941Smrg   nir_intrinsic_load_per_vertex_output,
195b8e80941Smrg   nir_intrinsic_load_primitive_id,
196b8e80941Smrg   nir_intrinsic_load_push_constant,
197b8e80941Smrg   nir_intrinsic_load_sample_id,
198b8e80941Smrg   nir_intrinsic_load_sample_id_no_per_sample,
199b8e80941Smrg   nir_intrinsic_load_sample_mask_in,
200b8e80941Smrg   nir_intrinsic_load_sample_pos,
201b8e80941Smrg   nir_intrinsic_load_sample_pos_from_id,
202b8e80941Smrg   nir_intrinsic_load_scratch,
203b8e80941Smrg   nir_intrinsic_load_shared,
204b8e80941Smrg   nir_intrinsic_load_size_ir3,
205b8e80941Smrg   nir_intrinsic_load_ssbo,
206b8e80941Smrg   nir_intrinsic_load_ssbo_ir3,
207b8e80941Smrg   nir_intrinsic_load_subgroup_eq_mask,
208b8e80941Smrg   nir_intrinsic_load_subgroup_ge_mask,
209b8e80941Smrg   nir_intrinsic_load_subgroup_gt_mask,
210b8e80941Smrg   nir_intrinsic_load_subgroup_id,
211b8e80941Smrg   nir_intrinsic_load_subgroup_invocation,
212b8e80941Smrg   nir_intrinsic_load_subgroup_le_mask,
213b8e80941Smrg   nir_intrinsic_load_subgroup_lt_mask,
214b8e80941Smrg   nir_intrinsic_load_subgroup_size,
215b8e80941Smrg   nir_intrinsic_load_tess_coord,
216b8e80941Smrg   nir_intrinsic_load_tess_level_inner,
217b8e80941Smrg   nir_intrinsic_load_tess_level_outer,
218b8e80941Smrg   nir_intrinsic_load_ubo,
219b8e80941Smrg   nir_intrinsic_load_uniform,
220b8e80941Smrg   nir_intrinsic_load_user_clip_plane,
221b8e80941Smrg   nir_intrinsic_load_vertex_id,
222b8e80941Smrg   nir_intrinsic_load_vertex_id_zero_base,
223b8e80941Smrg   nir_intrinsic_load_view_index,
224b8e80941Smrg   nir_intrinsic_load_viewport_offset,
225b8e80941Smrg   nir_intrinsic_load_viewport_scale,
226b8e80941Smrg   nir_intrinsic_load_viewport_x_scale,
227b8e80941Smrg   nir_intrinsic_load_viewport_y_scale,
228b8e80941Smrg   nir_intrinsic_load_viewport_z_offset,
229b8e80941Smrg   nir_intrinsic_load_viewport_z_scale,
230b8e80941Smrg   nir_intrinsic_load_vulkan_descriptor,
231b8e80941Smrg   nir_intrinsic_load_work_dim,
232b8e80941Smrg   nir_intrinsic_load_work_group_id,
233b8e80941Smrg   nir_intrinsic_memory_barrier,
234b8e80941Smrg   nir_intrinsic_memory_barrier_atomic_counter,
235b8e80941Smrg   nir_intrinsic_memory_barrier_buffer,
236b8e80941Smrg   nir_intrinsic_memory_barrier_image,
237b8e80941Smrg   nir_intrinsic_memory_barrier_shared,
238b8e80941Smrg   nir_intrinsic_nop,
239b8e80941Smrg   nir_intrinsic_quad_broadcast,
240b8e80941Smrg   nir_intrinsic_quad_swap_diagonal,
241b8e80941Smrg   nir_intrinsic_quad_swap_horizontal,
242b8e80941Smrg   nir_intrinsic_quad_swap_vertical,
243b8e80941Smrg   nir_intrinsic_read_first_invocation,
244b8e80941Smrg   nir_intrinsic_read_invocation,
245b8e80941Smrg   nir_intrinsic_reduce,
246b8e80941Smrg   nir_intrinsic_set_vertex_count,
247b8e80941Smrg   nir_intrinsic_shader_clock,
248b8e80941Smrg   nir_intrinsic_shared_atomic_add,
249b8e80941Smrg   nir_intrinsic_shared_atomic_and,
250b8e80941Smrg   nir_intrinsic_shared_atomic_comp_swap,
251b8e80941Smrg   nir_intrinsic_shared_atomic_exchange,
252b8e80941Smrg   nir_intrinsic_shared_atomic_fadd,
253b8e80941Smrg   nir_intrinsic_shared_atomic_fcomp_swap,
254b8e80941Smrg   nir_intrinsic_shared_atomic_fmax,
255b8e80941Smrg   nir_intrinsic_shared_atomic_fmin,
256b8e80941Smrg   nir_intrinsic_shared_atomic_imax,
257b8e80941Smrg   nir_intrinsic_shared_atomic_imin,
258b8e80941Smrg   nir_intrinsic_shared_atomic_or,
259b8e80941Smrg   nir_intrinsic_shared_atomic_umax,
260b8e80941Smrg   nir_intrinsic_shared_atomic_umin,
261b8e80941Smrg   nir_intrinsic_shared_atomic_xor,
262b8e80941Smrg   nir_intrinsic_shuffle,
263b8e80941Smrg   nir_intrinsic_shuffle_down,
264b8e80941Smrg   nir_intrinsic_shuffle_up,
265b8e80941Smrg   nir_intrinsic_shuffle_xor,
266b8e80941Smrg   nir_intrinsic_ssbo_atomic_add,
267b8e80941Smrg   nir_intrinsic_ssbo_atomic_add_ir3,
268b8e80941Smrg   nir_intrinsic_ssbo_atomic_and,
269b8e80941Smrg   nir_intrinsic_ssbo_atomic_and_ir3,
270b8e80941Smrg   nir_intrinsic_ssbo_atomic_comp_swap,
271b8e80941Smrg   nir_intrinsic_ssbo_atomic_comp_swap_ir3,
272b8e80941Smrg   nir_intrinsic_ssbo_atomic_exchange,
273b8e80941Smrg   nir_intrinsic_ssbo_atomic_exchange_ir3,
274b8e80941Smrg   nir_intrinsic_ssbo_atomic_fadd,
275b8e80941Smrg   nir_intrinsic_ssbo_atomic_fcomp_swap,
276b8e80941Smrg   nir_intrinsic_ssbo_atomic_fmax,
277b8e80941Smrg   nir_intrinsic_ssbo_atomic_fmin,
278b8e80941Smrg   nir_intrinsic_ssbo_atomic_imax,
279b8e80941Smrg   nir_intrinsic_ssbo_atomic_imax_ir3,
280b8e80941Smrg   nir_intrinsic_ssbo_atomic_imin,
281b8e80941Smrg   nir_intrinsic_ssbo_atomic_imin_ir3,
282b8e80941Smrg   nir_intrinsic_ssbo_atomic_or,
283b8e80941Smrg   nir_intrinsic_ssbo_atomic_or_ir3,
284b8e80941Smrg   nir_intrinsic_ssbo_atomic_umax,
285b8e80941Smrg   nir_intrinsic_ssbo_atomic_umax_ir3,
286b8e80941Smrg   nir_intrinsic_ssbo_atomic_umin,
287b8e80941Smrg   nir_intrinsic_ssbo_atomic_umin_ir3,
288b8e80941Smrg   nir_intrinsic_ssbo_atomic_xor,
289b8e80941Smrg   nir_intrinsic_ssbo_atomic_xor_ir3,
290b8e80941Smrg   nir_intrinsic_store_deref,
291b8e80941Smrg   nir_intrinsic_store_global,
292b8e80941Smrg   nir_intrinsic_store_output,
293b8e80941Smrg   nir_intrinsic_store_per_vertex_output,
294b8e80941Smrg   nir_intrinsic_store_scratch,
295b8e80941Smrg   nir_intrinsic_store_shared,
296b8e80941Smrg   nir_intrinsic_store_ssbo,
297b8e80941Smrg   nir_intrinsic_store_ssbo_ir3,
298b8e80941Smrg   nir_intrinsic_vote_all,
299b8e80941Smrg   nir_intrinsic_vote_any,
300b8e80941Smrg   nir_intrinsic_vote_feq,
301b8e80941Smrg   nir_intrinsic_vote_ieq,
302b8e80941Smrg   nir_intrinsic_vulkan_resource_index,
303b8e80941Smrg   nir_intrinsic_vulkan_resource_reindex,
304b8e80941Smrg
305b8e80941Smrg   nir_last_intrinsic = nir_intrinsic_vulkan_resource_reindex,
306b8e80941Smrg   nir_num_intrinsics = nir_last_intrinsic + 1
307b8e80941Smrg} nir_intrinsic_op;
308b8e80941Smrg
309b8e80941Smrg#endif /* _NIR_INTRINSICS_ */