since the driver doesn't actually handle stencil yet the code won't do much.tags/7.8-rc1
| @@ -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; | |||
| } | |||