xref: /aosp_15_r20/external/mesa3d/src/vulkan/runtime/vk_blend.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2023 Valve Corporation
3*61046927SAndroid Build Coastguard Worker  * Copyright 2021 Collabora Ltd.
4*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
5*61046927SAndroid Build Coastguard Worker  */
6*61046927SAndroid Build Coastguard Worker 
7*61046927SAndroid Build Coastguard Worker #include "vk_blend.h"
8*61046927SAndroid Build Coastguard Worker #include "util/macros.h"
9*61046927SAndroid Build Coastguard Worker 
10*61046927SAndroid Build Coastguard Worker enum pipe_logicop
vk_logic_op_to_pipe(VkLogicOp in)11*61046927SAndroid Build Coastguard Worker vk_logic_op_to_pipe(VkLogicOp in)
12*61046927SAndroid Build Coastguard Worker {
13*61046927SAndroid Build Coastguard Worker    switch (in) {
14*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_CLEAR:
15*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_CLEAR;
16*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_AND:
17*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_AND;
18*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_AND_REVERSE:
19*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_AND_REVERSE;
20*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_COPY:
21*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_COPY;
22*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_AND_INVERTED:
23*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_AND_INVERTED;
24*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_NO_OP:
25*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_NOOP;
26*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_XOR:
27*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_XOR;
28*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_OR:
29*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_OR;
30*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_NOR:
31*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_NOR;
32*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_EQUIVALENT:
33*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_EQUIV;
34*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_INVERT:
35*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_INVERT;
36*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_OR_REVERSE:
37*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_OR_REVERSE;
38*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_COPY_INVERTED:
39*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_COPY_INVERTED;
40*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_OR_INVERTED:
41*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_OR_INVERTED;
42*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_NAND:
43*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_NAND;
44*61046927SAndroid Build Coastguard Worker    case VK_LOGIC_OP_SET:
45*61046927SAndroid Build Coastguard Worker       return PIPE_LOGICOP_SET;
46*61046927SAndroid Build Coastguard Worker    default:
47*61046927SAndroid Build Coastguard Worker       unreachable("Invalid logicop");
48*61046927SAndroid Build Coastguard Worker    }
49*61046927SAndroid Build Coastguard Worker }
50*61046927SAndroid Build Coastguard Worker 
51*61046927SAndroid Build Coastguard Worker enum pipe_blend_func
vk_blend_op_to_pipe(VkBlendOp in)52*61046927SAndroid Build Coastguard Worker vk_blend_op_to_pipe(VkBlendOp in)
53*61046927SAndroid Build Coastguard Worker {
54*61046927SAndroid Build Coastguard Worker    switch (in) {
55*61046927SAndroid Build Coastguard Worker    case VK_BLEND_OP_ADD:
56*61046927SAndroid Build Coastguard Worker       return PIPE_BLEND_ADD;
57*61046927SAndroid Build Coastguard Worker    case VK_BLEND_OP_SUBTRACT:
58*61046927SAndroid Build Coastguard Worker       return PIPE_BLEND_SUBTRACT;
59*61046927SAndroid Build Coastguard Worker    case VK_BLEND_OP_REVERSE_SUBTRACT:
60*61046927SAndroid Build Coastguard Worker       return PIPE_BLEND_REVERSE_SUBTRACT;
61*61046927SAndroid Build Coastguard Worker    case VK_BLEND_OP_MIN:
62*61046927SAndroid Build Coastguard Worker       return PIPE_BLEND_MIN;
63*61046927SAndroid Build Coastguard Worker    case VK_BLEND_OP_MAX:
64*61046927SAndroid Build Coastguard Worker       return PIPE_BLEND_MAX;
65*61046927SAndroid Build Coastguard Worker    default:
66*61046927SAndroid Build Coastguard Worker       unreachable("Invalid blend op");
67*61046927SAndroid Build Coastguard Worker    }
68*61046927SAndroid Build Coastguard Worker }
69*61046927SAndroid Build Coastguard Worker 
70*61046927SAndroid Build Coastguard Worker enum pipe_blendfactor
vk_blend_factor_to_pipe(enum VkBlendFactor vk_factor)71*61046927SAndroid Build Coastguard Worker vk_blend_factor_to_pipe(enum VkBlendFactor vk_factor)
72*61046927SAndroid Build Coastguard Worker {
73*61046927SAndroid Build Coastguard Worker    switch (vk_factor) {
74*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_ZERO:
75*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_ZERO;
76*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_ONE:
77*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_ONE;
78*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_SRC_COLOR:
79*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_SRC_COLOR;
80*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR:
81*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_INV_SRC_COLOR;
82*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_DST_COLOR:
83*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_DST_COLOR;
84*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR:
85*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_INV_DST_COLOR;
86*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_SRC_ALPHA:
87*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_SRC_ALPHA;
88*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA:
89*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_INV_SRC_ALPHA;
90*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_DST_ALPHA:
91*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_DST_ALPHA;
92*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA:
93*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_INV_DST_ALPHA;
94*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_CONSTANT_COLOR:
95*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_CONST_COLOR;
96*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR:
97*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_INV_CONST_COLOR;
98*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_CONSTANT_ALPHA:
99*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_CONST_ALPHA;
100*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA:
101*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_INV_CONST_ALPHA;
102*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_SRC1_COLOR:
103*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_SRC1_COLOR;
104*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR:
105*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_INV_SRC1_COLOR;
106*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_SRC1_ALPHA:
107*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_SRC1_ALPHA;
108*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA:
109*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_INV_SRC1_ALPHA;
110*61046927SAndroid Build Coastguard Worker    case VK_BLEND_FACTOR_SRC_ALPHA_SATURATE:
111*61046927SAndroid Build Coastguard Worker       return PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE;
112*61046927SAndroid Build Coastguard Worker    default:
113*61046927SAndroid Build Coastguard Worker       unreachable("Invalid blend factor");
114*61046927SAndroid Build Coastguard Worker    }
115*61046927SAndroid Build Coastguard Worker }
116