llvmpipe: adapt to stencil ref changes
since the driver doesn't actually handle stencil yet the code won't do much.
This commit is contained in:
@@ -148,6 +148,7 @@ llvmpipe_create_context( struct pipe_screen *screen, void *priv )
|
||||
llvmpipe->pipe.delete_vs_state = llvmpipe_delete_vs_state;
|
||||
|
||||
llvmpipe->pipe.set_blend_color = llvmpipe_set_blend_color;
|
||||
llvmpipe->pipe.set_stencil_ref = llvmpipe_set_stencil_ref;
|
||||
llvmpipe->pipe.set_clip_state = llvmpipe_set_clip_state;
|
||||
llvmpipe->pipe.set_constant_buffer = llvmpipe_set_constant_buffer;
|
||||
llvmpipe->pipe.set_framebuffer_state = llvmpipe_set_framebuffer_state;
|
||||
|
||||
@@ -61,6 +61,7 @@ struct llvmpipe_context {
|
||||
|
||||
/** Other rendering state */
|
||||
struct pipe_blend_color blend_color;
|
||||
struct pipe_stencil_ref stencil_ref;
|
||||
struct pipe_clip_state clip;
|
||||
struct pipe_buffer *constants[PIPE_SHADER_TYPES];
|
||||
struct pipe_framebuffer_state framebuffer;
|
||||
|
||||
@@ -152,13 +152,16 @@ void llvmpipe_bind_rasterizer_state(struct pipe_context *, void *);
|
||||
void llvmpipe_delete_rasterizer_state(struct pipe_context *, void *);
|
||||
|
||||
void llvmpipe_set_framebuffer_state( struct pipe_context *,
|
||||
const struct pipe_framebuffer_state * );
|
||||
const struct pipe_framebuffer_state * );
|
||||
|
||||
void llvmpipe_set_blend_color( struct pipe_context *pipe,
|
||||
const struct pipe_blend_color *blend_color );
|
||||
|
||||
void llvmpipe_set_stencil_ref( struct pipe_context *pipe,
|
||||
const struct pipe_stencil_ref *stencil_ref );
|
||||
|
||||
void llvmpipe_set_clip_state( struct pipe_context *,
|
||||
const struct pipe_clip_state * );
|
||||
const struct pipe_clip_state * );
|
||||
|
||||
void llvmpipe_set_constant_buffer(struct pipe_context *,
|
||||
uint shader, uint index,
|
||||
|
||||
@@ -121,3 +121,24 @@ llvmpipe_delete_depth_stencil_state(struct pipe_context *pipe, void *depth)
|
||||
{
|
||||
FREE( depth );
|
||||
}
|
||||
|
||||
void llvmpipe_set_stencil_ref( struct pipe_context *pipe,
|
||||
const struct pipe_stencil_ref *stencil_ref )
|
||||
{
|
||||
struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe);
|
||||
|
||||
if(!stencil_ref)
|
||||
return;
|
||||
|
||||
if(memcmp(&llvmpipe->stencil_ref, stencil_ref, sizeof *stencil_ref) == 0)
|
||||
return;
|
||||
|
||||
draw_flush(llvmpipe->draw);
|
||||
|
||||
memcpy(&llvmpipe->stencil_ref, stencil_ref, sizeof *stencil_ref);
|
||||
|
||||
/* not sure. want new flag? */
|
||||
llvmpipe->dirty |= LP_NEW_DEPTH_STENCIL_ALPHA;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user