#include "pan_blending.h"
#include "pan_context.h"
#include "gallium/auxiliary/util/u_blend.h"
-#include "util/u_format.h"
+#include "util/format/u_format.h"
/*
* Implements fixed-function blending on Midgard.
/* Fixed-function can handle sRGB */
format = util_format_linear(format);
- /* Decompose the format */
- const struct util_format_description *desc =
- util_format_description(format);
-
- /* Any 8-bit unorm is supported */
- if (util_format_is_unorm8(desc))
- return true;
-
- /* Certain special formats are, too */
- switch (format) {
- case PIPE_FORMAT_B5G6R5_UNORM:
- case PIPE_FORMAT_R10G10B10A2_UNORM:
- case PIPE_FORMAT_B10G10R10A2_UNORM:
- case PIPE_FORMAT_R10G10B10X2_UNORM:
- case PIPE_FORMAT_B10G10R10X2_UNORM:
- case PIPE_FORMAT_B4G4R4A4_UNORM:
- case PIPE_FORMAT_B4G4R4X4_UNORM:
- case PIPE_FORMAT_A4R4_UNORM:
- case PIPE_FORMAT_R4A4_UNORM:
- case PIPE_FORMAT_A4B4G4R4_UNORM:
+ switch (panfrost_pipe_format_table[format].hw) {
+ case MALI_RGB565:
+ case MALI_RGB5_A1_UNORM:
+ case MALI_RGB10_A2_UNORM:
+ case MALI_RGBA4_UNORM:
+ case MALI_R8_UNORM:
+ case MALI_RG8_UNORM:
+ case MALI_RGB8_UNORM:
+ case MALI_RGBA8_UNORM:
return true;
default:
return false;
bool
panfrost_make_fixed_blend_mode(
- const struct pipe_rt_blend_state *blend,
+ struct pipe_rt_blend_state blend,
struct mali_blend_equation *out,
- unsigned *constant_mask,
- unsigned colormask)
+ unsigned *constant_mask)
{
/* Gallium and Mali represent colour masks identically. XXX: Static
* assert for future proof */
- out->color_mask = colormask;
+ out->color_mask = blend.colormask;
/* If no blending is enabled, default back on `replace` mode */
- if (!blend->blend_enable) {
+ if (!blend.blend_enable) {
out->rgb_mode = 0x122;
out->alpha_mode = 0x122;
return true;
* fixed-function blending */
unsigned factors[] = {
- blend->rgb_src_factor, blend->rgb_dst_factor,
- blend->alpha_src_factor, blend->alpha_dst_factor,
+ blend.rgb_src_factor, blend.rgb_dst_factor,
+ blend.alpha_src_factor, blend.alpha_dst_factor,
};
*constant_mask = panfrost_constant_mask(factors, ARRAY_SIZE(factors));
unsigned alpha_mode = 0;
if (!panfrost_make_fixed_blend_part(
- blend->rgb_func, blend->rgb_src_factor, blend->rgb_dst_factor,
+ blend.rgb_func, blend.rgb_src_factor, blend.rgb_dst_factor,
&rgb_mode))
return false;
if (!panfrost_make_fixed_blend_part(
- blend->alpha_func, blend->alpha_src_factor, blend->alpha_dst_factor,
+ blend.alpha_func, blend.alpha_src_factor, blend.alpha_dst_factor,
&alpha_mode))
return false;