blob: 262ef2034da861bf182f2c0be83e5018db205de3 [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
Ethan Nicholasdaed2592021-03-04 14:30:25 -050011#include "include/private/SkSLModifiers.h"
Ethan Nicholasbf79dff2021-02-11 15:18:31 -050012#include "include/private/SkTArray.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 {
23 kNo_Modifier = 0,
24 kConst_Modifier = 1 << 0,
25 kIn_Modifier = 1 << 1,
26 kOut_Modifier = 1 << 2,
27 kInOut_Modifier = kIn_Modifier | kOut_Modifier,
28 kUniform_Modifier = 1 << 3,
29 kFlat_Modifier = 1 << 4,
30 kNoPerspective_Modifier = 1 << 5,
31};
32
33class DSLModifiers {
34public:
35
Ethan Nicholasb22fcaf2021-05-10 16:17:22 -040036 DSLModifiers(int flags = 0)
37 : DSLModifiers(DSLLayout(), flags) {}
Ethan Nicholasd6b26e52021-01-27 07:53:46 -050038
Ethan Nicholasb22fcaf2021-05-10 16:17:22 -040039 DSLModifiers(DSLLayout layout, int flags = 0)
40 : fModifiers(layout.fSkSLLayout, flags) {}
Ethan Nicholasd6b26e52021-01-27 07:53:46 -050041
Ethan Nicholas722cb672021-05-06 10:47:06 -040042 int flags() const {
43 return fModifiers.fFlags;
44 }
45
Ethan Nicholasd6b26e52021-01-27 07:53:46 -050046private:
47 SkSL::Modifiers fModifiers;
48
Ethan Nicholasbf79dff2021-02-11 15:18:31 -050049 friend DSLType Struct(const char* name, SkTArray<DSLField> fields);
Ethan Nicholas624a5292021-04-16 14:54:43 -040050 friend class DSLFunction;
Ethan Nicholasd6b26e52021-01-27 07:53:46 -050051 friend class DSLVar;
Ethan Nicholas707d3152021-03-25 17:49:08 -040052 friend class DSLWriter;
Ethan Nicholasd6b26e52021-01-27 07:53:46 -050053};
54
55} // namespace dsl
56
57} // namespace SkSL
58
59#endif