• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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