diff options
author | Eric Anholt <[email protected]> | 2014-12-21 12:48:59 -0800 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2015-01-06 15:40:41 -0800 |
commit | 239db93888a75a03cf52910f596c1184746eaebd (patch) | |
tree | 38c0185b3d4b3fdb7f44dbdb84483cb080af682a | |
parent | 70e8ccc459d9bf579ad7efeae453cb8641266c94 (diff) |
gallium: Plumb the swap INVALIDATE_ANCILLARY flag through more layers.
v2: Instead of telling the driver that the window system ancillaries have
been invalidated (when the driver doesn't know which of its buffers
are the window system's!), introduce a method for invalidating
specific surfaces.
Reviewed-by: Jose Fonseca <[email protected]>
-rw-r--r-- | src/gallium/include/pipe/p_context.h | 11 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/dri_drawable.c | 6 |
2 files changed, 17 insertions, 0 deletions
diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h index af5674ff753..a4cae8eaf63 100644 --- a/src/gallium/include/pipe/p_context.h +++ b/src/gallium/include/pipe/p_context.h @@ -551,6 +551,17 @@ struct pipe_context { */ void (*flush_resource)(struct pipe_context *ctx, struct pipe_resource *resource); + + /** + * Invalidate the contents of the resource. + * + * This is used to implement EGL's semantic of undefined depth/stencil + * contenst after a swapbuffers. This allows a tiled renderer (for + * example) to not store the depth buffer. + */ + void (*invalidate_resource)(struct pipe_context *ctx, + struct pipe_resource *resource); + }; diff --git a/src/gallium/state_trackers/dri/dri_drawable.c b/src/gallium/state_trackers/dri/dri_drawable.c index b7df053594c..eda2d5232c5 100644 --- a/src/gallium/state_trackers/dri/dri_drawable.c +++ b/src/gallium/state_trackers/dri/dri_drawable.c @@ -484,6 +484,12 @@ dri_flush(__DRIcontext *cPriv, } pipe->flush_resource(pipe, drawable->textures[ST_ATTACHMENT_BACK_LEFT]); + + if (pipe->invalidate_resource && + (flags & __DRI2_FLUSH_INVALIDATE_ANCILLARY)) { + pipe->invalidate_resource(pipe, drawable->textures[ST_ATTACHMENT_DEPTH_STENCIL]); + pipe->invalidate_resource(pipe, drawable->msaa_textures[ST_ATTACHMENT_DEPTH_STENCIL]); + } } flush_flags = 0; |