radeonsi: fix dvec[34] attributes sourced from current attribute state
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Thu, 23 Mar 2017 16:54:43 +0000 (17:54 +0100)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Fri, 24 Mar 2017 16:35:21 +0000 (17:35 +0100)
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")
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_state.c

index 6948a74fbdd990118ab483aef5ab247ad3af9470..0ee4af39151318a4a7fca371b2494e4fcfa52c2d 100644 (file)
@@ -3532,12 +3532,13 @@ static void si_set_vertex_buffers(struct pipe_context *ctx,
                                /* 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);