From 460a0d8a4cafc4348bf31147bdd486a02e83b29c Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Thu, 21 Sep 2023 16:31:25 -0500 Subject: [PATCH] nak/nir: Plumb the FS key into lower_fs_input_intrin Part-of: --- src/nouveau/compiler/nak.h | 4 +++- src/nouveau/compiler/nak.rs | 2 +- src/nouveau/compiler/nak_nir.c | 17 ++++++++++------- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/nouveau/compiler/nak.h b/src/nouveau/compiler/nak.h index 49f3f8dc7bd..3f542b45282 100644 --- a/src/nouveau/compiler/nak.h +++ b/src/nouveau/compiler/nak.h @@ -31,12 +31,14 @@ nak_nir_options(const struct nak_compiler *nak); void nak_optimize_nir(nir_shader *nir, const struct nak_compiler *nak); void nak_preprocess_nir(nir_shader *nir, const struct nak_compiler *nak); -void nak_postprocess_nir(nir_shader *nir, const struct nak_compiler *nak); struct nak_fs_key { bool zs_self_dep; }; +void nak_postprocess_nir(nir_shader *nir, const struct nak_compiler *nak, + const struct nak_fs_key *fs_key); + struct nak_shader_info { gl_shader_stage stage; diff --git a/src/nouveau/compiler/nak.rs b/src/nouveau/compiler/nak.rs index e3cf2666b3b..146e81a9f67 100644 --- a/src/nouveau/compiler/nak.rs +++ b/src/nouveau/compiler/nak.rs @@ -437,7 +437,7 @@ pub extern "C" fn nak_compile_shader( nak: *const nak_compiler, fs_key: *const nak_fs_key, ) -> *mut nak_shader_bin { - unsafe { nak_postprocess_nir(nir, nak) }; + unsafe { nak_postprocess_nir(nir, nak, fs_key) }; let nak = unsafe { &*nak }; let nir = unsafe { &*nir }; let fs_key = if fs_key.is_null() { diff --git a/src/nouveau/compiler/nak_nir.c b/src/nouveau/compiler/nak_nir.c index 858c81a67ab..a49d0bfcf93 100644 --- a/src/nouveau/compiler/nak_nir.c +++ b/src/nouveau/compiler/nak_nir.c @@ -318,10 +318,10 @@ nak_nir_lower_varyings(nir_shader *nir, nir_variable_mode modes) } static bool -lower_fs_input_intrin(struct nir_builder *b, - nir_intrinsic_instr *intrin, - UNUSED void *data) +lower_fs_input_intrin(nir_builder *b, nir_intrinsic_instr *intrin, void *data) { + const struct nak_fs_key *fs_key = data; + switch (intrin->intrinsic) { case nir_intrinsic_load_barycentric_at_offset: { b->cursor = nir_before_instr(&intrin->instr); @@ -369,7 +369,8 @@ lower_fs_input_intrin(struct nir_builder *b, } static bool -nak_nir_lower_fs_inputs(nir_shader *nir) +nak_nir_lower_fs_inputs(nir_shader *nir, + const struct nak_fs_key *fs_key) { bool progress = false; @@ -379,7 +380,7 @@ nak_nir_lower_fs_inputs(nir_shader *nir) nir_shader_intrinsics_pass(nir, lower_fs_input_intrin, nir_metadata_block_index | nir_metadata_dominance, - NULL); + (void *)fs_key); } return true; @@ -606,7 +607,9 @@ nir_shader_has_local_variables(const nir_shader *nir) } void -nak_postprocess_nir(nir_shader *nir, const struct nak_compiler *nak) +nak_postprocess_nir(nir_shader *nir, + const struct nak_compiler *nak, + const struct nak_fs_key *fs_key) { UNUSED bool progress = false; @@ -640,7 +643,7 @@ nak_postprocess_nir(nir_shader *nir, const struct nak_compiler *nak) break; case MESA_SHADER_FRAGMENT: - OPT(nir, nak_nir_lower_fs_inputs); + OPT(nir, nak_nir_lower_fs_inputs, fs_key); OPT(nir, nak_nir_lower_fs_outputs); break;