summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2014-03-12 14:55:37 +1000
committerDave Airlie <airlied@redhat.com>2014-03-12 14:55:37 +1000
commita99e3ac1512211746f8246cce133cc603dbd01d2 (patch)
tree3f42390f49334acbfe413bc4af0ab934a38232ad
parent5a5fce49b1dcd1361495e5bbefc48f772d1a6806 (diff)
renderer: send a scanout resource destroy when a scanout resource is removed
-rw-r--r--src/gallium/renderer/graw_renderer.c4
-rw-r--r--src/gallium/renderer/graw_renderer.h2
2 files changed, 6 insertions, 0 deletions
diff --git a/src/gallium/renderer/graw_renderer.c b/src/gallium/renderer/graw_renderer.c
index b67fbdce0a7..50f92e8d9fd 100644
--- a/src/gallium/renderer/graw_renderer.c
+++ b/src/gallium/renderer/graw_renderer.c
@@ -2841,6 +2841,9 @@ void graw_renderer_resource_create(struct graw_renderer_resource_create_args *ar
void graw_renderer_resource_destroy(struct grend_resource *res)
{
+ if (res->scannedout)
+ (*clicbs->scanout_resource_info)(0, res->id, 0, 0, 0, 0, 0);
+
if (res->readback_fb_id)
glDeleteFramebuffers(1, &res->readback_fb_id);
@@ -3775,6 +3778,7 @@ int graw_renderer_set_scanout(uint32_t res_handle, uint32_t scanout_id, uint32_t
uint32_t stride;
stride = util_format_get_nblocksx(res->base.format, u_minify(res->base.width0, 0)) * elsize;
(*clicbs->scanout_resource_info)(scanout_id, res->id, res->y_0_top ? 1 : 0, stride, res->base.width0, res->base.height0, res->base.format);
+ res->scannedout = 1;
}
(*clicbs->scanout_rect_info)(scanout_id, res->id, box->x, box->y, box->width, box->height);
fprintf(stderr,"setting frontbuffer %d to %d\n", scanout_id, res_handle);
diff --git a/src/gallium/renderer/graw_renderer.h b/src/gallium/renderer/graw_renderer.h
index 66c592b7d0d..14f33675ef5 100644
--- a/src/gallium/renderer/graw_renderer.h
+++ b/src/gallium/renderer/graw_renderer.h
@@ -29,6 +29,8 @@ struct grend_resource {
struct virgl_iovec *iov;
uint32_t num_iovs;
boolean y_0_top;
+
+ boolean scannedout;
};
/* assume every format is sampler friendly */