summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/llvmpipe/lp_state_blend.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/llvmpipe/lp_state_blend.c')
-rw-r--r--src/gallium/drivers/llvmpipe/lp_state_blend.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_state_blend.c b/src/gallium/drivers/llvmpipe/lp_state_blend.c
index 5b39d9d1a9..6bba9077d1 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_blend.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_blend.c
@@ -38,13 +38,23 @@
#include "lp_screen.h"
#include "lp_context.h"
#include "lp_state.h"
+#include "lp_debug.h"
static void *
llvmpipe_create_blend_state(struct pipe_context *pipe,
const struct pipe_blend_state *blend)
{
- return mem_dup(blend, sizeof(*blend));
+ struct pipe_blend_state *state = mem_dup(blend, sizeof *blend);
+ int i;
+
+ if (LP_PERF & PERF_NO_BLEND) {
+ state->independent_blend_enable = 0;
+ for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++)
+ state->rt[i].blend_enable = 0;
+ }
+
+ return state;
}
@@ -100,7 +110,22 @@ static void *
llvmpipe_create_depth_stencil_state(struct pipe_context *pipe,
const struct pipe_depth_stencil_alpha_state *depth_stencil)
{
- return mem_dup(depth_stencil, sizeof(*depth_stencil));
+ struct pipe_depth_stencil_alpha_state *state;
+
+ state = mem_dup(depth_stencil, sizeof *depth_stencil);
+
+ if (LP_PERF & PERF_NO_DEPTH) {
+ state->depth.enabled = 0;
+ state->depth.writemask = 0;
+ state->stencil[0].enabled = 0;
+ state->stencil[1].enabled = 0;
+ }
+
+ if (LP_PERF & PERF_NO_ALPHATEST) {
+ state->alpha.enabled = 0;
+ }
+
+ return state;
}