From 63bff6a9f89d6b8fa3a57253edb2611dd4e226bc Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Sun, 28 Jun 2020 18:18:19 +0200 Subject: [PATCH] gallivm/nir: Lower uniforms to UBOs in llvm draw if the driver didn't request this already When the llvm draw engine is used for draw shaders in st_program the driver may not enable the cap PIPE_CAP_PACKED_UNIFORMS, so uniforms are not be lowered to UBOs. However, llvm doesn't support nir_load_uniform, so lower the uniforms to UBO now. The multiplier is set to 16 to be the same like in the TGSI code path. Signed-off-by: Gert Wollny Reviewed-by: Eric Anholt Part-of: --- src/gallium/auxiliary/draw/draw_vs_llvm.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gallium/auxiliary/draw/draw_vs_llvm.c b/src/gallium/auxiliary/draw/draw_vs_llvm.c index ec3c5b00fbc..42551b93381 100644 --- a/src/gallium/auxiliary/draw/draw_vs_llvm.c +++ b/src/gallium/auxiliary/draw/draw_vs_llvm.c @@ -98,6 +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_PASS_V(state->ir.nir, nir_lower_uniforms_to_ubo, 16); nir_tgsi_scan_shader(state->ir.nir, &vs->base.info, true); } else { /* we make a private copy of the tokens */ -- 2.30.2