From: Nicolai Hähnle <nicolai.haeh...@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@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to