xref: /aosp_15_r20/external/mesa3d/src/gallium/frontends/lavapipe/lvp_nir_lower_sparse_residency.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright © 2024 Valve Corporation
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #include "lvp_private.h"
7 
8 #include "nir.h"
9 #include "nir_builder.h"
10 
11 static bool
pass(nir_builder * b,nir_intrinsic_instr * instr,void * data)12 pass(nir_builder *b, nir_intrinsic_instr *instr, void *data)
13 {
14    b->cursor = nir_before_instr(&instr->instr);
15 
16    if (instr->intrinsic == nir_intrinsic_sparse_residency_code_and) {
17       nir_def_rewrite_uses(&instr->def, nir_iand(b, instr->src[0].ssa, instr->src[1].ssa));
18       return true;
19    } else if (instr->intrinsic == nir_intrinsic_is_sparse_texels_resident) {
20       nir_def_rewrite_uses(&instr->def, nir_ine_imm(b, instr->src[0].ssa, 0));
21       return true;
22    }
23 
24    return false;
25 }
26 
27 bool
lvp_nir_lower_sparse_residency(struct nir_shader * shader)28 lvp_nir_lower_sparse_residency(struct nir_shader *shader)
29 {
30    return nir_shader_intrinsics_pass(shader, pass, nir_metadata_block_index | nir_metadata_dominance, NULL);
31 }
32