llvmpipe: Make rgb/alpha bland func/factors match, when there is no alpha.
Makes AoS blending easier, and state more canonical.
This commit is contained in:
parent
9a8e9f4595
commit
87267c71f6
|
@ -1049,7 +1049,7 @@ llvmpipe_set_constant_buffer(struct pipe_context *pipe,
|
||||||
* Return the blend factor equivalent to a destination alpha of one.
|
* Return the blend factor equivalent to a destination alpha of one.
|
||||||
*/
|
*/
|
||||||
static INLINE unsigned
|
static INLINE unsigned
|
||||||
force_dst_alpha_one(unsigned factor, boolean alpha)
|
force_dst_alpha_one(unsigned factor)
|
||||||
{
|
{
|
||||||
switch(factor) {
|
switch(factor) {
|
||||||
case PIPE_BLENDFACTOR_DST_ALPHA:
|
case PIPE_BLENDFACTOR_DST_ALPHA:
|
||||||
|
@ -1060,15 +1060,6 @@ force_dst_alpha_one(unsigned factor, boolean alpha)
|
||||||
return PIPE_BLENDFACTOR_ZERO;
|
return PIPE_BLENDFACTOR_ZERO;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alpha) {
|
|
||||||
switch(factor) {
|
|
||||||
case PIPE_BLENDFACTOR_DST_COLOR:
|
|
||||||
return PIPE_BLENDFACTOR_ONE;
|
|
||||||
case PIPE_BLENDFACTOR_INV_DST_COLOR:
|
|
||||||
return PIPE_BLENDFACTOR_ZERO;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return factor;
|
return factor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1145,12 +1136,15 @@ make_variant_key(struct llvmpipe_context *lp,
|
||||||
*
|
*
|
||||||
* TODO: This should be generalized to all channels for better
|
* TODO: This should be generalized to all channels for better
|
||||||
* performance, but only alpha causes correctness issues.
|
* performance, but only alpha causes correctness issues.
|
||||||
|
*
|
||||||
|
* Also, force rgb/alpha func/factors match, to make AoS blending easier.
|
||||||
*/
|
*/
|
||||||
if (format_desc->swizzle[3] > UTIL_FORMAT_SWIZZLE_W) {
|
if (format_desc->swizzle[3] > UTIL_FORMAT_SWIZZLE_W) {
|
||||||
blend_rt->rgb_src_factor = force_dst_alpha_one(blend_rt->rgb_src_factor, FALSE);
|
blend_rt->rgb_src_factor = force_dst_alpha_one(blend_rt->rgb_src_factor);
|
||||||
blend_rt->rgb_dst_factor = force_dst_alpha_one(blend_rt->rgb_dst_factor, FALSE);
|
blend_rt->rgb_dst_factor = force_dst_alpha_one(blend_rt->rgb_dst_factor);
|
||||||
blend_rt->alpha_src_factor = force_dst_alpha_one(blend_rt->alpha_src_factor, TRUE);
|
blend_rt->alpha_func = blend_rt->rgb_func;
|
||||||
blend_rt->alpha_dst_factor = force_dst_alpha_one(blend_rt->alpha_dst_factor, TRUE);
|
blend_rt->alpha_src_factor = blend_rt->rgb_src_factor;
|
||||||
|
blend_rt->alpha_dst_factor = blend_rt->rgb_dst_factor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue