xref: /aosp_15_r20/external/angle/src/compiler/translator/BaseTypes.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 2022 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 #include "BaseTypes.h"
8 
9 #include "common/PackedEnums.h"
10 
11 namespace sh
12 {
13 namespace
14 {
15 constexpr gl::BlendEquationBitSet kAdvancedBlendBits{
16     gl::BlendEquationType::Multiply,      gl::BlendEquationType::Screen,
17     gl::BlendEquationType::Overlay,       gl::BlendEquationType::Darken,
18     gl::BlendEquationType::Lighten,       gl::BlendEquationType::Colordodge,
19     gl::BlendEquationType::Colorburn,     gl::BlendEquationType::Hardlight,
20     gl::BlendEquationType::Softlight,     gl::BlendEquationType::Difference,
21     gl::BlendEquationType::Exclusion,     gl::BlendEquationType::HslHue,
22     gl::BlendEquationType::HslSaturation, gl::BlendEquationType::HslColor,
23     gl::BlendEquationType::HslLuminosity,
24 };
25 
26 constexpr gl::BlendEquationBitSet kAdvancedBlendHslBits{
27     gl::BlendEquationType::HslHue,
28     gl::BlendEquationType::HslSaturation,
29     gl::BlendEquationType::HslColor,
30     gl::BlendEquationType::HslLuminosity,
31 };
32 
IsValidAdvancedBlendBitSet(uint32_t enabledEquations)33 bool IsValidAdvancedBlendBitSet(uint32_t enabledEquations)
34 {
35     return (gl::BlendEquationBitSet(enabledEquations) & ~kAdvancedBlendBits).none();
36 }
37 }  // anonymous namespace
38 
any() const39 bool AdvancedBlendEquations::any() const
40 {
41     ASSERT(IsValidAdvancedBlendBitSet(mEnabledBlendEquations));
42     return mEnabledBlendEquations != 0;
43 }
44 
all() const45 bool AdvancedBlendEquations::all() const
46 {
47     ASSERT(IsValidAdvancedBlendBitSet(mEnabledBlendEquations));
48     return gl::BlendEquationBitSet(mEnabledBlendEquations) == kAdvancedBlendBits;
49 }
50 
anyHsl() const51 bool AdvancedBlendEquations::anyHsl() const
52 {
53     ASSERT(IsValidAdvancedBlendBitSet(mEnabledBlendEquations));
54     return (gl::BlendEquationBitSet(mEnabledBlendEquations) & kAdvancedBlendHslBits).any();
55 }
56 
setAll()57 void AdvancedBlendEquations::setAll()
58 {
59     ASSERT(IsValidAdvancedBlendBitSet(mEnabledBlendEquations));
60     mEnabledBlendEquations = kAdvancedBlendBits.bits();
61 }
62 
set(uint32_t blendEquation)63 void AdvancedBlendEquations::set(uint32_t blendEquation)
64 {
65     gl::BlendEquationType eq = static_cast<gl::BlendEquationType>(blendEquation);
66     mEnabledBlendEquations   = gl::BlendEquationBitSet(mEnabledBlendEquations).set(eq).bits();
67     ASSERT(IsValidAdvancedBlendBitSet(mEnabledBlendEquations));
68 }
69 
GetLayoutString(uint32_t blendEquation)70 const char *AdvancedBlendEquations::GetLayoutString(uint32_t blendEquation)
71 {
72     switch (static_cast<gl::BlendEquationType>(blendEquation))
73     {
74         case gl::BlendEquationType::Multiply:
75             return "blend_support_multiply";
76         case gl::BlendEquationType::Screen:
77             return "blend_support_screen";
78         case gl::BlendEquationType::Overlay:
79             return "blend_support_overlay";
80         case gl::BlendEquationType::Darken:
81             return "blend_support_darken";
82         case gl::BlendEquationType::Lighten:
83             return "blend_support_lighten";
84         case gl::BlendEquationType::Colordodge:
85             return "blend_support_colordodge";
86         case gl::BlendEquationType::Colorburn:
87             return "blend_support_colorburn";
88         case gl::BlendEquationType::Hardlight:
89             return "blend_support_hardlight";
90         case gl::BlendEquationType::Softlight:
91             return "blend_support_softlight";
92         case gl::BlendEquationType::Difference:
93             return "blend_support_difference";
94         case gl::BlendEquationType::Exclusion:
95             return "blend_support_exclusion";
96         case gl::BlendEquationType::HslHue:
97             return "blend_support_hsl_hue";
98         case gl::BlendEquationType::HslSaturation:
99             return "blend_support_hsl_saturation";
100         case gl::BlendEquationType::HslColor:
101             return "blend_support_hsl_color";
102         case gl::BlendEquationType::HslLuminosity:
103             return "blend_support_hsl_luminosity";
104         default:
105             UNREACHABLE();
106             return nullptr;
107     }
108 }
109 
GetAllEquationsLayoutString()110 const char *AdvancedBlendEquations::GetAllEquationsLayoutString()
111 {
112     return "blend_support_all_equations";
113 }
114 
115 }  // namespace sh
116