mesa/st: Deduplicate the NIR uniform lowering code.

Just a little refactor as I go looking at the type size functions.

Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3297>
This commit is contained in:
Eric Anholt
2020-01-06 11:47:03 -08:00
committed by Marge Bot
parent 8832a88434
commit b807f7a43a
3 changed files with 16 additions and 18 deletions

View File

@@ -897,6 +897,19 @@ st_nir_lower_samplers(struct pipe_screen *screen, nir_shader *nir,
} }
} }
void
st_nir_lower_uniforms(struct st_context *st, nir_shader *nir)
{
if (st->ctx->Const.PackedDriverUniformStorage) {
NIR_PASS_V(nir, nir_lower_io, nir_var_uniform, st_glsl_type_dword_size,
(nir_lower_io_options)0);
NIR_PASS_V(nir, nir_lower_uniforms_to_ubo, 4);
} else {
NIR_PASS_V(nir, nir_lower_io, nir_var_uniform, st_glsl_uniforms_type_size,
(nir_lower_io_options)0);
}
}
/* Last third of preparing nir from glsl, which happens after shader /* Last third of preparing nir from glsl, which happens after shader
* variant lowering. * variant lowering.
*/ */
@@ -917,15 +930,7 @@ st_finalize_nir(struct st_context *st, struct gl_program *prog,
/* Set num_uniforms in number of attribute slots (vec4s) */ /* Set num_uniforms in number of attribute slots (vec4s) */
nir->num_uniforms = DIV_ROUND_UP(prog->Parameters->NumParameterValues, 4); nir->num_uniforms = DIV_ROUND_UP(prog->Parameters->NumParameterValues, 4);
if (st->ctx->Const.PackedDriverUniformStorage) { st_nir_lower_uniforms(st, nir);
NIR_PASS_V(nir, nir_lower_io, nir_var_uniform, st_glsl_type_dword_size,
(nir_lower_io_options)0);
NIR_PASS_V(nir, nir_lower_uniforms_to_ubo, 4);
} else {
NIR_PASS_V(nir, nir_lower_io, nir_var_uniform, st_glsl_uniforms_type_size,
(nir_lower_io_options)0);
}
st_nir_lower_samplers(screen, nir, shader_program, prog); st_nir_lower_samplers(screen, nir, shader_program, prog);
if (finalize_by_driver && screen->finalize_nir) if (finalize_by_driver && screen->finalize_nir)

View File

@@ -58,6 +58,7 @@ void st_nir_assign_varying_locations(struct st_context *st,
void st_nir_lower_samplers(struct pipe_screen *screen, struct nir_shader *nir, void st_nir_lower_samplers(struct pipe_screen *screen, struct nir_shader *nir,
struct gl_shader_program *shader_program, struct gl_shader_program *shader_program,
struct gl_program *prog); struct gl_program *prog);
void st_nir_lower_uniforms(struct st_context *st, struct nir_shader *nir);
struct pipe_shader_state * struct pipe_shader_state *
st_nir_finish_builtin_shader(struct st_context *st, st_nir_finish_builtin_shader(struct st_context *st,

View File

@@ -58,15 +58,7 @@ st_nir_finish_builtin_shader(struct st_context *st,
st_nir_assign_varying_locations(st, nir); st_nir_assign_varying_locations(st, nir);
st_nir_lower_samplers(screen, nir, NULL, NULL); st_nir_lower_samplers(screen, nir, NULL, NULL);
st_nir_lower_uniforms(st, nir);
if (st->ctx->Const.PackedDriverUniformStorage) {
NIR_PASS_V(nir, nir_lower_io, nir_var_uniform, st_glsl_type_dword_size,
(nir_lower_io_options)0);
NIR_PASS_V(nir, nir_lower_uniforms_to_ubo, 4);
} else {
NIR_PASS_V(nir, nir_lower_io, nir_var_uniform, st_glsl_uniforms_type_size,
(nir_lower_io_options)0);
}
if (screen->finalize_nir) if (screen->finalize_nir)
screen->finalize_nir(screen, nir, true); screen->finalize_nir(screen, nir, true);