ctx->blend_color.color);
if (ff) {
- struct panfrost_blend_final final = {
- .equation.constant = pan_blend_get_constant(
- blend->info[rti].constant_mask,
- ctx->blend_color.color),
- };
-
+ struct panfrost_blend_final final = {};
return final;
}
unsigned first_tag;
};
-struct panfrost_blend_equation_final {
- float constant;
-};
-
struct pan_blend_info {
unsigned constant_mask : 4;
bool fixed_function : 1;
struct panfrost_blend_final {
/* Set for a shader, clear for an equation */
bool is_shader;
-
- union {
- struct panfrost_blend_shader_final shader;
- struct panfrost_blend_equation_final equation;
- };
+ struct panfrost_blend_shader_final shader;
};
void
chan_size = MAX2(format_desc->channel[0].size, chan_size);
/* Fixed point constant */
- u16 constant = blend[i].equation.constant * ((1 << chan_size) - 1);
+ float constant_f = pan_blend_get_constant(
+ info.constant_mask,
+ ctx->blend_color.color);
+
+ u16 constant = constant_f * ((1 << chan_size) - 1);
constant <<= 16 - chan_size;
cfg.bifrost.constant = constant;
if (blend[i].is_shader) {
cfg.midgard.shader_pc = blend[i].shader.gpu | blend[i].shader.first_tag;
} else {
- cfg.midgard.constant = blend[i].equation.constant;
+ cfg.midgard.constant = pan_blend_get_constant(
+ info.constant_mask,
+ ctx->blend_color.color);
}
}
state->sfbd_blend_shader = blend[0].shader.gpu |
blend[0].shader.first_tag;
} else {
- state->sfbd_blend_constant = blend[0].equation.constant;
+ state->sfbd_blend_constant = pan_blend_get_constant(
+ so->info[0].constant_mask,
+ ctx->blend_color.color);
}
} else if (dev->quirks & MIDGARD_SFBD) {
/* If there is no colour buffer, leaving fields default is