diff --git a/.pick_status.json b/.pick_status.json index d63a377e2d7..0f1e7a8f4cc 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2854,7 +2854,7 @@ "description": "llvmpipe: misc fixes for sparse binding", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "d747c4a8746834d3c9a6fbd7b455b7ce9441fb38", "notes": null diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c b/src/gallium/drivers/llvmpipe/lp_texture.c index d309544de5c..80396a3684f 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);