From b6e11225a28b420fd3754e10ed9542cb048e9c52 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Sun, 22 Aug 2021 10:31:44 -0700 Subject: [PATCH] freedreno: Fix set_global_binding The gallium interface is a bit awkward, but pointer sizes are actually 64b despite what the API suggests. Signed-off-by: Rob Clark Part-of: --- src/gallium/drivers/freedreno/freedreno_state.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/freedreno/freedreno_state.c b/src/gallium/drivers/freedreno/freedreno_state.c index 5995424..90c2989 100644 --- a/src/gallium/drivers/freedreno/freedreno_state.c +++ b/src/gallium/drivers/freedreno/freedreno_state.c @@ -659,9 +659,11 @@ fd_set_global_binding(struct pipe_context *pctx, unsigned first, unsigned count, if (so->buf[n]) { struct fd_resource *rsc = fd_resource(so->buf[n]); - uint64_t iova = fd_bo_get_iova(rsc->bo); - // TODO need to scream if iova > 32b or fix gallium API.. - *handles[i] += iova; + uint32_t offset = *handles[i]; + uint64_t iova = fd_bo_get_iova(rsc->bo) + offset; + + /* Yes, really, despite what the type implies: */ + memcpy(handles[i], &iova, sizeof(iova)); } if (prscs[i]) -- 2.7.4