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