Mesa (master): st/mesa: set drawpixels swizzle before creating sampler view

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Dec 16 13:47:55 UTC 2020


Module: Mesa
Branch: master
Commit: a709d99bfd7982bcb15d2c98bea5bc8de91ea0a7
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a709d99bfd7982bcb15d2c98bea5bc8de91ea0a7

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Mon Dec 14 23:35:55 2020 -0500

st/mesa: set drawpixels swizzle before creating sampler view

(some) drivers need to have the swizzle set prior to create_sampler_view
being called in order to actually apply it

Fixes: d11fefa9616 ("st/mesa: optimize 4-component ubyte glDrawPixels")
Acked-by: Adam Jackson <ajax at redhat.com>
Reviewed-by: Eric Anholt <eric at anholt.net>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8107>

---

 src/mesa/state_tracker/st_cb_drawpixels.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
index 4cc6ebb2686..48f9a05a8ad 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -1231,7 +1231,7 @@ setup_sampler_swizzle(struct pipe_sampler_view *sv, GLenum format, GLenum type)
 {
    if ((format == GL_RGBA || format == GL_BGRA) && type == GL_UNSIGNED_BYTE) {
       const struct util_format_description *desc =
-         util_format_description(sv->texture->format);
+         util_format_description(sv->format);
       unsigned c0, c1, c2, c3;
 
       /* Every gallium driver supports at least one 32-bit packed RGBA format.
@@ -1377,17 +1377,22 @@ st_DrawPixels(struct gl_context *ctx, GLint x, GLint y,
       st_upload_constants(st, &st->fp->Base);
    }
 
-   /* create sampler view for the image */
-   sv[0] = st_create_texture_sampler_view(st->pipe, pt);
+   {
+      /* create sampler view for the image */
+      struct pipe_sampler_view templ;
+
+      u_sampler_view_default_template(&templ, pt, pt->format);
+      /* Set up the sampler view's swizzle */
+      setup_sampler_swizzle(&templ, format, type);
+
+      sv[0] = st->pipe->create_sampler_view(st->pipe, pt, &templ);
+   }
    if (!sv[0]) {
       _mesa_error(ctx, GL_OUT_OF_MEMORY, "glDrawPixels");
       pipe_resource_reference(&pt, NULL);
       return;
    }
 
-   /* Set up the sampler view's swizzle */
-   setup_sampler_swizzle(sv[0], format, type);
-
    /* Create a second sampler view to read stencil.  The stencil is
     * written using the shader stencil export functionality.
     */



More information about the mesa-commit mailing list