Mesa (master): vc4: Always unref the current job surfaces at job reset time.
Eric Anholt
anholt at kemper.freedesktop.org
Wed Sep 14 05:26:03 UTC 2016
Module: Mesa
Branch: master
Commit: c31a7f529fadc016786eedc35ce65802a915ce09
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c31a7f529fadc016786eedc35ce65802a915ce09
Author: Eric Anholt <eric at anholt.net>
Date: Wed Sep 7 12:40:39 2016 -0700
vc4: Always unref the current job surfaces at job reset time.
Drops some tricky logic in vc4_flush() trying to update the pointers, and
fixes a broken lack of unref for MSAA surfaces at context destroy time.
---
src/gallium/drivers/vc4/vc4_blit.c | 13 ++++--------
src/gallium/drivers/vc4/vc4_context.c | 37 ++++++++++-------------------------
src/gallium/drivers/vc4/vc4_job.c | 7 +++++++
3 files changed, 21 insertions(+), 36 deletions(-)
diff --git a/src/gallium/drivers/vc4/vc4_blit.c b/src/gallium/drivers/vc4/vc4_blit.c
index c373544..ee08ab8 100644
--- a/src/gallium/drivers/vc4/vc4_blit.c
+++ b/src/gallium/drivers/vc4/vc4_blit.c
@@ -132,15 +132,10 @@ vc4_tile_blit(struct pipe_context *pctx, const struct pipe_blit_info *info)
vc4_get_blit_surface(pctx, info->src.resource, info->src.level);
pipe_surface_reference(&vc4->color_read, src_surf);
- pipe_surface_reference(&vc4->color_write,
- dst_surf->texture->nr_samples > 1 ?
- NULL : dst_surf);
- pipe_surface_reference(&vc4->msaa_color_write,
- dst_surf->texture->nr_samples > 1 ?
- dst_surf : NULL);
- pipe_surface_reference(&vc4->zs_read, NULL);
- pipe_surface_reference(&vc4->zs_write, NULL);
- pipe_surface_reference(&vc4->msaa_zs_write, NULL);
+ if (dst_surf->texture->nr_samples > 1)
+ pipe_surface_reference(&vc4->color_write, dst_surf);
+ else
+ pipe_surface_reference(&vc4->msaa_color_write, dst_surf);
vc4->draw_min_x = info->dst.box.x;
vc4->draw_min_y = info->dst.box.y;
diff --git a/src/gallium/drivers/vc4/vc4_context.c b/src/gallium/drivers/vc4/vc4_context.c
index e7f63d6..6f50b97 100644
--- a/src/gallium/drivers/vc4/vc4_context.c
+++ b/src/gallium/drivers/vc4/vc4_context.c
@@ -45,43 +45,29 @@ vc4_flush(struct pipe_context *pctx)
struct pipe_surface *zsbuf = vc4->framebuffer.zsbuf;
if (cbuf && (vc4->resolve & PIPE_CLEAR_COLOR0)) {
- pipe_surface_reference(&vc4->color_write,
- cbuf->texture->nr_samples > 1 ?
- NULL : cbuf);
- pipe_surface_reference(&vc4->msaa_color_write,
- cbuf->texture->nr_samples > 1 ?
- cbuf : NULL);
+ if (cbuf->texture->nr_samples > 1) {
+ pipe_surface_reference(&vc4->msaa_color_write, cbuf);
+ } else {
+ pipe_surface_reference(&vc4->color_write, cbuf);
+ }
if (!(vc4->cleared & PIPE_CLEAR_COLOR0)) {
pipe_surface_reference(&vc4->color_read, cbuf);
- } else {
- pipe_surface_reference(&vc4->color_read, NULL);
}
- } else {
- pipe_surface_reference(&vc4->color_write, NULL);
- pipe_surface_reference(&vc4->color_read, NULL);
- pipe_surface_reference(&vc4->msaa_color_write, NULL);
}
if (vc4->framebuffer.zsbuf &&
(vc4->resolve & (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL))) {
- pipe_surface_reference(&vc4->zs_write,
- zsbuf->texture->nr_samples > 1 ?
- NULL : zsbuf);
- pipe_surface_reference(&vc4->msaa_zs_write,
- zsbuf->texture->nr_samples > 1 ?
- zsbuf : NULL);
+ if (zsbuf->texture->nr_samples > 1) {
+ pipe_surface_reference(&vc4->msaa_zs_write, zsbuf);
+ } else {
+ pipe_surface_reference(&vc4->zs_write, zsbuf);
+ }
if (!(vc4->cleared & (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL))) {
pipe_surface_reference(&vc4->zs_read, zsbuf);
- } else {
- pipe_surface_reference(&vc4->zs_read, NULL);
}
- } else {
- pipe_surface_reference(&vc4->zs_write, NULL);
- pipe_surface_reference(&vc4->zs_read, NULL);
- pipe_surface_reference(&vc4->msaa_zs_write, NULL);
}
vc4_job_submit(vc4);
@@ -182,9 +168,6 @@ vc4_context_destroy(struct pipe_context *pctx)
pipe_surface_reference(&vc4->framebuffer.cbufs[0], NULL);
pipe_surface_reference(&vc4->framebuffer.zsbuf, NULL);
- pipe_surface_reference(&vc4->color_write, NULL);
- pipe_surface_reference(&vc4->color_read, NULL);
-
vc4_program_fini(pctx);
ralloc_free(vc4);
diff --git a/src/gallium/drivers/vc4/vc4_job.c b/src/gallium/drivers/vc4/vc4_job.c
index e71f6f4..a957689 100644
--- a/src/gallium/drivers/vc4/vc4_job.c
+++ b/src/gallium/drivers/vc4/vc4_job.c
@@ -70,6 +70,13 @@ vc4_job_reset(struct vc4_context *vc4)
vc4->draw_min_y = ~0;
vc4->draw_max_x = 0;
vc4->draw_max_y = 0;
+
+ pipe_surface_reference(&vc4->color_write, NULL);
+ pipe_surface_reference(&vc4->color_read, NULL);
+ pipe_surface_reference(&vc4->msaa_color_write, NULL);
+ pipe_surface_reference(&vc4->zs_write, NULL);
+ pipe_surface_reference(&vc4->zs_read, NULL);
+ pipe_surface_reference(&vc4->msaa_zs_write, NULL);
}
static void
More information about the mesa-commit
mailing list