From 1bbcd68d5f10b300bd80cc673b3c8ea264890712 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 3 Jan 2022 14:34:44 -0500 Subject: [PATCH] zink: fake sparse R9G9B9E5 support as needed these just allocate the whole thing now, which means they aren't actually sparse, but who cares because nobody but cts is actually going to use it and those tests pass just fine Acked-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_bo.c | 3 +++ src/gallium/drivers/zink/zink_resource.c | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/gallium/drivers/zink/zink_bo.c b/src/gallium/drivers/zink/zink_bo.c index 60d21cfb54f..7fd3688000a 100644 --- a/src/gallium/drivers/zink/zink_bo.c +++ b/src/gallium/drivers/zink/zink_bo.c @@ -861,6 +861,9 @@ zink_bo_commit(struct zink_screen *screen, struct zink_resource *res, unsigned l bool ok = true; struct zink_bo *bo = res->obj->bo; + if (screen->faked_e5sparse && res->base.b.format == PIPE_FORMAT_R9G9B9E5_FLOAT) + return true; + simple_mtx_lock(&screen->queue_lock); simple_mtx_lock(&bo->lock); if (res->base.b.target == PIPE_BUFFER) { diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index d172a4654a1..a82015dc3b3 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -782,6 +782,10 @@ resource_create(struct pipe_screen *pscreen, struct pipe_resource templ2 = *templ; if (templ2.flags & PIPE_RESOURCE_FLAG_SPARSE) templ2.bind |= PIPE_BIND_SHADER_IMAGE; + if (screen->faked_e5sparse && templ->format == PIPE_FORMAT_R9G9B9E5_FLOAT) { + templ2.flags &= ~PIPE_RESOURCE_FLAG_SPARSE; + res->base.b.flags &= ~PIPE_RESOURCE_FLAG_SPARSE; + } unsigned scanout_flags = templ->bind & (PIPE_BIND_SCANOUT | PIPE_BIND_SHARED); if (whandle && whandle->type == ZINK_EXTERNAL_MEMORY_HANDLE) scanout_flags = 0;