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