From 123bdb61cc0be64ee29b63cf27565ec98c2a0ab8 Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Sun, 13 Sep 2020 21:31:27 +0200 Subject: [PATCH] gallium+mesa/st: lower uniforms based on compiler flag instead of packed uniforms cap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Gert Wollny Reviewed-by: Marek Olšák Part-of: --- src/gallium/auxiliary/draw/draw_vs_llvm.c | 3 ++- src/gallium/auxiliary/nir/tgsi_to_nir.c | 4 +--- src/mesa/state_tracker/st_glsl_to_nir.cpp | 6 +++++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_vs_llvm.c b/src/gallium/auxiliary/draw/draw_vs_llvm.c index 42551b93381..67ae6a16356 100644 --- a/src/gallium/auxiliary/draw/draw_vs_llvm.c +++ b/src/gallium/auxiliary/draw/draw_vs_llvm.c @@ -98,7 +98,8 @@ draw_create_vs_llvm(struct draw_context *draw, for ir.nir & PIPE_SHADER_IR_NIR here. */ if (state->ir.nir && state->type == PIPE_SHADER_IR_NIR) { vs->base.state.ir.nir = state->ir.nir; - if (!draw->pipe->screen->get_param(draw->pipe->screen, PIPE_CAP_PACKED_UNIFORMS)) + nir_shader *nir = (nir_shader *)state->ir.nir; + if (!nir->options->lower_uniforms_to_ubo) NIR_PASS_V(state->ir.nir, nir_lower_uniforms_to_ubo, 16); nir_tgsi_scan_shader(state->ir.nir, &vs->base.info, true); } else { diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c index fed27c02567..8f07b4babe8 100644 --- a/src/gallium/auxiliary/nir/tgsi_to_nir.c +++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c @@ -112,7 +112,6 @@ struct ttn_compile { bool cap_face_is_sysval; bool cap_position_is_sysval; bool cap_point_is_sysval; - bool cap_packed_uniforms; bool cap_samplers_as_deref; }; @@ -2371,7 +2370,6 @@ static void ttn_read_pipe_caps(struct ttn_compile *c, struct pipe_screen *screen) { - c->cap_packed_uniforms = screen->get_param(screen, PIPE_CAP_PACKED_UNIFORMS); c->cap_samplers_as_deref = screen->get_param(screen, PIPE_CAP_NIR_SAMPLERS_AS_DEREF); c->cap_face_is_sysval = screen->get_param(screen, PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL); c->cap_position_is_sysval = screen->get_param(screen, PIPE_CAP_TGSI_FS_POSITION_IS_SYSVAL); @@ -2579,7 +2577,7 @@ ttn_finalize_nir(struct ttn_compile *c, struct pipe_screen *screen) NIR_PASS_V(nir, nir_lower_system_values); NIR_PASS_V(nir, nir_lower_compute_system_values, NULL); - if (c->cap_packed_uniforms) + if (nir->options->lower_uniforms_to_ubo) NIR_PASS_V(nir, nir_lower_uniforms_to_ubo, 16); if (!c->cap_samplers_as_deref) diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp index 29d53136789..1a2a0f310bf 100644 --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp @@ -917,16 +917,20 @@ st_unpacked_uniforms_type_size(const struct glsl_type *type, bool bindless) void st_nir_lower_uniforms(struct st_context *st, nir_shader *nir) { + unsigned multiplier = 16; if (st->ctx->Const.PackedDriverUniformStorage) { NIR_PASS_V(nir, nir_lower_io, nir_var_uniform, st_packed_uniforms_type_size, (nir_lower_io_options)0); - NIR_PASS_V(nir, nir_lower_uniforms_to_ubo, 4); + multiplier = 4; } else { NIR_PASS_V(nir, nir_lower_io, nir_var_uniform, st_unpacked_uniforms_type_size, (nir_lower_io_options)0); } + + if (nir->options->lower_uniforms_to_ubo) + NIR_PASS_V(nir, nir_lower_uniforms_to_ubo, multiplier); } /* Last third of preparing nir from glsl, which happens after shader