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
anyHsl() const45 bool AdvancedBlendEquations::anyHsl() const
46 {
47 ASSERT(IsValidAdvancedBlendBitSet(mEnabledBlendEquations));
48 return (gl::BlendEquationBitSet(mEnabledBlendEquations) & kAdvancedBlendHslBits).any();
49 }
50
setAll()51 void AdvancedBlendEquations::setAll()
52 {
53 ASSERT(IsValidAdvancedBlendBitSet(mEnabledBlendEquations));
54 mEnabledBlendEquations = kAdvancedBlendBits.bits();
55 }
56
set(uint32_t blendEquation)57 void AdvancedBlendEquations::set(uint32_t blendEquation)
58 {
59 gl::BlendEquationType eq = static_cast<gl::BlendEquationType>(blendEquation);
60 mEnabledBlendEquations = gl::BlendEquationBitSet(mEnabledBlendEquations).set(eq).bits();
61 ASSERT(IsValidAdvancedBlendBitSet(mEnabledBlendEquations));
62 }
63
64 } // namespace sh
65