[Mesa-dev] [PATCH 3/9] st/mesa: fix ReadPixels into packed formats with PBO

Nicolai Hähnle nhaehnle at gmail.com
Wed Nov 9 15:01:51 UTC 2016


From: Nicolai Hähnle <nicolai.haehnle at amd.com>

When using the GPU download path, we bind the PBO as a buffer texture,
so call is_format_supported accordingly. On radeonsi, this means that
GPU downloads aren't used for UNSIGNED_SHORT_5_6_5 destinations, for
example.

Fixes parts of GL45-CTS.gtf32.GL3Tests.packed_pixels.packed_pixels_pbo.
---
 src/mesa/state_tracker/st_cb_readpixels.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_readpixels.c b/src/mesa/state_tracker/st_cb_readpixels.c
index b79f106..cab6abe 100644
--- a/src/mesa/state_tracker/st_cb_readpixels.c
+++ b/src/mesa/state_tracker/st_cb_readpixels.c
@@ -105,22 +105,21 @@ try_pbo_readpixels(struct st_context *st, struct st_renderbuffer *strb,
    struct pipe_resource *texture = strb->texture;
    const struct util_format_description *desc;
    struct st_pbo_addresses addr;
    struct pipe_framebuffer_state fb;
    enum pipe_texture_target view_target;
    bool success = false;
 
    if (texture->nr_samples > 1)
       return false;
 
-   if (!screen->is_format_supported(screen, dst_format, PIPE_TEXTURE_2D,
-                                    texture->nr_samples,
+   if (!screen->is_format_supported(screen, dst_format, PIPE_BUFFER, 0,
                                     PIPE_BIND_SHADER_IMAGE))
       return false;
 
    desc = util_format_description(dst_format);
 
    /* Compute PBO addresses */
    addr.bytes_per_pixel = desc->block.bits / 8;
    addr.xoffset = x;
    addr.yoffset = y;
    addr.width = width;
-- 
2.7.4



More information about the mesa-dev mailing list