mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-08 15:00:11 +01:00
softpipe: Flush draw module when fragment pipeline state changes.
This commit is contained in:
parent
1befcd5a2a
commit
6e68898b05
3 changed files with 22 additions and 5 deletions
|
|
@ -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);
|
||||
|
||||
/* pass-through to draw module */
|
||||
draw_set_rasterizer_state(softpipe->draw, setup);
|
||||
if (softpipe->rasterizer == rasterizer)
|
||||
return;
|
||||
|
||||
softpipe->rasterizer = (struct pipe_rasterizer_state *)setup;
|
||||
/* pass-through to draw module */
|
||||
draw_set_rasterizer_state(softpipe->draw, rasterizer);
|
||||
|
||||
softpipe->rasterizer = rasterizer;
|
||||
|
||||
softpipe->dirty |= SP_NEW_RASTERIZER;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue