summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/dri/sw/drisw.c
diff options
context:
space:
mode:
authorThomas Hellstrom <thellstrom@vmware.com>2011-06-29 09:00:23 +0200
committerThomas Hellstrom <thellstrom@vmware.com>2011-06-29 12:48:59 +0200
commitac8fdbc1c723afb19eeaba5457ba78d0bf33b8d4 (patch)
tree34b7c9d72551aa7976d634738585d65a256760ae /src/gallium/state_trackers/dri/sw/drisw.c
parent1a7e17e44a1129bbd6a0f454fe95b3ce8240cd45 (diff)
downloadexternal_mesa3d-ac8fdbc1c723afb19eeaba5457ba78d0bf33b8d4.zip
external_mesa3d-ac8fdbc1c723afb19eeaba5457ba78d0bf33b8d4.tar.gz
external_mesa3d-ac8fdbc1c723afb19eeaba5457ba78d0bf33b8d4.tar.bz2
st-api: Rework how drawables are invalidated v3.
The api and the state tracker manager code as well as the state tracker code assumed that only a single context could be bound to a drawable. That is not a valid assumption, since multiple contexts can bind to the same drawable. Fix this by making it the state tracker's responsibility to update all contexts binding to a drawable Note that the state trackers themselves don't use atomic stamps on frame-buffers. Multiple context rendering to the same drawable should be protected by the application. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Diffstat (limited to 'src/gallium/state_trackers/dri/sw/drisw.c')
-rw-r--r--src/gallium/state_trackers/dri/sw/drisw.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/src/gallium/state_trackers/dri/sw/drisw.c b/src/gallium/state_trackers/dri/sw/drisw.c
index ac11f7c..a1879a8 100644
--- a/src/gallium/state_trackers/dri/sw/drisw.c
+++ b/src/gallium/state_trackers/dri/sw/drisw.c
@@ -103,14 +103,11 @@ drisw_present_texture(__DRIdrawable *dPriv,
static INLINE void
drisw_invalidate_drawable(__DRIdrawable *dPriv)
{
- struct dri_context *ctx = dri_get_current(dPriv->driScreenPriv);
struct dri_drawable *drawable = dri_drawable(dPriv);
drawable->texture_stamp = dPriv->lastStamp - 1;
- /* check if swapping currently bound buffer */
- if (ctx && ctx->dPriv == dPriv)
- ctx->st->notify_invalid_framebuffer(ctx->st, &drawable->base);
+ p_atomic_inc(&drawable->base.stamp);
}
static INLINE void