swr: [rasterizer jitter] canonicalize blend compile state

Canonicalize to prevent unnecessary JIT compiles.

Signed-off-by: Tim Rowley <timothy.o.rowley@intel.com>
This commit is contained in:
Tim Rowley 2016-09-30 15:18:13 -05:00
parent 4198520a82
commit 114f7a92c6
2 changed files with 39 additions and 0 deletions

View File

@ -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;
}
}
};

View File

@ -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()) {