mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-05 10:20:36 +02:00
cell: adapt to blend changes
This commit is contained in:
parent
99e28d4ee3
commit
88388b99fb
2 changed files with 34 additions and 34 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue