[Mesa-dev] [PATCH] radeonsi: fix dvec[34] attributes sourced from current attribute state

Ilia Mirkin imirkin at alum.mit.edu
Thu Mar 23 17:19:21 UTC 2017


Wait, you can have constant attribs that are dvec4's? Those don't get
split up into multiple constant attribs (2x dvec2, as it would for a
regular VBO)? Or am I misunderstanding the circumstances?

On Thu, Mar 23, 2017 at 1:14 PM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> The state tracker no longer uploads those attributes for us,
> so we must conservatively upload the size of the largest
> attribute, which is a dvec4.
>
> Fixes a regression of GL45-CTS.gpu_shader_fp64.varyings and
> GL45-CTS.vertex_attrib_64bit.limits_test.
>
> Fixes: 9b91e0b54cc2 ("radeonsi: allow unaligned vertex buffer offsets and strides on CIK-VI")
> ---
>  src/gallium/drivers/radeonsi/si_state.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
> index 6948a74..0ee4af3 100644
> --- a/src/gallium/drivers/radeonsi/si_state.c
> +++ b/src/gallium/drivers/radeonsi/si_state.c
> @@ -3525,26 +3525,27 @@ static void si_set_vertex_buffers(struct pipe_context *ctx,
>
>         if (buffers) {
>                 for (i = 0; i < count; i++) {
>                         const struct pipe_vertex_buffer *src = buffers + i;
>                         struct pipe_vertex_buffer *dsti = dst + i;
>
>                         if (unlikely(src->user_buffer)) {
>                                 /* Zero-stride attribs only. */
>                                 assert(src->stride == 0);
>
> -                               /* Assume the attrib has 4 dwords like the vbo
> -                                * module. This is also a good upper bound.
> +                               /* Assume that the user_buffer comes from
> +                                * gl_current_attrib, which implies it has
> +                                * 4 * 8 bytes (for dvec4 attributes).
>                                  *
>                                  * Use const_uploader to upload into VRAM directly.
>                                  */
> -                               u_upload_data(sctx->b.b.const_uploader, 0, 16, 16,
> +                               u_upload_data(sctx->b.b.const_uploader, 0, 32, 32,
>                                               src->user_buffer,
>                                               &dsti->buffer_offset,
>                                               &dsti->buffer);
>                                 dsti->stride = 0;
>                         } else {
>                                 struct pipe_resource *buf = src->buffer;
>
>                                 pipe_resource_reference(&dsti->buffer, buf);
>                                 dsti->buffer_offset = src->buffer_offset;
>                                 dsti->stride = src->stride;
> --
> 2.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list