@@ -17,6 +17,26 @@ void main() {
17
17
logger = BufferLogger .test ();
18
18
});
19
19
20
+ Future <void > testCompileShader (String source) async {
21
+ final Directory tmpDir = globals.fs.systemTempDirectory.createTempSync (
22
+ 'shader_compiler_test.' ,
23
+ );
24
+ final File file = tmpDir.childFile ('test_shader.frag' )
25
+ ..writeAsStringSync (source);
26
+ final ShaderCompiler shaderCompiler = ShaderCompiler (
27
+ processManager: globals.processManager,
28
+ logger: logger,
29
+ fileSystem: globals.fs,
30
+ artifacts: globals.artifacts! ,
31
+ );
32
+ await shaderCompiler.compileShader (
33
+ input: file,
34
+ outputPath: tmpDir.childFile ('test_shader.frag.out' ).path,
35
+ target: ShaderTarget .sksl,
36
+ json: false ,
37
+ );
38
+ }
39
+
20
40
testUsingContext ('impellerc .iplr output has correct permissions' , () async {
21
41
if (globals.platform.isWindows) {
22
42
return ;
@@ -54,4 +74,66 @@ void main() {
54
74
final int expectedMode = int .parse ('644' , radix: 8 );
55
75
expect (resultFile.statSync ().mode & expectedMode, equals (expectedMode));
56
76
});
77
+
78
+ testUsingContext ('Compilation error with in storage' , () async {
79
+ const String kShaderWithInput = '''
80
+ in float foo;
81
+
82
+ out vec4 fragColor;
83
+
84
+ void main() {
85
+ fragColor = vec4(1.0, 0.0, 0.0, 1.0);
86
+ }
87
+ ''' ;
88
+
89
+ expect (() => testCompileShader (kShaderWithInput), throwsA (isA <ShaderCompilerException >()
90
+ .having (
91
+ (ShaderCompilerException exception) => exception.message,
92
+ 'message' ,
93
+ contains ('SkSL does not support inputs' ),
94
+ ),
95
+ ));
96
+ });
97
+
98
+ testUsingContext ('Compilation error with UBO' , () async {
99
+ const String kShaderWithInput = '''
100
+ uniform Data {
101
+ vec4 foo;
102
+ } data;
103
+
104
+ out vec4 fragColor;
105
+
106
+ void main() {
107
+ fragColor = data.foo;
108
+ }
109
+ ''' ;
110
+
111
+ expect (() => testCompileShader (kShaderWithInput), throwsA (isA <ShaderCompilerException >()
112
+ .having (
113
+ (ShaderCompilerException exception) => exception.message,
114
+ 'message' ,
115
+ contains ('SkSL does not support UBOs or SSBOs' ),
116
+ ),
117
+ ));
118
+ });
119
+
120
+ testUsingContext ('Compilation error with texture arguments besides position or sampler' , () async {
121
+ const String kShaderWithInput = '''
122
+ uniform sampler2D tex;
123
+
124
+ out vec4 fragColor;
125
+
126
+ void main() {
127
+ fragColor = texture(tex, vec2(0.5, 0.3), 0.5);
128
+ }
129
+ ''' ;
130
+
131
+ expect (() => testCompileShader (kShaderWithInput), throwsA (isA <ShaderCompilerException >()
132
+ .having (
133
+ (ShaderCompilerException exception) => exception.message,
134
+ 'message' ,
135
+ contains ('Only sampler and position arguments are supported in texture() calls' ),
136
+ ),
137
+ ));
138
+ });
57
139
}
0 commit comments