diff options
author | Tim Rowley <[email protected]> | 2016-09-30 15:18:13 -0500 |
---|---|---|
committer | Tim Rowley <[email protected]> | 2016-10-03 09:57:31 -0500 |
commit | 114f7a92c6a5ea796a4fea9a7b71188fdb243950 (patch) | |
tree | 72284495c31e908b24ee5b2d55e6470eb6afb4d1 /src | |
parent | 4198520a82463aa392762ec156231b95bf2685ac (diff) |
swr: [rasterizer jitter] canonicalize blend compile state
Canonicalize to prevent unnecessary JIT compiles.
Signed-off-by: Tim Rowley <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/swr/rasterizer/jitter/blend_jit.h | 37 | ||||
-rw-r--r-- | src/gallium/drivers/swr/swr_state.cpp | 2 |
2 files changed, 39 insertions, 0 deletions
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.h b/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.h index af317cc5fe3..ddb7374d406 100644 --- a/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.h +++ b/src/gallium/drivers/swr/rasterizer/jitter/blend_jit.h @@ -89,4 +89,41 @@ struct BLEND_COMPILE_STATE { return memcmp(this, &other, sizeof(BLEND_COMPILE_STATE)) == 0; } + + // Canonicalize state to reduce unnecessary JIT compiles + void Canonicalize() + { + if (!desc.alphaTestEnable) + { + alphaTestFormat = (ALPHA_TEST_FORMAT)0; + alphaTestFunction = (SWR_ZFUNCTION)0; + } + + if (!blendState.blendEnable) + { + blendState.sourceAlphaBlendFactor = (SWR_BLEND_FACTOR)0; + blendState.destAlphaBlendFactor = (SWR_BLEND_FACTOR)0; + blendState.sourceBlendFactor = (SWR_BLEND_FACTOR)0; + blendState.destBlendFactor = (SWR_BLEND_FACTOR)0; + blendState.colorBlendFunc = (SWR_BLEND_OP)0; + blendState.alphaBlendFunc = (SWR_BLEND_OP)0; + } + + if (!blendState.logicOpEnable) + { + blendState.logicOpFunc = (SWR_LOGIC_OP)0; + } + + if (!blendState.blendEnable && !blendState.logicOpEnable) + { + format = (SWR_FORMAT)0; + } + + if (!desc.independentAlphaBlendEnable) + { + blendState.sourceAlphaBlendFactor = (SWR_BLEND_FACTOR)0; + blendState.destAlphaBlendFactor = (SWR_BLEND_FACTOR)0; + blendState.alphaBlendFunc = (SWR_BLEND_OP)0; + } + } }; diff --git a/src/gallium/drivers/swr/swr_state.cpp b/src/gallium/drivers/swr/swr_state.cpp index 7d49ce7b896..3e023225433 100644 --- a/src/gallium/drivers/swr/swr_state.cpp +++ b/src/gallium/drivers/swr/swr_state.cpp @@ -1318,6 +1318,8 @@ swr_update_derived(struct pipe_context *pipe, swr_convert_depth_func(ctx->depth_stencil->alpha.func); compileState.alphaTestFormat = ALPHA_TEST_FLOAT32; // xxx + compileState.Canonicalize(); + PFN_BLEND_JIT_FUNC func = NULL; auto search = ctx->blendJIT->find(compileState); if (search != ctx->blendJIT->end()) { |