• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2020 Google LLC
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef SKSL_DSL_MODIFIERS
9 #define SKSL_DSL_MODIFIERS
10 
11 #include "include/core/SkSpan.h"
12 #include "include/private/SkSLModifiers.h"
13 #include "include/sksl/DSLLayout.h"
14 
15 namespace SkSL {
16 
17 namespace dsl {
18 
19 class DSLField;
20 class DSLType;
21 
22 enum Modifier {
23     kNo_Modifier            = SkSL::Modifiers::kNo_Flag,
24     kConst_Modifier         = SkSL::Modifiers::kConst_Flag,
25     kIn_Modifier            = SkSL::Modifiers::kIn_Flag,
26     kOut_Modifier           = SkSL::Modifiers::kOut_Flag,
27     kInOut_Modifier         = SkSL::Modifiers::kIn_Flag | SkSL::Modifiers::kOut_Flag,
28     kUniform_Modifier       = SkSL::Modifiers::kUniform_Flag,
29     kFlat_Modifier          = SkSL::Modifiers::kFlat_Flag,
30     kNoPerspective_Modifier = SkSL::Modifiers::kNoPerspective_Flag,
31 #ifdef SKSL_EXT
32     kReadOnly_Modifier      = SkSL::Modifiers::kReadOnly_Flag,
33     kWriteOnly_Modifier     = SkSL::Modifiers::kWriteOnly_Flag,
34     kBuffer_Modifier        = SkSL::Modifiers::kBuffer_Flag,
35 #endif
36 };
37 
38 class DSLModifiers {
39 public:
40     DSLModifiers(int flags = 0)
DSLModifiers(DSLLayout (),flags)41         : DSLModifiers(DSLLayout(), flags) {}
42 
43     DSLModifiers(DSLLayout layout, int flags = 0)
44         : fModifiers(layout.fSkSLLayout, flags) {}
45 
flags()46     int flags() const {
47         return fModifiers.fFlags;
48     }
49 
layout()50     DSLLayout layout() const {
51         return DSLLayout(fModifiers.fLayout);
52     }
53 
54 private:
55     SkSL::Modifiers fModifiers;
56 
57     friend DSLType Struct(skstd::string_view name, SkSpan<DSLField> fields, PositionInfo pos);
58     friend class DSLCore;
59     friend class DSLFunction;
60     friend class DSLType;
61     friend class DSLVarBase;
62     friend class DSLWriter;
63 };
64 
65 } // namespace dsl
66 
67 } // namespace SkSL
68 
69 #endif
70