Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
third_party
skia
src
sksl
ir
SkSLModifierFlags.cpp
Go to the documentation of this file.
1
/*
2
* Copyright 2021 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
#include "
src/sksl/ir/SkSLModifierFlags.h
"
9
10
#include "
include/core/SkTypes.h
"
11
#include "
src/sksl/SkSLContext.h
"
12
#include "
src/sksl/SkSLErrorReporter.h
"
13
#include "
src/sksl/SkSLPosition.h
"
14
15
namespace
SkSL
{
16
17
std::string
ModifierFlags::paddedDescription
()
const
{
18
// SkSL extensions
19
std::string
result
;
20
if
(*
this
&
ModifierFlag::kExport
) {
21
result
+=
"$export "
;
22
}
23
if
(*
this
&
ModifierFlag::kES3
) {
24
result
+=
"$es3 "
;
25
}
26
if
(*
this
&
ModifierFlag::kPure
) {
27
result
+=
"$pure "
;
28
}
29
if
(*
this
&
ModifierFlag::kInline
) {
30
result
+=
"inline "
;
31
}
32
if
(*
this
&
ModifierFlag::kNoInline
) {
33
result
+=
"noinline "
;
34
}
35
36
// Real GLSL qualifiers (must be specified in order in GLSL 4.1 and below)
37
if
(*
this
&
ModifierFlag::kFlat
) {
38
result
+=
"flat "
;
39
}
40
if
(*
this
&
ModifierFlag::kNoPerspective
) {
41
result
+=
"noperspective "
;
42
}
43
if
(*
this
&
ModifierFlag::kConst
) {
44
result
+=
"const "
;
45
}
46
if
(*
this
&
ModifierFlag::kUniform
) {
47
result
+=
"uniform "
;
48
}
49
if
((*
this
&
ModifierFlag::kIn
) && (*
this
&
ModifierFlag::kOut
)) {
50
result
+=
"inout "
;
51
}
else
if
(*
this
&
ModifierFlag::kIn
) {
52
result
+=
"in "
;
53
}
else
if
(*
this
&
ModifierFlag::kOut
) {
54
result
+=
"out "
;
55
}
56
if
(*
this
&
ModifierFlag::kHighp
) {
57
result
+=
"highp "
;
58
}
59
if
(*
this
&
ModifierFlag::kMediump
) {
60
result
+=
"mediump "
;
61
}
62
if
(*
this
&
ModifierFlag::kLowp
) {
63
result
+=
"lowp "
;
64
}
65
if
(*
this
&
ModifierFlag::kReadOnly
) {
66
result
+=
"readonly "
;
67
}
68
if
(*
this
&
ModifierFlag::kWriteOnly
) {
69
result
+=
"writeonly "
;
70
}
71
if
(*
this
&
ModifierFlag::kBuffer
) {
72
result
+=
"buffer "
;
73
}
74
75
// We're using non-GLSL names for these.
76
if
(*
this
&
ModifierFlag::kPixelLocal
) {
77
// Roughly equivalent to `__pixel_localEXT`.
78
result
+=
"pixel_local "
;
79
}
80
if
(*
this
&
ModifierFlag::kWorkgroup
) {
81
// Equivalent to `shared`.
82
result
+=
"workgroup "
;
83
}
84
85
return
result
;
86
}
87
88
std::string
ModifierFlags::description
()
const
{
89
std::string
s
= this->
paddedDescription
();
90
if
(!s.empty()) {
91
s
.pop_back();
92
}
93
return
s
;
94
}
95
96
bool
ModifierFlags::checkPermittedFlags
(
const
Context
& context,
97
Position
pos
,
98
ModifierFlags
permittedModifierFlags)
const
{
99
static
constexpr
struct
{
ModifierFlag
flag
;
const
char
*
name
; } kModifierFlags[] = {
100
{
ModifierFlag::kConst
,
"const"
},
101
{
ModifierFlag::kIn
,
"in"
},
102
{
ModifierFlag::kOut
,
"out"
},
103
{
ModifierFlag::kUniform
,
"uniform"
},
104
{
ModifierFlag::kFlat
,
"flat"
},
105
{
ModifierFlag::kNoPerspective
,
"noperspective"
},
106
{
ModifierFlag::kPure
,
"$pure"
},
107
{
ModifierFlag::kInline
,
"inline"
},
108
{
ModifierFlag::kNoInline
,
"noinline"
},
109
{
ModifierFlag::kHighp
,
"highp"
},
110
{
ModifierFlag::kMediump
,
"mediump"
},
111
{
ModifierFlag::kLowp
,
"lowp"
},
112
{
ModifierFlag::kExport
,
"$export"
},
113
{
ModifierFlag::kES3
,
"$es3"
},
114
{
ModifierFlag::kWorkgroup
,
"workgroup"
},
115
{
ModifierFlag::kReadOnly
,
"readonly"
},
116
{
ModifierFlag::kWriteOnly
,
"writeonly"
},
117
{
ModifierFlag::kBuffer
,
"buffer"
},
118
{
ModifierFlag::kPixelLocal
,
"pixel_local"
},
119
};
120
121
bool
success =
true
;
122
ModifierFlags
modifierFlags = *
this
;
123
for
(
const
auto
& f : kModifierFlags) {
124
if
(modifierFlags & f.flag) {
125
if
(!(permittedModifierFlags & f.flag)) {
126
context.
fErrors
->
error
(
pos
,
"'"
+ std::string(f.name) +
"' is not permitted here"
);
127
success =
false
;
128
}
129
modifierFlags &= ~f.flag;
130
}
131
}
132
SkASSERT
(modifierFlags ==
ModifierFlag::kNone
);
133
134
return
success;
135
}
136
137
}
// namespace SkSL
pos
SkPoint pos
Definition
ImageShaderTest.cpp:27
SkASSERT
#define SkASSERT(cond)
Definition
SkAssert.h:116
SkSLContext.h
SkSLErrorReporter.h
SkSLModifierFlags.h
SkSLPosition.h
SkTypes.h
SkSL::Context
Definition
SkSLContext.h:24
SkSL::Context::fErrors
ErrorReporter * fErrors
Definition
SkSLContext.h:36
SkSL::ErrorReporter::error
void error(Position position, std::string_view msg)
Definition
SkSLErrorReporter.cpp:16
SkSL::ModifierFlags
Definition
SkSLModifierFlags.h:53
SkSL::ModifierFlags::paddedDescription
std::string paddedDescription() const
Definition
SkSLModifierFlags.cpp:17
SkSL::ModifierFlags::description
std::string description() const
Definition
SkSLModifierFlags.cpp:88
SkSL::ModifierFlags::checkPermittedFlags
bool checkPermittedFlags(const Context &context, Position pos, ModifierFlags permittedModifierFlags) const
Definition
SkSLModifierFlags.cpp:96
SkSL::Position
Definition
SkSLPosition.h:18
s
struct MyStruct s
flag
FlutterSemanticsFlag flag
Definition
fl_accessible_node.cc:11
result
GAsyncResult * result
Definition
fl_text_input_plugin.cc:106
name
const char * name
Definition
fuchsia.cc:50
SkSL
Definition
SkCapabilities.h:15
SkSL::ModifierFlag
ModifierFlag
Definition
SkSLModifierFlags.h:21
SkSL::ModifierFlag::kMediump
@ kMediump
SkSL::ModifierFlag::kBuffer
@ kBuffer
SkSL::ModifierFlag::kLowp
@ kLowp
SkSL::ModifierFlag::kWriteOnly
@ kWriteOnly
SkSL::ModifierFlag::kNone
@ kNone
SkSL::ModifierFlag::kUniform
@ kUniform
SkSL::ModifierFlag::kOut
@ kOut
SkSL::ModifierFlag::kNoInline
@ kNoInline
SkSL::ModifierFlag::kWorkgroup
@ kWorkgroup
SkSL::ModifierFlag::kPure
@ kPure
SkSL::ModifierFlag::kFlat
@ kFlat
SkSL::ModifierFlag::kReadOnly
@ kReadOnly
SkSL::ModifierFlag::kHighp
@ kHighp
SkSL::ModifierFlag::kES3
@ kES3
SkSL::ModifierFlag::kInline
@ kInline
SkSL::ModifierFlag::kConst
@ kConst
SkSL::ModifierFlag::kIn
@ kIn
SkSL::ModifierFlag::kNoPerspective
@ kNoPerspective
SkSL::ModifierFlag::kExport
@ kExport
SkSL::ModifierFlag::kPixelLocal
@ kPixelLocal
Generated on Fri Apr 26 2024 06:17:31 for Flutter Engine by
1.9.8