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;