blob: 10c6aaafacad85247922893f8b344ac33431748f [file] [log] [blame]
Ethan Nicholasd6b26e52021-01-27 07:53:46 -05001/*
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
John Stilesed7b4f62021-08-11 11:42:57 -040011#include "include/core/SkSpan.h"
Ethan Nicholasdaed2592021-03-04 14:30:25 -050012#include "include/private/SkSLModifiers.h"
Ethan Nicholasb22fcaf2021-05-10 16:17:22 -040013#include "include/sksl/DSLLayout.h"
Ethan Nicholasbf79dff2021-02-11 15:18:31 -050014
Ethan Nicholasd6b26e52021-01-27 07:53:46 -050015namespace SkSL {
16
17namespace dsl {
18
Ethan Nicholasbf79dff2021-02-11 15:18:31 -050019class DSLField;
20class DSLType;
21
Ethan Nicholasd6b26e52021-01-27 07:53:46 -050022enum Modifier {
John Stiles906e9eb2021-10-01 14:21:09 -040023 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,
Ethan Nicholasd6b26e52021-01-27 07:53:46 -050031};
32
33class DSLModifiers {
34public:
Ethan Nicholasb22fcaf2021-05-10 16:17:22 -040035 DSLModifiers(int flags = 0)
36 : DSLModifiers(DSLLayout(), flags) {}
Ethan Nicholasd6b26e52021-01-27 07:53:46 -050037
Ethan Nicholasb22fcaf2021-05-10 16:17:22 -040038 DSLModifiers(DSLLayout layout, int flags = 0)
39 : fModifiers(layout.fSkSLLayout, flags) {}
Ethan Nicholasd6b26e52021-01-27 07:53:46 -050040
Ethan Nicholas722cb672021-05-06 10:47:06 -040041 int flags() const {
42 return fModifiers.fFlags;
43 }
44
Ethan Nicholasdd2fdea2021-07-20 15:23:04 -040045 DSLLayout layout() const {
46 return DSLLayout(fModifiers.fLayout);
47 }
48
Ethan Nicholasd6b26e52021-01-27 07:53:46 -050049private:
50 SkSL::Modifiers fModifiers;
51
Ethan Nicholas6f20b8d2021-08-31 07:40:24 -040052 friend DSLType Struct(skstd::string_view name, SkSpan<DSLField> fields, PositionInfo pos);
Ethan Nicholasdd2fdea2021-07-20 15:23:04 -040053 friend class DSLCore;
Ethan Nicholas624a5292021-04-16 14:54:43 -040054 friend class DSLFunction;
John Stiles4adb66f2021-08-05 10:15:16 -040055 friend class DSLType;
Ethan Nicholasa2d22b22021-07-15 10:35:54 -040056 friend class DSLVarBase;
Ethan Nicholas707d3152021-03-25 17:49:08 -040057 friend class DSLWriter;
Ethan Nicholasd6b26e52021-01-27 07:53:46 -050058};
59
60} // namespace dsl
61
62} // namespace SkSL
63
64#endif