draw: Make copy of the TGSI tokens.

There is no guarantee that the tokens TGSI will persist beyond the
create_fs_state. The pipe driver (and therefore the draw module) is
responsible for making copies of the TGSI tokens when it needs them.

Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
José Fonseca 2011-09-23 16:32:31 +01:00
parent 06ae4a62b1
commit fc31f9a3f2
2 changed files with 6 additions and 2 deletions

View file

@ -848,7 +848,7 @@ aaline_create_fs_state(struct pipe_context *pipe,
if (aafs == NULL)
return NULL;
aafs->state = *fs;
aafs->state.tokens = tgsi_dup_tokens(fs->tokens);
/* pass-through */
aafs->driver_fs = aaline->driver_create_fs_state(pipe, fs);
@ -882,6 +882,8 @@ aaline_delete_fs_state(struct pipe_context *pipe, void *fs)
if (aafs->aaline_fs)
aaline->driver_delete_fs_state(pipe, aafs->aaline_fs);
FREE((void*)aafs->state.tokens);
FREE(aafs);
}

View file

@ -834,7 +834,7 @@ aapoint_create_fs_state(struct pipe_context *pipe,
if (aafs == NULL)
return NULL;
aafs->state = *fs;
aafs->state.tokens = tgsi_dup_tokens(fs->tokens);
/* pass-through */
aafs->driver_fs = aapoint->driver_create_fs_state(pipe, fs);
@ -868,6 +868,8 @@ aapoint_delete_fs_state(struct pipe_context *pipe, void *fs)
if (aafs->aapoint_fs)
aapoint->driver_delete_fs_state(pipe, aafs->aapoint_fs);
FREE((void*)aafs->state.tokens);
FREE(aafs);
}