mesa: Keep a computed value for dual source blend func with each buffer.
The i965 driver needed this as well for hardware setup, so instead of duplicating the logic, just save it off. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -1703,13 +1703,6 @@ _mesa_set_mvp_with_dp4( struct gl_context *ctx,
|
||||
ctx->mvp_with_dp4 = flag;
|
||||
}
|
||||
|
||||
static GLboolean
|
||||
blend_factor_is_dual_src(GLenum factor)
|
||||
{
|
||||
return factor == GL_SRC1_COLOR || factor == GL_SRC1_ALPHA ||
|
||||
factor == GL_ONE_MINUS_SRC1_COLOR || factor == GL_ONE_MINUS_SRC1_ALPHA;
|
||||
}
|
||||
|
||||
/*
|
||||
* ARB_blend_func_extended - ERRORS section
|
||||
* "The error INVALID_OPERATION is generated by Begin or any procedure that
|
||||
@@ -1722,16 +1715,13 @@ static GLboolean
|
||||
_mesa_check_blend_func_error(struct gl_context *ctx)
|
||||
{
|
||||
GLuint i;
|
||||
for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) {
|
||||
if (blend_factor_is_dual_src(ctx->Color.Blend[i].SrcRGB) ||
|
||||
blend_factor_is_dual_src(ctx->Color.Blend[i].DstRGB) ||
|
||||
blend_factor_is_dual_src(ctx->Color.Blend[i].SrcA) ||
|
||||
blend_factor_is_dual_src(ctx->Color.Blend[i].DstA)) {
|
||||
if (i >= ctx->Const.MaxDualSourceDrawBuffers) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"dual source blend on illegal attachment");
|
||||
return GL_FALSE;
|
||||
}
|
||||
for (i = ctx->Const.MaxDualSourceDrawBuffers;
|
||||
i < ctx->DrawBuffer->_NumColorDrawBuffers;
|
||||
i++) {
|
||||
if (ctx->Color.Blend[i]._UsesDualSrc) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"dual source blend on illegal attachment");
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
return GL_TRUE;
|
||||
|
Reference in New Issue
Block a user