Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/shaderc
Path: blob/main/glslc/test/include.py
1560 views
1
# Copyright 2015 The Shaderc Authors. All rights reserved.
2
#
3
# Licensed under the Apache License, Version 2.0 (the "License");
4
# you may not use this file except in compliance with the License.
5
# You may obtain a copy of the License at
6
#
7
# http://www.apache.org/licenses/LICENSE-2.0
8
#
9
# Unless required by applicable law or agreed to in writing, software
10
# distributed under the License is distributed on an "AS IS" BASIS,
11
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
# See the License for the specific language governing permissions and
13
# limitations under the License.
14
15
import expect
16
from glslc_test_framework import inside_glslc_testsuite
17
from placeholder import SpecializedString
18
from environment import File, Directory
19
20
21
@inside_glslc_testsuite('Include')
22
class VerifyIncludeOneSibling(expect.StdoutMatch):
23
"""Tests #including a sibling file."""
24
25
environment = Directory('.', [
26
File('a.vert', '#version 140\ncontent a\n#include "b"\n'),
27
File('b', 'content b\n')])
28
29
glslc_args = ['-E', 'a.vert']
30
31
expected_stdout = \
32
"""#version 140
33
#extension GL_GOOGLE_include_directive : enable
34
#line 0 "a.vert"
35
36
content a
37
#line 0 "b"
38
content b
39
#line 3 "a.vert"
40
41
"""
42
43
@inside_glslc_testsuite('Include')
44
class VerifyIncludeNotFound(expect.ErrorMessage):
45
"""Tests #including a not existing sibling file."""
46
47
environment = Directory('.', [
48
File('a.vert', '#version 140\ncontent a\n#include "b"\n')])
49
50
glslc_args = ['-E', 'a.vert']
51
expected_error = [
52
"a.vert:3: error: '#include' : Cannot find or open include file. for header name: b\n",
53
'1 error generated.\n'
54
]
55
56
@inside_glslc_testsuite('Include')
57
class VerifyCompileIncludeOneSibling(expect.ValidObjectFile):
58
"""Tests #including a sibling file via full compilation."""
59
60
environment = Directory('.', [
61
File('a.vert', '#version 140\nvoid foo(){}\n#include "b"\n'),
62
File('b', 'void main(){foo();}\n')])
63
64
glslc_args = ['a.vert']
65
66
@inside_glslc_testsuite('Include')
67
class VerifyIncludeWithoutNewline(expect.ErrorMessageSubstr):
68
"""Tests a #include without a newline."""
69
70
environment = Directory('.', [
71
File('a.vert', '#version 140\n#include "b"'),
72
File('b', 'content b\n')])
73
74
glslc_args = ['-E', 'a.vert']
75
76
expected_error_substr = 'expected newline after header name: b'
77
78
79
@inside_glslc_testsuite('Include')
80
class VerifyCompileIncludeWithoutNewline(expect.ValidObjectFile):
81
"""Tests a #include without a newline via full compilation."""
82
83
environment = Directory('.', [
84
File('a.vert',
85
"""#version 140
86
void main
87
#include "b"
88
"""),
89
File('b',
90
"""#define PAR ()
91
PAR{}
92
""")])
93
94
glslc_args = ['a.vert']
95
96
@inside_glslc_testsuite('Include')
97
class VerifyIncludeTwoSiblings(expect.StdoutMatch):
98
"""Tests #including two sibling files."""
99
100
environment = Directory('.', [
101
File('b.vert', '#version 140\n#include "a"\ncontent b\n#include "c"\n'),
102
File('a', 'content a\n'),
103
File('c', 'content c\n')])
104
105
glslc_args = ['-E', 'b.vert']
106
107
expected_stdout = \
108
"""#version 140
109
#extension GL_GOOGLE_include_directive : enable
110
#line 0 "b.vert"
111
112
#line 0 "a"
113
content a
114
#line 2 "b.vert"
115
content b
116
#line 0 "c"
117
content c
118
#line 4 "b.vert"
119
120
"""
121
122
@inside_glslc_testsuite('Include')
123
class VerifyCompileIncludeTwoSiblings(expect.ValidObjectFile):
124
"""Tests #including two sibling files via full compilation."""
125
126
environment = Directory('.', [
127
File('b.vert',
128
"""#version 140
129
#include "a"
130
void bfun(){afun();}
131
#include "c"
132
"""),
133
File('a',
134
"""void afun(){}
135
#define BODY {}
136
"""),
137
File('c', 'void main() BODY\n')])
138
139
glslc_args = ['b.vert']
140
141
@inside_glslc_testsuite('Include')
142
class VerifyNestedIncludeAmongSiblings(expect.StdoutMatch):
143
"""Tests #include inside #included sibling files."""
144
145
environment = Directory('.', [
146
File('a.vert', '#version 140\n#include "b"\ncontent a\n'),
147
File('b', 'content b\n#include "c"\n'),
148
File('c', 'content c\n')])
149
150
glslc_args = ['-E', 'a.vert']
151
152
expected_stdout = \
153
"""#version 140
154
#extension GL_GOOGLE_include_directive : enable
155
#line 0 "a.vert"
156
157
#line 0 "b"
158
content b
159
#line 0 "c"
160
content c
161
#line 2 "b"
162
#line 2 "a.vert"
163
content a
164
"""
165
166
@inside_glslc_testsuite('Include')
167
class VerifyCompileNestedIncludeAmongSiblings(expect.ValidObjectFile):
168
"""Tests #include inside #included sibling files via full compilation."""
169
170
environment = Directory('.', [
171
File('a.vert',
172
"""#version 140
173
#define BODY {}
174
#include "b"
175
void main(){cfun();}
176
"""),
177
File('b',
178
"""void bfun() BODY
179
#include "c"
180
"""),
181
File('c',
182
"""#define BF bfun()
183
void cfun(){BF;}
184
""")])
185
186
glslc_args = ['a.vert']
187
188
@inside_glslc_testsuite('Include')
189
class VerifyIncludeSubdir(expect.StdoutMatch):
190
"""Tests #including a file from a subdirectory."""
191
192
environment = Directory('.', [
193
File('a.vert', '#version 140\ncontent a1\n#include "subdir/a"\ncontent a2\n'),
194
Directory('subdir', [File('a', 'content suba\n')])])
195
196
glslc_args = ['-E', 'a.vert']
197
198
expected_stdout = \
199
"""#version 140
200
#extension GL_GOOGLE_include_directive : enable
201
#line 0 "a.vert"
202
203
content a1
204
#line 0 "subdir/a"
205
content suba
206
#line 3 "a.vert"
207
content a2
208
"""
209
210
@inside_glslc_testsuite('Include')
211
class VerifyCompileIncludeSubdir(expect.ValidObjectFile):
212
"""Tests #including a file from a subdirectory via full compilation."""
213
214
environment = Directory('.', [
215
File('a.vert',
216
"""#version 140
217
#define BODY {}
218
#include "subdir/a"
219
void afun()BODY
220
"""),
221
Directory('subdir', [File('a', 'void main() BODY\n')])])
222
223
glslc_args = ['a.vert']
224
225
@inside_glslc_testsuite('Include')
226
class VerifyIncludeDeepSubdir(expect.StdoutMatch):
227
"""Tests #including a file from a subdirectory nested a few levels down."""
228
229
environment = Directory('.', [
230
File('a.vert',
231
'#version 140\ncontent a1\n#include "dir/subdir/subsubdir/a"\ncontent a2\n'),
232
Directory('dir', [
233
Directory('subdir', [
234
Directory('subsubdir', [File('a', 'content incl\n')])])])])
235
236
glslc_args = ['-E', 'a.vert']
237
238
expected_stdout = \
239
"""#version 140
240
#extension GL_GOOGLE_include_directive : enable
241
#line 0 "a.vert"
242
243
content a1
244
#line 0 "dir/subdir/subsubdir/a"
245
content incl
246
#line 3 "a.vert"
247
content a2
248
"""
249
250
@inside_glslc_testsuite('Include')
251
class VerifyCompileIncludeDeepSubdir(expect.ValidObjectFile):
252
"""Tests #including a file from a subdirectory nested a few levels down
253
via full compilation."""
254
255
environment = Directory('.', [
256
File('a.vert',
257
"""#version 140
258
#define BODY {}
259
#include "dir/subdir/subsubdir/a"
260
void afun()BODY
261
"""),
262
Directory('dir', [
263
Directory('subdir', [
264
Directory('subsubdir', [File('a', 'void main() BODY\n')])])])])
265
266
glslc_args = ['a.vert']
267
268
269
@inside_glslc_testsuite('Include')
270
class TestWrongPoundVersionInIncludingFile(expect.ValidObjectFileWithWarning):
271
"""Tests that warning message for #version directive in the including file
272
has the correct filename."""
273
274
environment = Directory('.', [
275
File('a.vert', '#version 100000000\n#include "b.glsl"\n'),
276
File('b.glsl', 'void main() {}\n')])
277
glslc_args = ['-c', '-std=400', 'a.vert']
278
279
expected_warning = [
280
'a.vert: warning: (version, profile) forced to be (400, none),'
281
' while in source code it is (100000000, none)\n'
282
'1 warning generated.\n'
283
]
284
285
286
# TODO(antiagainst): now #version in included files results in an error.
287
# Fix this after #version in included files are supported.
288
# TODO(dneto): I'm not sure what the expected result should be.
289
@inside_glslc_testsuite('Include')
290
class TestWrongPoundVersionInIncludedFile(expect.ErrorMessage):
291
"""Tests that warning message for #version directive in the included file
292
has the correct filename."""
293
294
environment = Directory('.', [
295
File('a.vert', '#version 140\n#include "b.glsl"\nvoid main() {}'),
296
File('b.glsl', '#version 10000000\n')])
297
glslc_args = ['-E', 'a.vert']
298
299
expected_error = [
300
"b.glsl:1: error: '#version' : must occur first in shader\n",
301
'1 error generated.\n'
302
]
303
304
305
@inside_glslc_testsuite('Include')
306
class VerifyRelativeInclude(expect.StdoutMatch):
307
"""Tests #including a relative sibling."""
308
309
environment = Directory('.', [
310
File('a.vert', '#version 140\ncontent a\n#include "foo/b.glsl"\n'),
311
Directory('foo', [
312
File('b.glsl', '#include "c.glsl"\ncontent b\n'),
313
File('c.glsl', 'content c\n')
314
])])
315
316
glslc_args = ['-E', 'a.vert']
317
318
expected_stdout = \
319
"""#version 140
320
#extension GL_GOOGLE_include_directive : enable
321
#line 0 "a.vert"
322
323
content a
324
#line 0 "foo/b.glsl"
325
#line 0 "foo/c.glsl"
326
content c
327
#line 1 "foo/b.glsl"
328
content b
329
#line 3 "a.vert"
330
331
"""
332
333
@inside_glslc_testsuite('Include')
334
class VerifyNestedRelativeInclude(expect.StdoutMatch):
335
"""Tests #including a relative child file."""
336
337
environment = Directory('.', [
338
File('a.vert', '#version 140\ncontent a\n#include "foo/b.glsl"\n'),
339
Directory('foo', [
340
File('b.glsl', '#include "bar/c.glsl"\ncontent b\n'),
341
Directory('bar', [
342
File('c.glsl', 'content c\n')
343
])
344
])
345
])
346
347
glslc_args = ['-E', 'a.vert']
348
349
expected_stdout = \
350
"""#version 140
351
#extension GL_GOOGLE_include_directive : enable
352
#line 0 "a.vert"
353
354
content a
355
#line 0 "foo/b.glsl"
356
#line 0 "foo/bar/c.glsl"
357
content c
358
#line 1 "foo/b.glsl"
359
content b
360
#line 3 "a.vert"
361
362
"""
363
364
365
@inside_glslc_testsuite('Include')
366
class VerifyRelativeIncludeWithDashI(expect.StdoutMatch):
367
"""Tests #including a relative file from a -I directory."""
368
369
environment = Directory('.', [
370
File('a.vert', '#version 140\ncontent a\n#include "bar/b.glsl"\n'),
371
Directory('foo', [
372
Directory('bar', [
373
File('b.glsl', '#include "c.glsl"\ncontent b\n'),
374
]),
375
File('c.glsl', 'content c\n')
376
])
377
])
378
379
glslc_args = ['-E', 'a.vert', '-Ifoo']
380
381
expected_stdout = \
382
"""#version 140
383
#extension GL_GOOGLE_include_directive : enable
384
#line 0 "a.vert"
385
386
content a
387
#line 0 "foo/bar/b.glsl"
388
#line 0 "foo/c.glsl"
389
content c
390
#line 1 "foo/bar/b.glsl"
391
content b
392
#line 3 "a.vert"
393
394
"""
395
396
397
@inside_glslc_testsuite('Include')
398
class VerifyRelativeOverridesDashI(expect.StdoutMatch):
399
"""Tests that relative includes override -I parameters."""
400
401
environment = Directory('.', [
402
File('a.vert', '#version 140\ncontent a\n#include "b.glsl"\n'),
403
File('b.glsl', 'content base_b\n'),
404
Directory('foo', [
405
File('b.glsl', '#include "c.glsl"\ncontent b\n'),
406
File('c.glsl', 'content c\n')
407
])
408
])
409
410
glslc_args = ['-E', 'a.vert', '-Ifoo']
411
412
expected_stdout = \
413
"""#version 140
414
#extension GL_GOOGLE_include_directive : enable
415
#line 0 "a.vert"
416
417
content a
418
#line 0 "b.glsl"
419
content base_b
420
#line 3 "a.vert"
421
422
"""
423
424
425
@inside_glslc_testsuite('Include')
426
class VerifyRelativeParent(expect.StdoutMatch):
427
"""Tests #including a parent file."""
428
429
environment = Directory('.', [
430
File('a.vert', '#version 140\ncontent a\n#include "b.glsl"\n'),
431
File('c.glsl', 'content c\n'),
432
Directory('foo', [
433
File('b.glsl', '#include "../c.glsl"\ncontent b\n')
434
])
435
])
436
437
glslc_args = ['-E', 'a.vert', '-Ifoo']
438
439
expected_stdout = \
440
"""#version 140
441
#extension GL_GOOGLE_include_directive : enable
442
#line 0 "a.vert"
443
444
content a
445
#line 0 "foo/b.glsl"
446
#line 0 "foo/../c.glsl"
447
content c
448
#line 1 "foo/b.glsl"
449
content b
450
#line 3 "a.vert"
451
452
"""
453
454
455
@inside_glslc_testsuite('Include')
456
class VerifyRelativeNeighbourDirectory(expect.StdoutMatch):
457
"""Tests #including a relative file in a neighbour directory."""
458
459
environment = Directory('.', [
460
File('a.vert', '#version 140\ncontent a\n#include "foo/b.glsl"\n'),
461
Directory('foo', [
462
File('b.glsl', '#include "../bar/c.glsl"\ncontent b\n')
463
]),
464
Directory('bar', [
465
File('c.glsl', 'content c\n')
466
])
467
])
468
469
glslc_args = ['-E', 'a.vert']
470
471
expected_stdout = \
472
"""#version 140
473
#extension GL_GOOGLE_include_directive : enable
474
#line 0 "a.vert"
475
476
content a
477
#line 0 "foo/b.glsl"
478
#line 0 "foo/../bar/c.glsl"
479
content c
480
#line 1 "foo/b.glsl"
481
content b
482
#line 3 "a.vert"
483
484
"""
485
486
487
@inside_glslc_testsuite('Include')
488
class VerifyRelativeOnlyToSelf(expect.ErrorMessage):
489
"""Tests that a relative includes are only relative to yourself."""
490
491
environment = Directory('.', [
492
File('a.vert', '#version 140\ncontent a\n#include "foo/b.glsl"\n'),
493
File('c.glsl', 'content c\n'),
494
Directory('foo', [
495
File('b.glsl', '#include "c.glsl"\ncontent b\n')
496
]),
497
])
498
499
glslc_args = ['-E', 'a.vert']
500
501
expected_error = [
502
"foo/b.glsl:1: error: '#include' : "
503
'Cannot find or open include file. for header name: c.glsl\n',
504
'1 error generated.\n'
505
]
506
507
508
@inside_glslc_testsuite('Include')
509
class VerifyRelativeFromAbsolutePath(expect.StdoutMatch):
510
"""Tests that absolute files can relatively include."""
511
512
environment = Directory('.', [
513
File('a.vert', '#version 140\ncontent a\n#include "b.glsl"\n'),
514
File('b.glsl', 'content b\n')
515
])
516
517
glslc_args = ['-E', SpecializedString('$directory/a.vert')]
518
519
expected_stdout = SpecializedString(
520
"""#version 140
521
#extension GL_GOOGLE_include_directive : enable
522
#line 0 "$directory/a.vert"
523
524
content a
525
#line 0 "$directory/b.glsl"
526
content b
527
#line 3 "$directory/a.vert"
528
529
""")
530
531
532
@inside_glslc_testsuite('Include')
533
class VerifyDashIAbsolutePath(expect.StdoutMatch):
534
"""Tests that -I parameters can be absolute paths."""
535
536
environment = Directory('.', [
537
File('a.vert', '#version 140\ncontent a\n#include "b.glsl"\n'),
538
Directory('foo', {
539
File('b.glsl', 'content b\n')
540
})
541
])
542
543
glslc_args = ['-E', 'a.vert', '-I', SpecializedString('$directory/foo')]
544
545
expected_stdout = SpecializedString(
546
"""#version 140
547
#extension GL_GOOGLE_include_directive : enable
548
#line 0 "a.vert"
549
550
content a
551
#line 0 "$directory/foo/b.glsl"
552
content b
553
#line 3 "a.vert"
554
555
""")
556
557