diff options
author | Keith Whitwell <keithw@vmware.com> | 2010-09-16 10:45:52 +0100 |
---|---|---|
committer | Keith Whitwell <keithw@vmware.com> | 2010-09-16 17:34:19 +0100 |
commit | 5f00819cb382bdb70c29e2db3c6ff22a879bf10f (patch) | |
tree | 6c28495f4caef7c8610189ed011f50596b0e545c /src/gallium/drivers/llvmpipe/lp_state_blend.c | |
parent | 045ee4601179c44f815ce3842ef900b36d54c914 (diff) |
llvmpipe: add LP_PERF flag to disable various aspects of rasterization
Allows disabling various operations (mainly texture-related, but
will grow) to try & identify bottlenecks.
Unlike LP_DEBUG, this is active even in release builds - which is
necessary for performance investigation.
Diffstat (limited to 'src/gallium/drivers/llvmpipe/lp_state_blend.c')
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_state_blend.c | 29 |
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; } |