diff --git a/src/amd/common/nir/ac_nir.h b/src/amd/common/nir/ac_nir.h index 0a55c0559f0..b7e869eb896 100644 --- a/src/amd/common/nir/ac_nir.h +++ b/src/amd/common/nir/ac_nir.h @@ -178,7 +178,7 @@ typedef struct { bool ac_nir_lower_ngg_nogs(nir_shader *shader, const ac_nir_lower_ngg_options *options); -void +bool ac_nir_lower_ngg_gs(nir_shader *shader, const ac_nir_lower_ngg_options *options); void diff --git a/src/amd/common/nir/ac_nir_lower_ngg_gs.c b/src/amd/common/nir/ac_nir_lower_ngg_gs.c index 283539e4df5..564348ea3bd 100644 --- a/src/amd/common/nir/ac_nir_lower_ngg_gs.c +++ b/src/amd/common/nir/ac_nir_lower_ngg_gs.c @@ -873,7 +873,7 @@ ngg_gs_finale(nir_builder *b, lower_ngg_gs_state *s) ngg_gs_emit_output(b, workgroup_num_vertices, max_prmcnt, tid_in_tg, out_vtx_lds_addr, exporter_tid_in_tg, out_vtx_primflag_0, s); } -void +bool ac_nir_lower_ngg_gs(nir_shader *shader, const ac_nir_lower_ngg_options *options) { nir_function_impl *impl = nir_shader_get_entrypoint(shader); @@ -955,10 +955,15 @@ ac_nir_lower_ngg_gs(nir_shader *shader, const ac_nir_lower_ngg_options *options) /* Emit the finale sequence */ ngg_gs_finale(b, &state); + + /* Take care of metadata and validation before calling other passes */ + nir_metadata_preserve(impl, nir_metadata_none); nir_validate_shader(shader, "after emitting NGG GS"); /* Cleanup */ nir_lower_vars_to_ssa(shader); nir_remove_dead_variables(shader, nir_var_function_temp, NULL); nir_metadata_preserve(impl, nir_metadata_none); + + return true; }