nir_intrinsics.h revision 10e230b6
110e230b6Smaya/* Copyright (C) 2018 Red Hat
210e230b6Smaya *
310e230b6Smaya * Permission is hereby granted, free of charge, to any person obtaining a
410e230b6Smaya * copy of this software and associated documentation files (the "Software"),
510e230b6Smaya * to deal in the Software without restriction, including without limitation
610e230b6Smaya * the rights to use, copy, modify, merge, publish, distribute, sublicense,
710e230b6Smaya * and/or sell copies of the Software, and to permit persons to whom the
810e230b6Smaya * Software is furnished to do so, subject to the following conditions:
910e230b6Smaya *
1010e230b6Smaya * The above copyright notice and this permission notice (including the next
1110e230b6Smaya * paragraph) shall be included in all copies or substantial portions of the
1210e230b6Smaya * Software.
1310e230b6Smaya *
1410e230b6Smaya * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1510e230b6Smaya * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1610e230b6Smaya * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
1710e230b6Smaya * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1810e230b6Smaya * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1910e230b6Smaya * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
2010e230b6Smaya * IN THE SOFTWARE.
2110e230b6Smaya */
2210e230b6Smaya
2310e230b6Smaya#ifndef _NIR_INTRINSICS_
2410e230b6Smaya#define _NIR_INTRINSICS_
2510e230b6Smaya
2610e230b6Smaya
2710e230b6Smaya
2810e230b6Smayatypedef enum {
2910e230b6Smaya   nir_intrinsic_atomic_counter_add,
3010e230b6Smaya   nir_intrinsic_atomic_counter_add_deref,
3110e230b6Smaya   nir_intrinsic_atomic_counter_and,
3210e230b6Smaya   nir_intrinsic_atomic_counter_and_deref,
3310e230b6Smaya   nir_intrinsic_atomic_counter_comp_swap,
3410e230b6Smaya   nir_intrinsic_atomic_counter_comp_swap_deref,
3510e230b6Smaya   nir_intrinsic_atomic_counter_exchange,
3610e230b6Smaya   nir_intrinsic_atomic_counter_exchange_deref,
3710e230b6Smaya   nir_intrinsic_atomic_counter_inc,
3810e230b6Smaya   nir_intrinsic_atomic_counter_inc_deref,
3910e230b6Smaya   nir_intrinsic_atomic_counter_max,
4010e230b6Smaya   nir_intrinsic_atomic_counter_max_deref,
4110e230b6Smaya   nir_intrinsic_atomic_counter_min,
4210e230b6Smaya   nir_intrinsic_atomic_counter_min_deref,
4310e230b6Smaya   nir_intrinsic_atomic_counter_or,
4410e230b6Smaya   nir_intrinsic_atomic_counter_or_deref,
4510e230b6Smaya   nir_intrinsic_atomic_counter_post_dec,
4610e230b6Smaya   nir_intrinsic_atomic_counter_post_dec_deref,
4710e230b6Smaya   nir_intrinsic_atomic_counter_pre_dec,
4810e230b6Smaya   nir_intrinsic_atomic_counter_pre_dec_deref,
4910e230b6Smaya   nir_intrinsic_atomic_counter_read,
5010e230b6Smaya   nir_intrinsic_atomic_counter_read_deref,
5110e230b6Smaya   nir_intrinsic_atomic_counter_xor,
5210e230b6Smaya   nir_intrinsic_atomic_counter_xor_deref,
5310e230b6Smaya   nir_intrinsic_ballot,
5410e230b6Smaya   nir_intrinsic_ballot_bit_count_exclusive,
5510e230b6Smaya   nir_intrinsic_ballot_bit_count_inclusive,
5610e230b6Smaya   nir_intrinsic_ballot_bit_count_reduce,
5710e230b6Smaya   nir_intrinsic_ballot_bitfield_extract,
5810e230b6Smaya   nir_intrinsic_ballot_find_lsb,
5910e230b6Smaya   nir_intrinsic_ballot_find_msb,
6010e230b6Smaya   nir_intrinsic_barrier,
6110e230b6Smaya   nir_intrinsic_begin_invocation_interlock,
6210e230b6Smaya   nir_intrinsic_bindless_image_atomic_add,
6310e230b6Smaya   nir_intrinsic_bindless_image_atomic_and,
6410e230b6Smaya   nir_intrinsic_bindless_image_atomic_comp_swap,
6510e230b6Smaya   nir_intrinsic_bindless_image_atomic_exchange,
6610e230b6Smaya   nir_intrinsic_bindless_image_atomic_fadd,
6710e230b6Smaya   nir_intrinsic_bindless_image_atomic_max,
6810e230b6Smaya   nir_intrinsic_bindless_image_atomic_min,
6910e230b6Smaya   nir_intrinsic_bindless_image_atomic_or,
7010e230b6Smaya   nir_intrinsic_bindless_image_atomic_xor,
7110e230b6Smaya   nir_intrinsic_bindless_image_load,
7210e230b6Smaya   nir_intrinsic_bindless_image_load_raw_intel,
7310e230b6Smaya   nir_intrinsic_bindless_image_samples,
7410e230b6Smaya   nir_intrinsic_bindless_image_size,
7510e230b6Smaya   nir_intrinsic_bindless_image_store,
7610e230b6Smaya   nir_intrinsic_bindless_image_store_raw_intel,
7710e230b6Smaya   nir_intrinsic_copy_deref,
7810e230b6Smaya   nir_intrinsic_deref_atomic_add,
7910e230b6Smaya   nir_intrinsic_deref_atomic_and,
8010e230b6Smaya   nir_intrinsic_deref_atomic_comp_swap,
8110e230b6Smaya   nir_intrinsic_deref_atomic_exchange,
8210e230b6Smaya   nir_intrinsic_deref_atomic_fadd,
8310e230b6Smaya   nir_intrinsic_deref_atomic_fcomp_swap,
8410e230b6Smaya   nir_intrinsic_deref_atomic_fmax,
8510e230b6Smaya   nir_intrinsic_deref_atomic_fmin,
8610e230b6Smaya   nir_intrinsic_deref_atomic_imax,
8710e230b6Smaya   nir_intrinsic_deref_atomic_imin,
8810e230b6Smaya   nir_intrinsic_deref_atomic_or,
8910e230b6Smaya   nir_intrinsic_deref_atomic_umax,
9010e230b6Smaya   nir_intrinsic_deref_atomic_umin,
9110e230b6Smaya   nir_intrinsic_deref_atomic_xor,
9210e230b6Smaya   nir_intrinsic_deref_buffer_array_length,
9310e230b6Smaya   nir_intrinsic_discard,
9410e230b6Smaya   nir_intrinsic_discard_if,
9510e230b6Smaya   nir_intrinsic_elect,
9610e230b6Smaya   nir_intrinsic_emit_vertex,
9710e230b6Smaya   nir_intrinsic_emit_vertex_with_counter,
9810e230b6Smaya   nir_intrinsic_end_invocation_interlock,
9910e230b6Smaya   nir_intrinsic_end_primitive,
10010e230b6Smaya   nir_intrinsic_end_primitive_with_counter,
10110e230b6Smaya   nir_intrinsic_exclusive_scan,
10210e230b6Smaya   nir_intrinsic_first_invocation,
10310e230b6Smaya   nir_intrinsic_get_buffer_size,
10410e230b6Smaya   nir_intrinsic_global_atomic_add,
10510e230b6Smaya   nir_intrinsic_global_atomic_and,
10610e230b6Smaya   nir_intrinsic_global_atomic_comp_swap,
10710e230b6Smaya   nir_intrinsic_global_atomic_exchange,
10810e230b6Smaya   nir_intrinsic_global_atomic_fadd,
10910e230b6Smaya   nir_intrinsic_global_atomic_fcomp_swap,
11010e230b6Smaya   nir_intrinsic_global_atomic_fmax,
11110e230b6Smaya   nir_intrinsic_global_atomic_fmin,
11210e230b6Smaya   nir_intrinsic_global_atomic_imax,
11310e230b6Smaya   nir_intrinsic_global_atomic_imin,
11410e230b6Smaya   nir_intrinsic_global_atomic_or,
11510e230b6Smaya   nir_intrinsic_global_atomic_umax,
11610e230b6Smaya   nir_intrinsic_global_atomic_umin,
11710e230b6Smaya   nir_intrinsic_global_atomic_xor,
11810e230b6Smaya   nir_intrinsic_group_memory_barrier,
11910e230b6Smaya   nir_intrinsic_image_atomic_add,
12010e230b6Smaya   nir_intrinsic_image_atomic_and,
12110e230b6Smaya   nir_intrinsic_image_atomic_comp_swap,
12210e230b6Smaya   nir_intrinsic_image_atomic_exchange,
12310e230b6Smaya   nir_intrinsic_image_atomic_fadd,
12410e230b6Smaya   nir_intrinsic_image_atomic_max,
12510e230b6Smaya   nir_intrinsic_image_atomic_min,
12610e230b6Smaya   nir_intrinsic_image_atomic_or,
12710e230b6Smaya   nir_intrinsic_image_atomic_xor,
12810e230b6Smaya   nir_intrinsic_image_deref_atomic_add,
12910e230b6Smaya   nir_intrinsic_image_deref_atomic_and,
13010e230b6Smaya   nir_intrinsic_image_deref_atomic_comp_swap,
13110e230b6Smaya   nir_intrinsic_image_deref_atomic_exchange,
13210e230b6Smaya   nir_intrinsic_image_deref_atomic_fadd,
13310e230b6Smaya   nir_intrinsic_image_deref_atomic_max,
13410e230b6Smaya   nir_intrinsic_image_deref_atomic_min,
13510e230b6Smaya   nir_intrinsic_image_deref_atomic_or,
13610e230b6Smaya   nir_intrinsic_image_deref_atomic_xor,
13710e230b6Smaya   nir_intrinsic_image_deref_load,
13810e230b6Smaya   nir_intrinsic_image_deref_load_param_intel,
13910e230b6Smaya   nir_intrinsic_image_deref_load_raw_intel,
14010e230b6Smaya   nir_intrinsic_image_deref_samples,
14110e230b6Smaya   nir_intrinsic_image_deref_size,
14210e230b6Smaya   nir_intrinsic_image_deref_store,
14310e230b6Smaya   nir_intrinsic_image_deref_store_raw_intel,
14410e230b6Smaya   nir_intrinsic_image_load,
14510e230b6Smaya   nir_intrinsic_image_load_raw_intel,
14610e230b6Smaya   nir_intrinsic_image_samples,
14710e230b6Smaya   nir_intrinsic_image_size,
14810e230b6Smaya   nir_intrinsic_image_store,
14910e230b6Smaya   nir_intrinsic_image_store_raw_intel,
15010e230b6Smaya   nir_intrinsic_inclusive_scan,
15110e230b6Smaya   nir_intrinsic_interp_deref_at_centroid,
15210e230b6Smaya   nir_intrinsic_interp_deref_at_offset,
15310e230b6Smaya   nir_intrinsic_interp_deref_at_sample,
15410e230b6Smaya   nir_intrinsic_load_alpha_ref_float,
15510e230b6Smaya   nir_intrinsic_load_barycentric_at_offset,
15610e230b6Smaya   nir_intrinsic_load_barycentric_at_sample,
15710e230b6Smaya   nir_intrinsic_load_barycentric_centroid,
15810e230b6Smaya   nir_intrinsic_load_barycentric_pixel,
15910e230b6Smaya   nir_intrinsic_load_barycentric_sample,
16010e230b6Smaya   nir_intrinsic_load_base_instance,
16110e230b6Smaya   nir_intrinsic_load_base_vertex,
16210e230b6Smaya   nir_intrinsic_load_blend_const_color_a_float,
16310e230b6Smaya   nir_intrinsic_load_blend_const_color_aaaa8888_unorm,
16410e230b6Smaya   nir_intrinsic_load_blend_const_color_b_float,
16510e230b6Smaya   nir_intrinsic_load_blend_const_color_g_float,
16610e230b6Smaya   nir_intrinsic_load_blend_const_color_r_float,
16710e230b6Smaya   nir_intrinsic_load_blend_const_color_rgba8888_unorm,
16810e230b6Smaya   nir_intrinsic_load_constant,
16910e230b6Smaya   nir_intrinsic_load_deref,
17010e230b6Smaya   nir_intrinsic_load_draw_id,
17110e230b6Smaya   nir_intrinsic_load_first_vertex,
17210e230b6Smaya   nir_intrinsic_load_frag_coord,
17310e230b6Smaya   nir_intrinsic_load_front_face,
17410e230b6Smaya   nir_intrinsic_load_global,
17510e230b6Smaya   nir_intrinsic_load_global_invocation_id,
17610e230b6Smaya   nir_intrinsic_load_global_invocation_index,
17710e230b6Smaya   nir_intrinsic_load_helper_invocation,
17810e230b6Smaya   nir_intrinsic_load_input,
17910e230b6Smaya   nir_intrinsic_load_instance_id,
18010e230b6Smaya   nir_intrinsic_load_interpolated_input,
18110e230b6Smaya   nir_intrinsic_load_invocation_id,
18210e230b6Smaya   nir_intrinsic_load_is_indexed_draw,
18310e230b6Smaya   nir_intrinsic_load_kernel_input,
18410e230b6Smaya   nir_intrinsic_load_layer_id,
18510e230b6Smaya   nir_intrinsic_load_local_group_size,
18610e230b6Smaya   nir_intrinsic_load_local_invocation_id,
18710e230b6Smaya   nir_intrinsic_load_local_invocation_index,
18810e230b6Smaya   nir_intrinsic_load_num_subgroups,
18910e230b6Smaya   nir_intrinsic_load_num_work_groups,
19010e230b6Smaya   nir_intrinsic_load_output,
19110e230b6Smaya   nir_intrinsic_load_param,
19210e230b6Smaya   nir_intrinsic_load_patch_vertices_in,
19310e230b6Smaya   nir_intrinsic_load_per_vertex_input,
19410e230b6Smaya   nir_intrinsic_load_per_vertex_output,
19510e230b6Smaya   nir_intrinsic_load_primitive_id,
19610e230b6Smaya   nir_intrinsic_load_push_constant,
19710e230b6Smaya   nir_intrinsic_load_sample_id,
19810e230b6Smaya   nir_intrinsic_load_sample_id_no_per_sample,
19910e230b6Smaya   nir_intrinsic_load_sample_mask_in,
20010e230b6Smaya   nir_intrinsic_load_sample_pos,
20110e230b6Smaya   nir_intrinsic_load_sample_pos_from_id,
20210e230b6Smaya   nir_intrinsic_load_scratch,
20310e230b6Smaya   nir_intrinsic_load_shared,
20410e230b6Smaya   nir_intrinsic_load_size_ir3,
20510e230b6Smaya   nir_intrinsic_load_ssbo,
20610e230b6Smaya   nir_intrinsic_load_ssbo_ir3,
20710e230b6Smaya   nir_intrinsic_load_subgroup_eq_mask,
20810e230b6Smaya   nir_intrinsic_load_subgroup_ge_mask,
20910e230b6Smaya   nir_intrinsic_load_subgroup_gt_mask,
21010e230b6Smaya   nir_intrinsic_load_subgroup_id,
21110e230b6Smaya   nir_intrinsic_load_subgroup_invocation,
21210e230b6Smaya   nir_intrinsic_load_subgroup_le_mask,
21310e230b6Smaya   nir_intrinsic_load_subgroup_lt_mask,
21410e230b6Smaya   nir_intrinsic_load_subgroup_size,
21510e230b6Smaya   nir_intrinsic_load_tess_coord,
21610e230b6Smaya   nir_intrinsic_load_tess_level_inner,
21710e230b6Smaya   nir_intrinsic_load_tess_level_outer,
21810e230b6Smaya   nir_intrinsic_load_ubo,
21910e230b6Smaya   nir_intrinsic_load_uniform,
22010e230b6Smaya   nir_intrinsic_load_user_clip_plane,
22110e230b6Smaya   nir_intrinsic_load_vertex_id,
22210e230b6Smaya   nir_intrinsic_load_vertex_id_zero_base,
22310e230b6Smaya   nir_intrinsic_load_view_index,
22410e230b6Smaya   nir_intrinsic_load_viewport_offset,
22510e230b6Smaya   nir_intrinsic_load_viewport_scale,
22610e230b6Smaya   nir_intrinsic_load_viewport_x_scale,
22710e230b6Smaya   nir_intrinsic_load_viewport_y_scale,
22810e230b6Smaya   nir_intrinsic_load_viewport_z_offset,
22910e230b6Smaya   nir_intrinsic_load_viewport_z_scale,
23010e230b6Smaya   nir_intrinsic_load_vulkan_descriptor,
23110e230b6Smaya   nir_intrinsic_load_work_dim,
23210e230b6Smaya   nir_intrinsic_load_work_group_id,
23310e230b6Smaya   nir_intrinsic_memory_barrier,
23410e230b6Smaya   nir_intrinsic_memory_barrier_atomic_counter,
23510e230b6Smaya   nir_intrinsic_memory_barrier_buffer,
23610e230b6Smaya   nir_intrinsic_memory_barrier_image,
23710e230b6Smaya   nir_intrinsic_memory_barrier_shared,
23810e230b6Smaya   nir_intrinsic_nop,
23910e230b6Smaya   nir_intrinsic_quad_broadcast,
24010e230b6Smaya   nir_intrinsic_quad_swap_diagonal,
24110e230b6Smaya   nir_intrinsic_quad_swap_horizontal,
24210e230b6Smaya   nir_intrinsic_quad_swap_vertical,
24310e230b6Smaya   nir_intrinsic_read_first_invocation,
24410e230b6Smaya   nir_intrinsic_read_invocation,
24510e230b6Smaya   nir_intrinsic_reduce,
24610e230b6Smaya   nir_intrinsic_set_vertex_count,
24710e230b6Smaya   nir_intrinsic_shader_clock,
24810e230b6Smaya   nir_intrinsic_shared_atomic_add,
24910e230b6Smaya   nir_intrinsic_shared_atomic_and,
25010e230b6Smaya   nir_intrinsic_shared_atomic_comp_swap,
25110e230b6Smaya   nir_intrinsic_shared_atomic_exchange,
25210e230b6Smaya   nir_intrinsic_shared_atomic_fadd,
25310e230b6Smaya   nir_intrinsic_shared_atomic_fcomp_swap,
25410e230b6Smaya   nir_intrinsic_shared_atomic_fmax,
25510e230b6Smaya   nir_intrinsic_shared_atomic_fmin,
25610e230b6Smaya   nir_intrinsic_shared_atomic_imax,
25710e230b6Smaya   nir_intrinsic_shared_atomic_imin,
25810e230b6Smaya   nir_intrinsic_shared_atomic_or,
25910e230b6Smaya   nir_intrinsic_shared_atomic_umax,
26010e230b6Smaya   nir_intrinsic_shared_atomic_umin,
26110e230b6Smaya   nir_intrinsic_shared_atomic_xor,
26210e230b6Smaya   nir_intrinsic_shuffle,
26310e230b6Smaya   nir_intrinsic_shuffle_down,
26410e230b6Smaya   nir_intrinsic_shuffle_up,
26510e230b6Smaya   nir_intrinsic_shuffle_xor,
26610e230b6Smaya   nir_intrinsic_ssbo_atomic_add,
26710e230b6Smaya   nir_intrinsic_ssbo_atomic_add_ir3,
26810e230b6Smaya   nir_intrinsic_ssbo_atomic_and,
26910e230b6Smaya   nir_intrinsic_ssbo_atomic_and_ir3,
27010e230b6Smaya   nir_intrinsic_ssbo_atomic_comp_swap,
27110e230b6Smaya   nir_intrinsic_ssbo_atomic_comp_swap_ir3,
27210e230b6Smaya   nir_intrinsic_ssbo_atomic_exchange,
27310e230b6Smaya   nir_intrinsic_ssbo_atomic_exchange_ir3,
27410e230b6Smaya   nir_intrinsic_ssbo_atomic_fadd,
27510e230b6Smaya   nir_intrinsic_ssbo_atomic_fcomp_swap,
27610e230b6Smaya   nir_intrinsic_ssbo_atomic_fmax,
27710e230b6Smaya   nir_intrinsic_ssbo_atomic_fmin,
27810e230b6Smaya   nir_intrinsic_ssbo_atomic_imax,
27910e230b6Smaya   nir_intrinsic_ssbo_atomic_imax_ir3,
28010e230b6Smaya   nir_intrinsic_ssbo_atomic_imin,
28110e230b6Smaya   nir_intrinsic_ssbo_atomic_imin_ir3,
28210e230b6Smaya   nir_intrinsic_ssbo_atomic_or,
28310e230b6Smaya   nir_intrinsic_ssbo_atomic_or_ir3,
28410e230b6Smaya   nir_intrinsic_ssbo_atomic_umax,
28510e230b6Smaya   nir_intrinsic_ssbo_atomic_umax_ir3,
28610e230b6Smaya   nir_intrinsic_ssbo_atomic_umin,
28710e230b6Smaya   nir_intrinsic_ssbo_atomic_umin_ir3,
28810e230b6Smaya   nir_intrinsic_ssbo_atomic_xor,
28910e230b6Smaya   nir_intrinsic_ssbo_atomic_xor_ir3,
29010e230b6Smaya   nir_intrinsic_store_deref,
29110e230b6Smaya   nir_intrinsic_store_global,
29210e230b6Smaya   nir_intrinsic_store_output,
29310e230b6Smaya   nir_intrinsic_store_per_vertex_output,
29410e230b6Smaya   nir_intrinsic_store_scratch,
29510e230b6Smaya   nir_intrinsic_store_shared,
29610e230b6Smaya   nir_intrinsic_store_ssbo,
29710e230b6Smaya   nir_intrinsic_store_ssbo_ir3,
29810e230b6Smaya   nir_intrinsic_vote_all,
29910e230b6Smaya   nir_intrinsic_vote_any,
30010e230b6Smaya   nir_intrinsic_vote_feq,
30110e230b6Smaya   nir_intrinsic_vote_ieq,
30210e230b6Smaya   nir_intrinsic_vulkan_resource_index,
30310e230b6Smaya   nir_intrinsic_vulkan_resource_reindex,
30410e230b6Smaya
30510e230b6Smaya   nir_last_intrinsic = nir_intrinsic_vulkan_resource_reindex,
30610e230b6Smaya   nir_num_intrinsics = nir_last_intrinsic + 1
30710e230b6Smaya} nir_intrinsic_op;
30810e230b6Smaya
30910e230b6Smaya#endif /* _NIR_INTRINSICS_ */