From 0d72b86fe9843931d3fb2563b3f27a84d50d29a2 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Mon, 27 Oct 2025 22:20:28 -0700 Subject: [PATCH] llvmpipe: refactor llvmpipe_resource_bind_sparse Improve readability and prepare for opaque fd support. No behavior change involved. Reviewed-by: Christian Gmeiner Part-of: --- src/gallium/drivers/llvmpipe/lp_texture.c | 40 +++++++++++------------ 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c b/src/gallium/drivers/llvmpipe/lp_texture.c index b8d32797f33..7c9253e8651 100644 --- a/src/gallium/drivers/llvmpipe/lp_texture.c +++ b/src/gallium/drivers/llvmpipe/lp_texture.c @@ -1628,35 +1628,35 @@ llvmpipe_resource_bind_sparse(struct llvmpipe_resource *lpr, uint64_t offset) { #if DETECT_OS_LINUX + const bool is_texture = llvmpipe_resource_is_texture(&lpr->base); struct llvmpipe_memory_allocation *mem = (struct llvmpipe_memory_allocation *)pmem; - void *ret; + bool ok; if (offset >= lpr->size_required) return false; + void *addr = is_texture ? (char *)lpr->tex_data + offset + : (char *)lpr->data + offset; + if (mem) { - if (llvmpipe_resource_is_texture(&lpr->base)) { - ret = mmap((char *)lpr->tex_data + offset, size, PROT_READ|PROT_WRITE, - MAP_SHARED|MAP_FIXED, mem->fd, mem->offset + fd_offset); - if (ret != MAP_FAILED) - BITSET_SET(lpr->residency, offset / (64 * 1024)); - } else { - ret = mmap((char *)lpr->data + offset, size, PROT_READ|PROT_WRITE, - MAP_SHARED|MAP_FIXED, mem->fd, mem->offset + fd_offset); - } + ok = mmap(addr, size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, + mem->fd, mem->offset + fd_offset) != MAP_FAILED; } else { - if (llvmpipe_resource_is_texture(&lpr->base)) { - ret = mmap((char *)lpr->tex_data + offset, size, PROT_READ|PROT_WRITE, - MAP_SHARED|MAP_FIXED|MAP_ANONYMOUS, -1, 0); - if (ret != MAP_FAILED) - BITSET_CLEAR(lpr->residency, offset / (64 * 1024)); - } else { - ret = mmap((char *)lpr->data + offset, size, PROT_READ|PROT_WRITE, - MAP_SHARED|MAP_FIXED|MAP_ANONYMOUS, -1, 0); - } + ok = mmap(addr, size, PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_FIXED | MAP_ANONYMOUS, -1, 0) != MAP_FAILED; } - return ret != MAP_FAILED; + if (!ok) + return false; + + if (is_texture) { + if (mem) + BITSET_SET(lpr->residency, offset / (64 * 1024)); + else + BITSET_CLEAR(lpr->residency, offset / (64 * 1024)); + } + + return true; #else return false; #endif