From 5cf93985a00b80b27ea19a8dae0d77e6dae3331a Mon Sep 17 00:00:00 2001 From: Duncan Hopkins Date: Thu, 11 Jul 2019 11:51:08 +0100 Subject: [PATCH] zink: respect ubo buffer alignment requirement The driver can report a minimum alignment for UBOs, and that can be larger than 64, which we've currently been using. Let's play ball, and use the reported value instead. Acked-by: Jordan Justen --- src/gallium/drivers/zink/zink_context.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index a320f86067f..f5fefa7bbbb 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -428,9 +428,12 @@ zink_set_constant_buffer(struct pipe_context *pctx, if (cb) { struct pipe_resource *buffer = cb->buffer; unsigned offset = cb->buffer_offset; - if (cb->user_buffer) - u_upload_data(ctx->base.const_uploader, 0, cb->buffer_size, 64, + if (cb->user_buffer) { + struct zink_screen *screen = zink_screen(pctx->screen); + u_upload_data(ctx->base.const_uploader, 0, cb->buffer_size, + screen->props.limits.minUniformBufferOffsetAlignment, cb->user_buffer, &offset, &buffer); + } pipe_resource_reference(&ctx->ubos[shader][index].buffer, buffer); ctx->ubos[shader][index].buffer_offset = offset;