softpipe: more texture transfer fixes.

Need to null-out pointers after freeing transfer objects.
Fix mix-ups between tc->transfer and tc->tex_trans fields.
This commit is contained in:
Brian Paul
2009-03-18 10:17:48 -06:00
parent 71e3aa14fb
commit 9808ae688a
+8 -4
View File
@@ -246,8 +246,8 @@ sp_tile_cache_set_texture(struct pipe_context *pipe,
pipe_texture_reference(&tc->texture, texture);
if (tc->transfer) {
struct pipe_screen *screen = tc->transfer->texture->screen;
if (tc->tex_trans) {
struct pipe_screen *screen = tc->tex_trans->texture->screen;
if (tc->tex_trans_map) {
screen->transfer_unmap(screen, tc->tex_trans);
@@ -255,6 +255,7 @@ sp_tile_cache_set_texture(struct pipe_context *pipe,
}
screen->tex_transfer_destroy(tc->tex_trans);
tc->tex_trans = NULL;
}
/* mark as entries as invalid/empty */
@@ -556,11 +557,14 @@ sp_get_cached_tile_tex(struct softpipe_context *sp,
tc->tex_z != z) {
/* get new transfer (view into texture) */
if (tc->transfer) {
if (tc->tex_trans_map)
if (tc->tex_trans) {
if (tc->tex_trans_map) {
tc->screen->transfer_unmap(tc->screen, tc->tex_trans);
tc->tex_trans_map = NULL;
}
screen->tex_transfer_destroy(tc->tex_trans);
tc->tex_trans = NULL;
}
tc->tex_trans = screen->get_tex_transfer(screen, tc->texture, face, level, z,