st/mesa: call pipe_screen::finalize_nir outside of st_finalize_nir
This is easier to read. Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32175>
This commit is contained in:
@@ -389,7 +389,10 @@ st_glsl_to_nir_post_opts(struct st_context *st, struct gl_program *prog,
|
||||
char *msg = NULL;
|
||||
if (st->allow_st_finalize_nir_twice) {
|
||||
st_serialize_base_nir(prog, nir);
|
||||
msg = st_finalize_nir(st, prog, shader_program, nir, true, true, false);
|
||||
st_finalize_nir(st, prog, shader_program, nir, true, false);
|
||||
|
||||
if (screen->finalize_nir)
|
||||
msg = screen->finalize_nir(screen, nir);
|
||||
}
|
||||
|
||||
if (st->ctx->_Shader->Flags & GLSL_DUMP) {
|
||||
@@ -881,12 +884,10 @@ st_nir_lower_uniforms(struct st_context *st, nir_shader *nir)
|
||||
/* Last third of preparing nir from glsl, which happens after shader
|
||||
* variant lowering.
|
||||
*/
|
||||
char *
|
||||
void
|
||||
st_finalize_nir(struct st_context *st, struct gl_program *prog,
|
||||
struct gl_shader_program *shader_program,
|
||||
nir_shader *nir, bool finalize_by_driver,
|
||||
bool is_before_variants,
|
||||
bool is_draw_shader)
|
||||
struct gl_shader_program *shader_program, nir_shader *nir,
|
||||
bool is_before_variants, bool is_draw_shader)
|
||||
{
|
||||
struct pipe_screen *screen = st->screen;
|
||||
|
||||
@@ -925,12 +926,6 @@ st_finalize_nir(struct st_context *st, struct gl_program *prog,
|
||||
st_nir_lower_samplers(screen, nir, shader_program, prog);
|
||||
if (!is_draw_shader && !screen->get_param(screen, PIPE_CAP_NIR_IMAGES_AS_DEREF))
|
||||
NIR_PASS(_, nir, gl_nir_lower_images, false);
|
||||
|
||||
char *msg = NULL;
|
||||
if (!is_draw_shader && finalize_by_driver && screen->finalize_nir)
|
||||
msg = screen->finalize_nir(screen, nir);
|
||||
|
||||
return msg;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -43,10 +43,9 @@ bool st_nir_lower_wpos_ytransform(struct nir_shader *nir,
|
||||
struct gl_program *prog,
|
||||
struct pipe_screen *pscreen);
|
||||
|
||||
char *st_finalize_nir(struct st_context *st, struct gl_program *prog,
|
||||
void st_finalize_nir(struct st_context *st, struct gl_program *prog,
|
||||
struct gl_shader_program *shader_program,
|
||||
struct nir_shader *nir, bool finalize_by_driver,
|
||||
bool is_before_variants,
|
||||
struct nir_shader *nir, bool is_before_variants,
|
||||
bool is_draw_shader);
|
||||
|
||||
void st_nir_assign_vs_in_locations(struct nir_shader *nir);
|
||||
|
@@ -397,10 +397,13 @@ st_prog_to_nir_postprocess(struct st_context *st, nir_shader *nir,
|
||||
|
||||
if (st->allow_st_finalize_nir_twice) {
|
||||
st_serialize_base_nir(prog, nir);
|
||||
st_finalize_nir(st, prog, NULL, nir, true, false);
|
||||
|
||||
char *msg = st_finalize_nir(st, prog, NULL, nir, true, true, false);
|
||||
if (screen->finalize_nir) {
|
||||
char *msg = screen->finalize_nir(screen, nir);
|
||||
free(msg);
|
||||
}
|
||||
}
|
||||
|
||||
nir_validate_shader(nir, "after st/glsl finalize_nir");
|
||||
}
|
||||
@@ -772,9 +775,14 @@ st_create_common_variant(struct st_context *st,
|
||||
}
|
||||
|
||||
if (finalize || !st->allow_st_finalize_nir_twice || key->is_draw_shader) {
|
||||
char *msg = st_finalize_nir(st, prog, prog->shader_program, state.ir.nir,
|
||||
true, false, key->is_draw_shader);
|
||||
st_finalize_nir(st, prog, prog->shader_program, state.ir.nir, false,
|
||||
key->is_draw_shader);
|
||||
|
||||
struct pipe_screen *screen = st->screen;
|
||||
if (!key->is_draw_shader && screen->finalize_nir) {
|
||||
char *msg = screen->finalize_nir(screen, state.ir.nir);
|
||||
free(msg);
|
||||
}
|
||||
|
||||
/* Clip lowering and edgeflags may have introduced new varyings, so
|
||||
* update the inputs_read/outputs_written. However, with
|
||||
@@ -1109,11 +1117,8 @@ st_create_fp_variant(struct st_context *st,
|
||||
need_lower_tex_src_plane = true;
|
||||
}
|
||||
|
||||
if (finalize || !st->allow_st_finalize_nir_twice) {
|
||||
char *msg = st_finalize_nir(st, fp, fp->shader_program, state.ir.nir,
|
||||
false, false, false);
|
||||
free(msg);
|
||||
}
|
||||
if (finalize || !st->allow_st_finalize_nir_twice)
|
||||
st_finalize_nir(st, fp, fp->shader_program, state.ir.nir, false, false);
|
||||
|
||||
/* This pass needs to happen *after* nir_lower_sampler */
|
||||
if (unlikely(need_lower_tex_src_plane)) {
|
||||
|
Reference in New Issue
Block a user