| @@ -29,6 +29,7 @@ | |||
| */ | |||
| #include "util/u_memory.h" | |||
| #include "draw/draw_context.h" | |||
| #include "sp_context.h" | |||
| #include "sp_state.h" | |||
| @@ -45,6 +46,8 @@ void softpipe_bind_blend_state( struct pipe_context *pipe, | |||
| { | |||
| struct softpipe_context *softpipe = softpipe_context(pipe); | |||
| draw_flush(softpipe->draw); | |||
| softpipe->blend = (struct pipe_blend_state *)blend; | |||
| softpipe->dirty |= SP_NEW_BLEND; | |||
| @@ -62,6 +65,8 @@ void softpipe_set_blend_color( struct pipe_context *pipe, | |||
| { | |||
| struct softpipe_context *softpipe = softpipe_context(pipe); | |||
| draw_flush(softpipe->draw); | |||
| softpipe->blend_color = *blend_color; | |||
| softpipe->dirty |= SP_NEW_BLEND; | |||
| @@ -69,7 +69,14 @@ softpipe_bind_fs_state(struct pipe_context *pipe, void *fs) | |||
| { | |||
| struct softpipe_context *softpipe = softpipe_context(pipe); | |||
| softpipe->fs = (struct sp_fragment_shader *) fs; | |||
| draw_flush(softpipe->draw); | |||
| if (softpipe->fs == fs) | |||
| return; | |||
| draw_flush(softpipe->draw); | |||
| softpipe->fs = fs; | |||
| softpipe->dirty |= SP_NEW_FS; | |||
| } | |||
| @@ -159,6 +166,8 @@ softpipe_set_constant_buffer(struct pipe_context *pipe, | |||
| assert(shader < PIPE_SHADER_TYPES); | |||
| assert(index == 0); | |||
| draw_flush(softpipe->draw); | |||
| /* note: reference counting */ | |||
| pipe_buffer_reference(&softpipe->constants[shader].buffer, | |||
| buf ? buf->buffer : NULL); | |||
| @@ -41,14 +41,17 @@ softpipe_create_rasterizer_state(struct pipe_context *pipe, | |||
| } | |||
| void softpipe_bind_rasterizer_state(struct pipe_context *pipe, | |||
| void *setup) | |||
| void *rasterizer) | |||
| { | |||
| struct softpipe_context *softpipe = softpipe_context(pipe); | |||
| if (softpipe->rasterizer == rasterizer) | |||
| return; | |||
| /* pass-through to draw module */ | |||
| draw_set_rasterizer_state(softpipe->draw, setup); | |||
| draw_set_rasterizer_state(softpipe->draw, rasterizer); | |||
| softpipe->rasterizer = (struct pipe_rasterizer_state *)setup; | |||
| softpipe->rasterizer = rasterizer; | |||
| softpipe->dirty |= SP_NEW_RASTERIZER; | |||
| } | |||