Module: Mesa Branch: main Commit: bf3edad94caa50887e83cc6c003086569f29d370 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bf3edad94caa50887e83cc6c003086569f29d370
Author: Mike Blumenkrantz <[email protected]> Date: Tue Oct 18 12:25:17 2022 -0400 zink: enable tc cpu storage on some buffers matching freedreno usage Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19142> --- src/gallium/drivers/zink/zink_resource.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 9824f78046d..3ec36915199 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -1136,7 +1136,9 @@ resource_create(struct pipe_screen *pscreen, res->base.b = *templ; - threaded_resource_init(&res->base.b, false); + bool allow_cpu_storage = (templ->target == PIPE_BUFFER) && + (templ->width0 < 0x1000); + threaded_resource_init(&res->base.b, allow_cpu_storage); pipe_reference_init(&res->base.b.reference, 1); res->base.b.screen = pscreen; @@ -1425,6 +1427,8 @@ zink_resource_get_handle(struct pipe_screen *pscreen, struct winsys_handle *whandle, unsigned usage) { + if (tex->target == PIPE_BUFFER) + tc_buffer_disable_cpu_storage(tex); if (whandle->type == WINSYS_HANDLE_TYPE_FD || whandle->type == WINSYS_HANDLE_TYPE_KMS) { #ifdef ZINK_USE_DMABUF struct zink_resource *res = zink_resource(tex); @@ -1525,6 +1529,8 @@ zink_resource_from_handle(struct pipe_screen *pscreen, res->drm_format = whandle->format; if (pres->target != PIPE_BUFFER) res->valid = true; + else + tc_buffer_disable_cpu_storage(pres); } return pres; #else @@ -1588,8 +1594,12 @@ zink_resource_from_memobj(struct pipe_screen *pscreen, struct zink_memory_object *memobj = (struct zink_memory_object *)pmemobj; struct pipe_resource *pres = resource_create(pscreen, templ, &memobj->whandle, 0, NULL, 0, NULL); - if (pres && pres->target != PIPE_BUFFER) - zink_resource(pres)->valid = true; + if (pres) { + if (pres->target != PIPE_BUFFER) + zink_resource(pres)->valid = true; + else + tc_buffer_disable_cpu_storage(pres); + } return pres; }
