cell: fix/add some fallback blend cases
This commit is contained in:
@@ -40,6 +40,24 @@
|
||||
#define LINEAR_QUAD_LAYOUT 1
|
||||
|
||||
|
||||
static INLINE vector float
|
||||
spu_min(vector float a, vector float b)
|
||||
{
|
||||
vector unsigned int m;
|
||||
m = spu_cmpgt(a, b); /* m = a > b ? ~0 : 0 */
|
||||
return spu_sel(a, b, m);
|
||||
}
|
||||
|
||||
|
||||
static INLINE vector float
|
||||
spu_max(vector float a, vector float b)
|
||||
{
|
||||
vector unsigned int m;
|
||||
m = spu_cmpgt(a, b); /* m = a > b ? ~0 : 0 */
|
||||
return spu_sel(b, a, m);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called by rasterizer for each quad after the shader has run. Do
|
||||
* all the per-fragment operations including alpha test, z test,
|
||||
@@ -293,9 +311,9 @@ spu_fallback_fragment_ops(uint x, uint y,
|
||||
*/
|
||||
switch (spu.blend.rgb_dst_factor) {
|
||||
case PIPE_BLENDFACTOR_ONE:
|
||||
term2r = fragR;
|
||||
term2g = fragG;
|
||||
term2b = fragB;
|
||||
term2r = fbRGBA[0];
|
||||
term2g = fbRGBA[1];
|
||||
term2b = fbRGBA[2];
|
||||
break;
|
||||
case PIPE_BLENDFACTOR_ZERO:
|
||||
term2r =
|
||||
@@ -361,8 +379,24 @@ spu_fallback_fragment_ops(uint x, uint y,
|
||||
fragG = spu_sub(term1g, term2g);
|
||||
fragB = spu_sub(term1b, term2b);
|
||||
break;
|
||||
case PIPE_BLEND_REVERSE_SUBTRACT:
|
||||
fragR = spu_sub(term2r, term1r);
|
||||
fragG = spu_sub(term2g, term1g);
|
||||
fragB = spu_sub(term2b, term1b);
|
||||
break;
|
||||
case PIPE_BLEND_MIN:
|
||||
fragR = spu_min(term1r, term2r);
|
||||
fragG = spu_min(term1g, term2g);
|
||||
fragB = spu_min(term1b, term2b);
|
||||
break;
|
||||
case PIPE_BLEND_MAX:
|
||||
fragR = spu_max(term1r, term2r);
|
||||
fragG = spu_max(term1g, term2g);
|
||||
fragB = spu_max(term1b, term2b);
|
||||
break;
|
||||
/* XXX more cases */
|
||||
default:
|
||||
printf("unsup 0x%x\n", spu.blend.rgb_func);
|
||||
ASSERT(0);
|
||||
}
|
||||
|
||||
@@ -376,6 +410,15 @@ spu_fallback_fragment_ops(uint x, uint y,
|
||||
case PIPE_BLEND_SUBTRACT:
|
||||
fragA = spu_sub(term1a, term2a);
|
||||
break;
|
||||
case PIPE_BLEND_REVERSE_SUBTRACT:
|
||||
fragA = spu_sub(term2a, term1a);
|
||||
break;
|
||||
case PIPE_BLEND_MIN:
|
||||
fragA = spu_min(term1a, term2a);
|
||||
break;
|
||||
case PIPE_BLEND_MAX:
|
||||
fragA = spu_max(term1a, term2a);
|
||||
break;
|
||||
/* XXX more cases */
|
||||
default:
|
||||
ASSERT(0);
|
||||
|
||||
Reference in New Issue
Block a user