panfrost: Support buffer sampler views

Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8300>
This commit is contained in:
Icecream95
2021-01-03 15:20:57 +13:00
committed by Marge Bot
parent 473728a9b9
commit 388843526b
+19 -10
View File
@@ -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 *