@@ -408,7 +408,7 @@ gen_blend(const struct pipe_blend_state *blend, | |||
int one_reg = -1; | |||
int constR_reg = -1, constG_reg = -1, constB_reg = -1, constA_reg = -1; | |||
ASSERT(blend->blend_enable); | |||
ASSERT(blend->rt[0].blend_enable); | |||
/* packed RGBA -> float colors */ | |||
unpack_colors(f, color_format, fbRGBA_reg, | |||
@@ -420,7 +420,7 @@ gen_blend(const struct pipe_blend_state *blend, | |||
* because in some cases (like PIPE_BLENDFACTOR_ONE and | |||
* PIPE_BLENDFACTOR_ZERO) we can avoid doing unnecessary math. | |||
*/ | |||
switch (blend->rgb_src_factor) { | |||
switch (blend->rt[0].rgb_src_factor) { | |||
case PIPE_BLENDFACTOR_ONE: | |||
/* factors = (1,1,1), so term = (R,G,B) */ | |||
spe_move(f, term1R_reg, fragR_reg); | |||
@@ -574,7 +574,7 @@ gen_blend(const struct pipe_blend_state *blend, | |||
* the full term A*factor, not just the factor itself, because | |||
* in many cases we can avoid doing unnecessary multiplies. | |||
*/ | |||
switch (blend->alpha_src_factor) { | |||
switch (blend->rt[0].alpha_src_factor) { | |||
case PIPE_BLENDFACTOR_ZERO: | |||
/* factor = 0, so term = 0 */ | |||
spe_load_float(f, term1A_reg, 0.0f); | |||
@@ -648,7 +648,7 @@ gen_blend(const struct pipe_blend_state *blend, | |||
* the full term (Rfb,Gfb,Bfb)*(factor), not just the factor itself, because | |||
* in many cases we can avoid doing unnecessary multiplies. | |||
*/ | |||
switch (blend->rgb_dst_factor) { | |||
switch (blend->rt[0].rgb_dst_factor) { | |||
case PIPE_BLENDFACTOR_ONE: | |||
/* factors = (1,1,1), so term = (Rfb,Gfb,Bfb) */ | |||
spe_move(f, term2R_reg, fbR_reg); | |||
@@ -786,7 +786,7 @@ gen_blend(const struct pipe_blend_state *blend, | |||
* the full term Afb*factor, not just the factor itself, because | |||
* in many cases we can avoid doing unnecessary multiplies. | |||
*/ | |||
switch (blend->alpha_dst_factor) { | |||
switch (blend->rt[0].alpha_dst_factor) { | |||
case PIPE_BLENDFACTOR_ONE: | |||
/* factor = 1, so term = Afb */ | |||
spe_move(f, term2A_reg, fbA_reg); | |||
@@ -858,7 +858,7 @@ gen_blend(const struct pipe_blend_state *blend, | |||
/* | |||
* Combine Src/Dest RGB terms as per the blend equation. | |||
*/ | |||
switch (blend->rgb_func) { | |||
switch (blend->rt[0].rgb_func) { | |||
case PIPE_BLEND_ADD: | |||
spe_fa(f, fragR_reg, term1R_reg, term2R_reg); | |||
spe_fa(f, fragG_reg, term1G_reg, term2G_reg); | |||
@@ -891,7 +891,7 @@ gen_blend(const struct pipe_blend_state *blend, | |||
/* | |||
* Combine Src/Dest A term | |||
*/ | |||
switch (blend->alpha_func) { | |||
switch (blend->rt[0].alpha_func) { | |||
case PIPE_BLEND_ADD: | |||
spe_fa(f, fragA_reg, term1A_reg, term2A_reg); | |||
break; | |||
@@ -2118,7 +2118,7 @@ cell_gen_fragment_function(struct cell_context *cell, | |||
spe_comment(f, 0, "Fetch quad colors from tile"); | |||
spe_lqx(f, fbRGBA_reg, color_tile_reg, quad_offset_reg); | |||
if (blend->blend_enable) { | |||
if (blend->rt[0].blend_enable) { | |||
spe_comment(f, 0, "Perform blending"); | |||
gen_blend(blend, blend_color, f, color_format, | |||
fragR_reg, fragG_reg, fragB_reg, fragA_reg, fbRGBA_reg); | |||
@@ -2143,9 +2143,9 @@ cell_gen_fragment_function(struct cell_context *cell, | |||
gen_logicop(blend, f, rgba_reg, fbRGBA_reg); | |||
} | |||
if (blend->colormask != PIPE_MASK_RGBA) { | |||
if (blend->rt[0].colormask != PIPE_MASK_RGBA) { | |||
spe_comment(f, 0, "Compute color mask"); | |||
gen_colormask(f, blend->colormask, color_format, rgba_reg, fbRGBA_reg); | |||
gen_colormask(f, blend->rt[0].colormask, color_format, rgba_reg, fbRGBA_reg); | |||
} | |||
/* Mix fragment colors with framebuffer colors using the quad/pixel mask: |
@@ -999,23 +999,23 @@ cell_generate_alpha_blend(struct cell_blend_state *cb) | |||
/* Does the selected blend mode make use of the source / destination | |||
* color (RGB) blend factors? | |||
*/ | |||
boolean need_color_factor = b->blend_enable | |||
&& (b->rgb_func != PIPE_BLEND_MIN) | |||
&& (b->rgb_func != PIPE_BLEND_MAX); | |||
boolean need_color_factor = b->rt[0].blend_enable | |||
&& (b->rt[0].rgb_func != PIPE_BLEND_MIN) | |||
&& (b->rt[0].rgb_func != PIPE_BLEND_MAX); | |||
/* Does the selected blend mode make use of the source / destination | |||
* alpha blend factors? | |||
*/ | |||
boolean need_alpha_factor = b->blend_enable | |||
&& (b->alpha_func != PIPE_BLEND_MIN) | |||
&& (b->alpha_func != PIPE_BLEND_MAX); | |||
boolean need_alpha_factor = b->rt[0].blend_enable | |||
&& (b->rt[0].alpha_func != PIPE_BLEND_MIN) | |||
&& (b->rt[0].alpha_func != PIPE_BLEND_MAX); | |||
if (b->blend_enable) { | |||
sF[0] = b->rgb_src_factor; | |||
if (b->rt[0].blend_enable) { | |||
sF[0] = b->rt[0].rgb_src_factor; | |||
sF[1] = sF[0]; | |||
sF[2] = sF[0]; | |||
switch (b->alpha_src_factor & 0x0f) { | |||
switch (b->rt[0].alpha_src_factor & 0x0f) { | |||
case PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE: | |||
sF[3] = PIPE_BLENDFACTOR_ONE; | |||
break; | |||
@@ -1023,30 +1023,30 @@ cell_generate_alpha_blend(struct cell_blend_state *cb) | |||
case PIPE_BLENDFACTOR_DST_COLOR: | |||
case PIPE_BLENDFACTOR_CONST_COLOR: | |||
case PIPE_BLENDFACTOR_SRC1_COLOR: | |||
sF[3] = b->alpha_src_factor + 1; | |||
sF[3] = b->rt[0].alpha_src_factor + 1; | |||
break; | |||
default: | |||
sF[3] = b->alpha_src_factor; | |||
sF[3] = b->rt[0].alpha_src_factor; | |||
} | |||
dF[0] = b->rgb_dst_factor; | |||
dF[0] = b->rt[0].rgb_dst_factor; | |||
dF[1] = dF[0]; | |||
dF[2] = dF[0]; | |||
switch (b->alpha_dst_factor & 0x0f) { | |||
switch (b->rt[0].alpha_dst_factor & 0x0f) { | |||
case PIPE_BLENDFACTOR_SRC_COLOR: | |||
case PIPE_BLENDFACTOR_DST_COLOR: | |||
case PIPE_BLENDFACTOR_CONST_COLOR: | |||
case PIPE_BLENDFACTOR_SRC1_COLOR: | |||
dF[3] = b->alpha_dst_factor + 1; | |||
dF[3] = b->rt[0].alpha_dst_factor + 1; | |||
break; | |||
default: | |||
dF[3] = b->alpha_dst_factor; | |||
dF[3] = b->rt[0].alpha_dst_factor; | |||
} | |||
func[0] = b->rgb_func; | |||
func[0] = b->rt[0].rgb_func; | |||
func[1] = func[0]; | |||
func[2] = func[0]; | |||
func[3] = b->alpha_func; | |||
func[3] = b->rt[0].alpha_func; | |||
} else { | |||
sF[0] = PIPE_BLENDFACTOR_ONE; | |||
sF[1] = PIPE_BLENDFACTOR_ONE; | |||
@@ -1067,7 +1067,7 @@ cell_generate_alpha_blend(struct cell_blend_state *cb) | |||
/* If alpha writing is enabled and the alpha blend mode requires use of | |||
* the alpha factor, calculate the alpha factor. | |||
*/ | |||
if (((b->colormask & 8) != 0) && need_alpha_factor) { | |||
if (((b->rt[0].colormask & 8) != 0) && need_alpha_factor) { | |||
src_factor[3] = emit_alpha_factor_calculation(f, sF[3], const_color[3], | |||
frag[3], pixel[3]); | |||
@@ -1091,8 +1091,8 @@ cell_generate_alpha_blend(struct cell_blend_state *cb) | |||
src_factor[2] = dst_factor[3]; | |||
} else if (need_color_factor) { | |||
emit_color_factor_calculation(f, | |||
b->rgb_src_factor, | |||
b->colormask, | |||
b->rt[0].rgb_src_factor, | |||
b->rt[0].colormask, | |||
frag, pixel, const_color, src_factor); | |||
} | |||
@@ -1111,15 +1111,15 @@ cell_generate_alpha_blend(struct cell_blend_state *cb) | |||
dst_factor[2] = src_factor[2]; | |||
} else if (need_color_factor) { | |||
emit_color_factor_calculation(f, | |||
b->rgb_dst_factor, | |||
b->colormask, | |||
b->rt[0].rgb_dst_factor, | |||
b->rt[0].colormask, | |||
frag, pixel, const_color, dst_factor); | |||
} | |||
for (i = 0; i < 4; ++i) { | |||
if ((b->colormask & (1U << i)) != 0) { | |||
if ((b->rt[0].colormask & (1U << i)) != 0) { | |||
emit_blend_calculation(f, | |||
func[i], sF[i], dF[i], | |||
frag[i], src_factor[i], | |||
@@ -1216,7 +1216,7 @@ cell_generate_logic_op(struct spe_function *f, | |||
/* Short-circuit the noop and invert cases. | |||
*/ | |||
if ((logic_op == PIPE_LOGICOP_NOOP) || (blend->colormask == 0)) { | |||
if ((logic_op == PIPE_LOGICOP_NOOP) || (blend->rt[0].colormask == 0)) { | |||
spe_bi(f, 0, 0, 0); | |||
return; | |||
} else if (logic_op == PIPE_LOGICOP_INVERT) { |