llvmpipe: refactor llvmpipe_resource_bind_sparse

Improve readability and prepare for opaque fd support.

No behavior change involved.

Reviewed-by: Christian Gmeiner <cgmeiner@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38074>
This commit is contained in:
Yiwei Zhang 2025-10-27 22:20:28 -07:00 committed by Marge Bot
parent 532eb04006
commit 0d72b86fe9

View file

@ -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