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
15namespace SkSL {
16
17namespace dsl {
18
19class DSLField;
20class DSLType;
21
22enum 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};
32
33class DSLModifiers {
34public:
35    DSLModifiers(int flags = 0)
36        : DSLModifiers(DSLLayout(), flags) {}
37
38    DSLModifiers(DSLLayout layout, int flags = 0)
39        : fModifiers(layout.fSkSLLayout, flags) {}
40
41    int flags() const {
42        return fModifiers.fFlags;
43    }
44
45    DSLLayout layout() const {
46        return DSLLayout(fModifiers.fLayout);
47    }
48
49private:
50    SkSL::Modifiers fModifiers;
51
52    friend DSLType Struct(skstd::string_view name, SkSpan<DSLField> fields, PositionInfo pos);
53    friend class DSLCore;
54    friend class DSLFunction;
55    friend class DSLType;
56    friend class DSLVarBase;
57    friend class DSLWriter;
58};
59
60} // namespace dsl
61
62} // namespace SkSL
63
64#endif
65