summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/softpipe/sp_state_surface.c
diff options
context:
space:
mode:
authorYounes Manton <younes.m@gmail.com>2009-09-27 10:56:42 -0400
committerYounes Manton <younes.m@gmail.com>2009-09-27 10:56:42 -0400
commita77226071f6814a53358a5d6caff685889d0e4ec (patch)
tree983667c154d16618af9237bc5f9ce2c13fa2c743 /src/gallium/drivers/softpipe/sp_state_surface.c
parentbcca927562c1e2e38e649f2e70a695ddafa4ef2c (diff)
downloadexternal_mesa3d-a77226071f6814a53358a5d6caff685889d0e4ec.zip
external_mesa3d-a77226071f6814a53358a5d6caff685889d0e4ec.tar.gz
external_mesa3d-a77226071f6814a53358a5d6caff685889d0e4ec.tar.bz2
softpipe: Grab a ref when the fb is set.
Nasty bug when the surface is freed and another is allocated right on top of it. The next time we set the fb state SP thinks it's the same surface and doesn't flush, and when the flush eventually happens the surface belongs to a completely different texture.
Diffstat (limited to 'src/gallium/drivers/softpipe/sp_state_surface.c')
-rw-r--r--src/gallium/drivers/softpipe/sp_state_surface.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/gallium/drivers/softpipe/sp_state_surface.c b/src/gallium/drivers/softpipe/sp_state_surface.c
index c8f55c3..bc0e201 100644
--- a/src/gallium/drivers/softpipe/sp_state_surface.c
+++ b/src/gallium/drivers/softpipe/sp_state_surface.c
@@ -56,7 +56,7 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
sp_flush_tile_cache(sp->cbuf_cache[i]);
/* assign new */
- sp->framebuffer.cbufs[i] = fb->cbufs[i];
+ pipe_surface_reference(&sp->framebuffer.cbufs[i], fb->cbufs[i]);
/* update cache */
sp_tile_cache_set_surface(sp->cbuf_cache[i], fb->cbufs[i]);
@@ -71,7 +71,7 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
sp_flush_tile_cache(sp->zsbuf_cache);
/* assign new */
- sp->framebuffer.zsbuf = fb->zsbuf;
+ pipe_surface_reference(&sp->framebuffer.zsbuf, fb->zsbuf);
/* update cache */
sp_tile_cache_set_surface(sp->zsbuf_cache, fb->zsbuf);