• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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