Mesa (master): panfrost: Support buffer sampler views

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jan 12 19:25:10 UTC 2021


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

Author: Icecream95 <ixn at disroot.org>
Date:   Sun Jan  3 15:20:57 2021 +1300

panfrost: Support buffer sampler views

Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon at collabora.com>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8300>

---

 src/gallium/drivers/panfrost/pan_context.c | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index 56e1c456bc1..ec5395e86ae 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -1055,18 +1055,28 @@ panfrost_create_sampler_view_bo(struct panfrost_sampler_view *so,
         enum mali_texture_dimension type =
                 panfrost_translate_texture_dimension(so->base.target);
 
+        bool is_buffer = (so->base.target == PIPE_BUFFER);
+
+        unsigned first_level = is_buffer ? 0 : so->base.u.tex.first_level;
+        unsigned last_level = is_buffer ? 0 : so->base.u.tex.last_level;
+        unsigned first_layer = is_buffer ? 0 : so->base.u.tex.first_layer;
+        unsigned last_layer = is_buffer ? 0 : so->base.u.tex.last_layer;
+
         unsigned size =
                 (is_bifrost ? 0 : MALI_MIDGARD_TEXTURE_LENGTH) +
-                panfrost_estimate_texture_payload_size(so->base.u.tex.first_level,
-                                                       so->base.u.tex.last_level,
-                                                       so->base.u.tex.first_layer,
-                                                       so->base.u.tex.last_layer,
+                panfrost_estimate_texture_payload_size(first_level, last_level,
+                                                       first_layer, last_layer,
                                                        texture->nr_samples,
                                                        type,
                                                        prsrc->layout.modifier);
 
         so->bo = panfrost_bo_create(device, size, 0);
 
+        unsigned width = is_buffer ?
+                (so->base.u.buf.size / util_format_get_blocksize(so->base.format)) :
+                texture->width0;
+        unsigned offset = is_buffer ? so->base.u.buf.offset : 0;
+
         struct panfrost_ptr payload = so->bo->ptr;
         void *tex = is_bifrost ? &so->bifrost_descriptor : so->bo->ptr.cpu;
 
@@ -1076,16 +1086,15 @@ panfrost_create_sampler_view_bo(struct panfrost_sampler_view *so,
         }
 
         panfrost_new_texture(device, &prsrc->layout, tex,
-                             texture->width0, texture->height0,
+                             width, texture->height0,
                              depth, array_size,
                              format, type,
-                             so->base.u.tex.first_level,
-                             so->base.u.tex.last_level,
-                             so->base.u.tex.first_layer,
-                             so->base.u.tex.last_layer,
+                             first_level, last_level,
+                             first_layer, last_layer,
                              texture->nr_samples,
                              user_swizzle,
-                             prsrc->bo->ptr.gpu, &payload);
+                             prsrc->bo->ptr.gpu + offset,
+                             &payload);
 }
 
 static struct pipe_sampler_view *



More information about the mesa-commit mailing list