From e16629a28582d7911fb8ab55b6029df1b9762ea8 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Thu, 1 Feb 2024 10:56:05 +1000 Subject: [PATCH] zink: use sparse residency for buffers. GL ARB_sparse_buffer allows unbound regions in buffers. VK sparseBinding insists all regions must be bound before first use. This means we need to use sparseResidencyBuffer to back GL sparse buffers to get the same semantics. Fixes GL and piglit sparse buffer tests on zink/nvk. Fixes: c90246b68268 ("zink: implement sparse buffer creation/mapping") Cc: mesa-stable Part-of: (cherry picked from commit ff50e805746d8f614bac8b00e2889028b47f481e) --- .pick_status.json | 2 +- src/gallium/drivers/zink/zink_resource.c | 2 +- src/gallium/drivers/zink/zink_screen.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 62c80d24d03..2cf4b648226 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -994,7 +994,7 @@ "description": "zink: use sparse residency for buffers.", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "c90246b682686597b09109858fb2c220dca1ad59", "notes": null diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index d2a8f899bdb..c7669a39d23 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -309,7 +309,7 @@ create_bci(struct zink_screen *screen, const struct pipe_resource *templ, unsign bci.usage |= VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT; if (templ->flags & PIPE_RESOURCE_FLAG_SPARSE) - bci.flags |= VK_BUFFER_CREATE_SPARSE_BINDING_BIT; + bci.flags |= VK_BUFFER_CREATE_SPARSE_BINDING_BIT | VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT; return bci; } diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index b7f0b2557b2..b5597d18273 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -940,7 +940,7 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param) return screen->info.feats.features.shaderCullDistance; case PIPE_CAP_SPARSE_BUFFER_PAGE_SIZE: - return screen->info.feats.features.sparseBinding ? ZINK_SPARSE_BUFFER_PAGE_SIZE : 0; + return screen->info.feats.features.sparseResidencyBuffer ? ZINK_SPARSE_BUFFER_PAGE_SIZE : 0; /* Sparse texture */ case PIPE_CAP_MAX_SPARSE_TEXTURE_SIZE: