1 /*
2 * Copyright © 2024 Collabora Ltd.
3 * SPDX-License-Identifier: MIT
4 */
5
6 #include "compiler/nir/nir_builder.h"
7 #include "pan_ir.h"
8
9 /* Lowers nir_load_frag_coord_zw to nir_load_frag_coord_zw_pan. */
10
11 static bool
lower_frag_coord_zw(nir_builder * b,nir_intrinsic_instr * intrin,void * data)12 lower_frag_coord_zw(nir_builder *b, nir_intrinsic_instr *intrin, void *data)
13 {
14 if (intrin->intrinsic != nir_intrinsic_load_frag_coord_zw)
15 return false;
16
17 b->cursor = nir_before_instr(&intrin->instr);
18
19 nir_def *bary = nir_load_barycentric_pixel(b, 32,
20 .interp_mode = INTERP_MODE_NOPERSPECTIVE
21 );
22 unsigned component = nir_intrinsic_component(intrin);
23 nir_def *new = nir_load_frag_coord_zw_pan(b, bary, .component = component);
24 nir_def_replace(&intrin->def, new);
25
26 return true;
27 }
28
29 bool
pan_nir_lower_frag_coord_zw(nir_shader * shader)30 pan_nir_lower_frag_coord_zw(nir_shader *shader)
31 {
32 return nir_shader_intrinsics_pass(shader, lower_frag_coord_zw,
33 nir_metadata_control_flow, NULL);
34 }
35