From: Vasily Khoruzhick Date: Sat, 28 Sep 2019 16:57:55 +0000 (-0700) Subject: lima: set uniforms_address lower bits properly X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=336b021d36f2eb84284a41aeb137bfaf243a0bc5;p=mesa.git lima: set uniforms_address lower bits properly Looks like blob uses following values for uniforms buffer: 0 for 8 bytes 1 for 16 bytes 2 for 24 bytes 2 for 32 bytes 3 for 40 bytes 3 for 48 bytes 3 for 56 bytes 3 for 64 bytes 4 for 72 bytes It all looks like log2(size / 8) rounded up, so let's do the same. Fixes: 931fc2a7b3f9("lima: do not set the PP uniforms address lowest bits") Reviewed-by: Icenowy Zheng Signed-off-by: Vasily Khoruzhick --- diff --git a/src/gallium/drivers/lima/lima_draw.c b/src/gallium/drivers/lima/lima_draw.c index 0449eaba7cd..bd6b62a3bb6 100644 --- a/src/gallium/drivers/lima/lima_draw.c +++ b/src/gallium/drivers/lima/lima_draw.c @@ -1086,6 +1086,14 @@ lima_pack_render_state(struct lima_context *ctx, const struct pipe_draw_info *in if (ctx->const_buffer[PIPE_SHADER_FRAGMENT].buffer) { render->uniforms_address = lima_ctx_buff_va(ctx, lima_ctx_buff_pp_uniform_array, LIMA_CTX_BUFF_SUBMIT_PP); + uint32_t size = ctx->buffer_state[lima_ctx_buff_pp_uniform].size; + uint32_t bits = 0; + if (size >= 8) { + bits = util_last_bit(size >> 3) - 1; + bits += size & u_bit_consecutive(0, bits + 3) ? 1 : 0; + } + render->uniforms_address |= bits > 0xf ? 0xf : bits; + render->aux0 |= 0x80; render->aux1 |= 0x10000; }