summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r--src/gallium/drivers/failover/fo_context.h8
-rw-r--r--src/gallium/drivers/failover/fo_state.c17
-rw-r--r--src/gallium/drivers/failover/fo_state_emit.c5
3 files changed, 24 insertions, 6 deletions
diff --git a/src/gallium/drivers/failover/fo_context.h b/src/gallium/drivers/failover/fo_context.h
index 191a44c3dfc..bb1a168ea7a 100644
--- a/src/gallium/drivers/failover/fo_context.h
+++ b/src/gallium/drivers/failover/fo_context.h
@@ -51,9 +51,10 @@
#define FO_NEW_VERTEX 0x2000
#define FO_NEW_VERTEX_SHADER 0x4000
#define FO_NEW_BLEND_COLOR 0x8000
-#define FO_NEW_CLEAR_COLOR 0x10000
-#define FO_NEW_VERTEX_BUFFER 0x20000
-#define FO_NEW_VERTEX_ELEMENT 0x40000
+#define FO_NEW_STENCIL_REF 0x10000
+#define FO_NEW_CLEAR_COLOR 0x20000
+#define FO_NEW_VERTEX_BUFFER 0x40000
+#define FO_NEW_VERTEX_ELEMENT 0x80000
@@ -79,6 +80,7 @@ struct failover_context {
const struct fo_state *vertex_shader;
struct pipe_blend_color blend_color;
+ struct pipe_stencil_ref stencil_ref;
struct pipe_clip_state clip;
struct pipe_framebuffer_state framebuffer;
struct pipe_poly_stipple poly_stipple;
diff --git a/src/gallium/drivers/failover/fo_state.c b/src/gallium/drivers/failover/fo_state.c
index c189d1d82cd..970606a3f50 100644
--- a/src/gallium/drivers/failover/fo_state.c
+++ b/src/gallium/drivers/failover/fo_state.c
@@ -90,7 +90,7 @@ failover_delete_blend_state( struct pipe_context *pipe,
static void
failover_set_blend_color( struct pipe_context *pipe,
- const struct pipe_blend_color *blend_color )
+ const struct pipe_blend_color *blend_color )
{
struct failover_context *failover = failover_context(pipe);
@@ -100,9 +100,21 @@ failover_set_blend_color( struct pipe_context *pipe,
failover->hw->set_blend_color( failover->hw, blend_color );
}
+static void
+failover_set_stencil_ref( struct pipe_context *pipe,
+ const struct pipe_stencil_ref *stencil_ref )
+{
+ struct failover_context *failover = failover_context(pipe);
+
+ failover->stencil_ref = *stencil_ref;
+ failover->dirty |= FO_NEW_STENCIL_REF;
+ failover->sw->set_stencil_ref( failover->sw, stencil_ref );
+ failover->hw->set_stencil_ref( failover->hw, stencil_ref );
+}
+
static void
failover_set_clip_state( struct pipe_context *pipe,
- const struct pipe_clip_state *clip )
+ const struct pipe_clip_state *clip )
{
struct failover_context *failover = failover_context(pipe);
@@ -533,6 +545,7 @@ failover_init_state_functions( struct failover_context *failover )
failover->pipe.delete_vs_state = failover_delete_vs_state;
failover->pipe.set_blend_color = failover_set_blend_color;
+ failover->pipe.set_stencil_ref = failover_set_stencil_ref;
failover->pipe.set_clip_state = failover_set_clip_state;
failover->pipe.set_framebuffer_state = failover_set_framebuffer_state;
failover->pipe.set_polygon_stipple = failover_set_polygon_stipple;
diff --git a/src/gallium/drivers/failover/fo_state_emit.c b/src/gallium/drivers/failover/fo_state_emit.c
index a3341e33f80..5c000808425 100644
--- a/src/gallium/drivers/failover/fo_state_emit.c
+++ b/src/gallium/drivers/failover/fo_state_emit.c
@@ -65,7 +65,10 @@ failover_state_emit( struct failover_context *failover )
if (failover->dirty & FO_NEW_DEPTH_STENCIL)
failover->sw->bind_depth_stencil_alpha_state( failover->sw,
- failover->depth_stencil->sw_state );
+ failover->depth_stencil->sw_state );
+
+ if (failover->dirty & FO_NEW_STENCIL_REF)
+ failover->sw->set_stencil_ref( failover->sw, &failover->stencil_ref );
if (failover->dirty & FO_NEW_FRAMEBUFFER)
failover->sw->set_framebuffer_state( failover->sw, &failover->framebuffer );