aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/panfrost
diff options
context:
space:
mode:
authorIcecream95 <[email protected]>2020-06-20 19:09:03 +1200
committerMarge Bot <[email protected]>2020-06-22 12:15:05 +0000
commit65b3b08aaf4f5e9d9207e174232b4bbb820d7de4 (patch)
treea99ec1268f650958522bf1fb606f0d751ebfd402 /src/gallium/drivers/panfrost
parent96300120609a37020733cb9545707d863ebfe00a (diff)
panfrost: Update sampler views when the texture bo changes
The BO reallocation path in panfrost_transfer_map caused textures and sampler views to get out of sync. v2: Use the GPU address of the BO in case two BOs get allocated at the same address. Reviewed-by: Tomeu Vizoso <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5573>
Diffstat (limited to 'src/gallium/drivers/panfrost')
-rw-r--r--src/gallium/drivers/panfrost/pan_cmdstream.c3
-rw-r--r--src/gallium/drivers/panfrost/pan_context.c1
-rw-r--r--src/gallium/drivers/panfrost/pan_context.h1
3 files changed, 4 insertions, 1 deletions
diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c
index 0ea5bc0e16a..841e89d75a0 100644
--- a/src/gallium/drivers/panfrost/pan_cmdstream.c
+++ b/src/gallium/drivers/panfrost/pan_cmdstream.c
@@ -1400,7 +1400,8 @@ panfrost_update_sampler_view(struct panfrost_sampler_view *view,
struct pipe_context *pctx)
{
struct panfrost_resource *rsrc = pan_resource(view->base.texture);
- if (view->layout != rsrc->layout) {
+ if (view->texture_bo != rsrc->bo->gpu ||
+ view->layout != rsrc->layout) {
panfrost_bo_unreference(view->bo);
panfrost_create_sampler_view_bo(view, pctx, &rsrc->base);
}
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index fbbe6385972..2ec636e1579 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -918,6 +918,7 @@ panfrost_create_sampler_view_bo(struct panfrost_sampler_view *so,
struct panfrost_resource *prsrc = (struct panfrost_resource *)texture;
assert(prsrc->bo);
+ so->texture_bo = prsrc->bo->gpu;
so->layout = prsrc->layout;
unsigned char user_swizzle[4] = {
diff --git a/src/gallium/drivers/panfrost/pan_context.h b/src/gallium/drivers/panfrost/pan_context.h
index 9a69b0eb549..f54e1631483 100644
--- a/src/gallium/drivers/panfrost/pan_context.h
+++ b/src/gallium/drivers/panfrost/pan_context.h
@@ -265,6 +265,7 @@ struct panfrost_sampler_view {
struct pipe_sampler_view base;
struct panfrost_bo *bo;
struct bifrost_texture_descriptor *bifrost_descriptor;
+ mali_ptr texture_bo;
enum mali_texture_layout layout;
};