[Mesa-dev] [PATCH] r600: fix constant buffer size programming
Nicolai Hähnle
nhaehnle at gmail.com
Tue Dec 22 07:37:54 PST 2015
On 21.12.2015 21:12, Grazvydas Ignotas wrote:
> When buffer size is less than 16, zero ends up being programmed as
> size, which prevents the hardware from fetching the correct values.
> Fix it by combining shift and align so that the value is always
> rounded up.
>
> Cc: "11.1 11.0 10.6" <mesa-stable at lists.freedesktop.org>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92229
> Signed-off-by: Grazvydas Ignotas <notasas at gmail.com>
> ---
> Only tested on Juniper, but I guess others will need this too.
Nice catch.
Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
Do you have commit access?
> src/gallium/drivers/r600/evergreen_state.c | 2 +-
> src/gallium/drivers/r600/r600_state.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c
> index 1443bc0..1aee7dd 100644
> --- a/src/gallium/drivers/r600/evergreen_state.c
> +++ b/src/gallium/drivers/r600/evergreen_state.c
> @@ -1956,7 +1956,7 @@ static void evergreen_emit_constant_buffers(struct r600_context *rctx,
>
> if (!gs_ring_buffer) {
> radeon_set_context_reg_flag(cs, reg_alu_constbuf_size + buffer_index * 4,
> - ALIGN_DIVUP(cb->buffer_size >> 4, 16), pkt_flags);
> + ALIGN_DIVUP(cb->buffer_size, 256), pkt_flags);
> radeon_set_context_reg_flag(cs, reg_alu_const_cache + buffer_index * 4, va >> 8,
> pkt_flags);
> }
> diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c
> index e7ffe0d..43b8074 100644
> --- a/src/gallium/drivers/r600/r600_state.c
> +++ b/src/gallium/drivers/r600/r600_state.c
> @@ -1768,7 +1768,7 @@ static void r600_emit_constant_buffers(struct r600_context *rctx,
>
> if (!gs_ring_buffer) {
> radeon_set_context_reg(cs, reg_alu_constbuf_size + buffer_index * 4,
> - ALIGN_DIVUP(cb->buffer_size >> 4, 16));
> + ALIGN_DIVUP(cb->buffer_size, 256));
> radeon_set_context_reg(cs, reg_alu_const_cache + buffer_index * 4, offset >> 8);
> }
>
>
More information about the mesa-dev
mailing list