From 6f8e6fb99cc24b9f79e3d95f9e7683d428db5a9c Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 21 Jun 2024 09:41:58 -0400 Subject: [PATCH] mesa/st: use compute pbo download for readpixels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this massively improves (>100%) ReadPixels perf in a number of cases Reviewed-by: Marek Olšák Part-of: --- src/mesa/state_tracker/st_cb_readpixels.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/mesa/state_tracker/st_cb_readpixels.c b/src/mesa/state_tracker/st_cb_readpixels.c index f780c640f3f..ce9a49ca0eb 100644 --- a/src/mesa/state_tracker/st_cb_readpixels.c +++ b/src/mesa/state_tracker/st_cb_readpixels.c @@ -435,6 +435,9 @@ st_ReadPixels(struct gl_context *ctx, GLint x, GLint y, st_validate_state(st, ST_PIPELINE_UPDATE_FB_STATE_MASK); st_flush_bitmap_cache(st); + if (rb->TexImage && st->force_compute_based_texture_transfer) + goto fallback; + if (!st->prefer_blit_based_texture_transfer) { goto fallback; } @@ -565,5 +568,9 @@ st_ReadPixels(struct gl_context *ctx, GLint x, GLint y, return; fallback: + if (rb->TexImage && (st->allow_compute_based_texture_transfer || st->force_compute_based_texture_transfer)) { + if (st_GetTexSubImage_shader(ctx, x, y, 0, width, height, 1, format, type, pixels, rb->TexImage)) + return; + } _mesa_readpixels(ctx, x, y, width, height, format, type, pack, pixels); }