From e0acc5c2b47630efd55f0f427cc515125c24af25 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Mon, 27 Oct 2025 21:47:55 -0700 Subject: [PATCH] llvmpipe: misc fixes for sparse binding This change: 1. Move size validation within sparse binding, but not escape to non-sparse code path. 2. Error out if sparse is requested on unsupported platforms. Fixes: d747c4a8746 ("lavapipe: Implement sparse buffers and images") Reviewed-by: Christian Gmeiner Part-of: --- src/gallium/drivers/llvmpipe/lp_texture.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c b/src/gallium/drivers/llvmpipe/lp_texture.c index b9c07251d10..ba23539dd07 100644 --- a/src/gallium/drivers/llvmpipe/lp_texture.c +++ b/src/gallium/drivers/llvmpipe/lp_texture.c @@ -1598,9 +1598,13 @@ llvmpipe_resource_bind_backing(struct pipe_screen *pscreen, if (!lpr->backable) return false; - if ((lpr->base.flags & PIPE_RESOURCE_FLAG_SPARSE) && offset < lpr->size_required) { + if (lpr->base.flags & PIPE_RESOURCE_FLAG_SPARSE) { #if DETECT_OS_LINUX struct llvmpipe_memory_allocation *mem = (struct llvmpipe_memory_allocation *)pmem; + + if (offset >= lpr->size_required) + return false; + if (mem) { if (llvmpipe_resource_is_texture(&lpr->base)) { mmap((char *)lpr->tex_data + offset, size, PROT_READ|PROT_WRITE, @@ -1620,9 +1624,11 @@ llvmpipe_resource_bind_backing(struct pipe_screen *pscreen, MAP_SHARED|MAP_FIXED|MAP_ANONYMOUS, -1, 0); } } -#endif return true; +#else + return false; +#endif } addr = llvmpipe_map_memory(pscreen, pmem);