summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/vc4
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/vc4')
-rw-r--r--src/gallium/drivers/vc4/vc4_draw.c18
-rw-r--r--src/gallium/drivers/vc4/vc4_resource.c2
-rw-r--r--src/gallium/drivers/vc4/vc4_state.c7
3 files changed, 20 insertions, 7 deletions
diff --git a/src/gallium/drivers/vc4/vc4_draw.c b/src/gallium/drivers/vc4/vc4_draw.c
index 717eb8aea2b..16418bf12da 100644
--- a/src/gallium/drivers/vc4/vc4_draw.c
+++ b/src/gallium/drivers/vc4/vc4_draw.c
@@ -132,6 +132,20 @@ vc4_start_draw(struct vc4_context *vc4)
}
static void
+vc4_update_shadow_textures(struct pipe_context *pctx,
+ struct vc4_texture_stateobj *stage_tex)
+{
+ for (int i = 0; i < stage_tex->num_textures; i++) {
+ struct pipe_sampler_view *view = stage_tex->textures[i];
+ if (!view)
+ continue;
+ struct vc4_resource *rsc = vc4_resource(view->texture);
+ if (rsc->shadow_parent)
+ vc4_update_shadow_baselevel_texture(pctx, view);
+ }
+}
+
+static void
vc4_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
{
struct vc4_context *vc4 = vc4_context(pctx);
@@ -145,6 +159,10 @@ vc4_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
return;
}
+ /* Before setting up the draw, do any fixup blits necessary. */
+ vc4_update_shadow_textures(pctx, &vc4->verttex);
+ vc4_update_shadow_textures(pctx, &vc4->fragtex);
+
vc4_get_draw_cl_space(vc4);
struct vc4_vertex_stateobj *vtx = vc4->vtx;
diff --git a/src/gallium/drivers/vc4/vc4_resource.c b/src/gallium/drivers/vc4/vc4_resource.c
index 94bab9934e7..3f180d5845d 100644
--- a/src/gallium/drivers/vc4/vc4_resource.c
+++ b/src/gallium/drivers/vc4/vc4_resource.c
@@ -583,7 +583,7 @@ vc4_update_shadow_baselevel_texture(struct pipe_context *pctx,
struct vc4_resource *orig = vc4_resource(shadow->shadow_parent);
assert(orig);
- if (shadow->writes == orig->writes)
+ if (shadow->writes == orig->writes && orig->bo->private)
return;
perf_debug("Updating shadow texture due to %s\n",
diff --git a/src/gallium/drivers/vc4/vc4_state.c b/src/gallium/drivers/vc4/vc4_state.c
index df75b6ec81b..80e963ea2ee 100644
--- a/src/gallium/drivers/vc4/vc4_state.c
+++ b/src/gallium/drivers/vc4/vc4_state.c
@@ -578,13 +578,8 @@ vc4_set_sampler_views(struct pipe_context *pctx, unsigned shader,
vc4->dirty |= VC4_DIRTY_TEXSTATE;
for (i = 0; i < nr; i++) {
- if (views[i]) {
- struct vc4_resource *rsc =
- vc4_resource(views[i]->texture);
+ if (views[i])
new_nr = i + 1;
- if (rsc->shadow_parent)
- vc4_update_shadow_baselevel_texture(pctx, views[i]);
- }
pipe_sampler_view_reference(&stage_tex->textures[i], views[i]);
stage_tex->dirty_samplers |= (1 << i);
}