mirror of https://gitlab.freedesktop.org/mesa/mesa
101 lines
2.5 KiB
C
101 lines
2.5 KiB
C
/*
|
|
* Copyright 2023 Valve Corporation
|
|
* Copyright 2007 VMware, Inc.
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
#ifndef UTIL_BLEND_H
|
|
#define UTIL_BLEND_H
|
|
|
|
#include <stdbool.h>
|
|
|
|
#define PIPE_BLENDFACTOR_INVERT_BIT (0x10)
|
|
|
|
enum pipe_blendfactor {
|
|
PIPE_BLENDFACTOR_ONE = 1,
|
|
PIPE_BLENDFACTOR_SRC_COLOR,
|
|
PIPE_BLENDFACTOR_SRC_ALPHA,
|
|
PIPE_BLENDFACTOR_DST_ALPHA,
|
|
PIPE_BLENDFACTOR_DST_COLOR,
|
|
PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE,
|
|
PIPE_BLENDFACTOR_CONST_COLOR,
|
|
PIPE_BLENDFACTOR_CONST_ALPHA,
|
|
PIPE_BLENDFACTOR_SRC1_COLOR,
|
|
PIPE_BLENDFACTOR_SRC1_ALPHA,
|
|
|
|
PIPE_BLENDFACTOR_ZERO = PIPE_BLENDFACTOR_INVERT_BIT | PIPE_BLENDFACTOR_ONE,
|
|
PIPE_BLENDFACTOR_INV_SRC_COLOR,
|
|
PIPE_BLENDFACTOR_INV_SRC_ALPHA,
|
|
PIPE_BLENDFACTOR_INV_DST_ALPHA,
|
|
PIPE_BLENDFACTOR_INV_DST_COLOR,
|
|
|
|
/* Intentionally weird wrapping due to Gallium trace parsing this file */
|
|
PIPE_BLENDFACTOR_INV_CONST_COLOR = PIPE_BLENDFACTOR_INVERT_BIT
|
|
| PIPE_BLENDFACTOR_CONST_COLOR,
|
|
PIPE_BLENDFACTOR_INV_CONST_ALPHA,
|
|
PIPE_BLENDFACTOR_INV_SRC1_COLOR,
|
|
PIPE_BLENDFACTOR_INV_SRC1_ALPHA,
|
|
};
|
|
|
|
static inline bool
|
|
util_blendfactor_is_inverted(enum pipe_blendfactor factor)
|
|
{
|
|
/* By construction of the enum */
|
|
return (factor & PIPE_BLENDFACTOR_INVERT_BIT);
|
|
}
|
|
|
|
static inline enum pipe_blendfactor
|
|
util_blendfactor_without_invert(enum pipe_blendfactor factor)
|
|
{
|
|
/* By construction of the enum */
|
|
return (enum pipe_blendfactor)(factor & ~PIPE_BLENDFACTOR_INVERT_BIT);
|
|
}
|
|
|
|
enum pipe_blend_func {
|
|
PIPE_BLEND_ADD,
|
|
PIPE_BLEND_SUBTRACT,
|
|
PIPE_BLEND_REVERSE_SUBTRACT,
|
|
PIPE_BLEND_MIN,
|
|
PIPE_BLEND_MAX,
|
|
};
|
|
|
|
enum pipe_logicop {
|
|
PIPE_LOGICOP_CLEAR,
|
|
PIPE_LOGICOP_NOR,
|
|
PIPE_LOGICOP_AND_INVERTED,
|
|
PIPE_LOGICOP_COPY_INVERTED,
|
|
PIPE_LOGICOP_AND_REVERSE,
|
|
PIPE_LOGICOP_INVERT,
|
|
PIPE_LOGICOP_XOR,
|
|
PIPE_LOGICOP_NAND,
|
|
PIPE_LOGICOP_AND,
|
|
PIPE_LOGICOP_EQUIV,
|
|
PIPE_LOGICOP_NOOP,
|
|
PIPE_LOGICOP_OR_INVERTED,
|
|
PIPE_LOGICOP_COPY,
|
|
PIPE_LOGICOP_OR_REVERSE,
|
|
PIPE_LOGICOP_OR,
|
|
PIPE_LOGICOP_SET,
|
|
};
|
|
|
|
/**
|
|
* When faking RGBX render target formats with RGBA ones, the blender is still
|
|
* supposed to treat the destination's alpha channel as 1 instead of the
|
|
* garbage that's there. Return a blend factor that will take that into
|
|
* account.
|
|
*/
|
|
static inline enum pipe_blendfactor
|
|
util_blend_dst_alpha_to_one(enum pipe_blendfactor factor)
|
|
{
|
|
switch (factor) {
|
|
case PIPE_BLENDFACTOR_DST_ALPHA:
|
|
return PIPE_BLENDFACTOR_ONE;
|
|
case PIPE_BLENDFACTOR_INV_DST_ALPHA:
|
|
return PIPE_BLENDFACTOR_ZERO;
|
|
default:
|
|
return factor;
|
|
}
|
|
}
|
|
|
|
#endif
|