gallium: change draw_vertex_shader->state from pointer to struct
We were sometimes keeping a pointer to a stack-allocated object. Now make a copy of the pipe_shader_state object. This should fix some seemingly random memory errors/crashes.
This commit is contained in:
@@ -133,7 +133,7 @@ struct draw_vertex_shader {
|
||||
|
||||
/* This member will disappear shortly:
|
||||
*/
|
||||
const struct pipe_shader_state *state;
|
||||
struct pipe_shader_state state;
|
||||
|
||||
struct tgsi_shader_info info;
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ vs_exec_prepare( struct draw_vertex_shader *shader,
|
||||
{
|
||||
/* specify the vertex program to interpret/execute */
|
||||
tgsi_exec_machine_bind_shader(&draw->machine,
|
||||
shader->state->tokens,
|
||||
shader->state.tokens,
|
||||
PIPE_MAX_SAMPLERS,
|
||||
NULL /*samplers*/ );
|
||||
|
||||
@@ -187,7 +187,7 @@ draw_create_vs_exec(struct draw_context *draw,
|
||||
if (vs == NULL)
|
||||
return NULL;
|
||||
|
||||
vs->state = state;
|
||||
vs->state = *state;
|
||||
vs->prepare = vs_exec_prepare;
|
||||
vs->run = vs_exec_run;
|
||||
vs->delete = vs_exec_delete;
|
||||
|
||||
@@ -221,14 +221,14 @@ draw_create_vs_sse(struct draw_context *draw,
|
||||
if (vs == NULL)
|
||||
return NULL;
|
||||
|
||||
vs->base.state = templ;
|
||||
vs->base.state = *templ;
|
||||
vs->base.prepare = vs_sse_prepare;
|
||||
vs->base.run = vs_sse_run;
|
||||
vs->base.delete = vs_sse_delete;
|
||||
|
||||
x86_init_func( &vs->sse2_program );
|
||||
|
||||
if (!tgsi_emit_sse2( (struct tgsi_token *) vs->base.state->tokens,
|
||||
if (!tgsi_emit_sse2( (struct tgsi_token *) vs->base.state.tokens,
|
||||
&vs->sse2_program ))
|
||||
goto fail;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user