Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/shaderc
Path: blob/main/glslc/test/assembly.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 FileShader
18
19
20
def assembly_comments():
21
return """
22
; SPIR-V
23
; Version: 1.0
24
; Generator: Google Shaderc over Glslang; 11
25
; Bound: 6
26
; Schema: 0"""
27
28
29
def empty_main_assembly():
30
return assembly_comments() + """
31
OpCapability Shader
32
%1 = OpExtInstImport "GLSL.std.450"
33
OpMemoryModel Logical GLSL450
34
OpEntryPoint Vertex %4 "main"
35
OpSource ESSL 310
36
OpName %4 "main"
37
%2 = OpTypeVoid
38
%3 = OpTypeFunction %2
39
%4 = OpFunction %2 None %3
40
%5 = OpLabel
41
OpReturn
42
OpFunctionEnd"""
43
44
45
def empty_main():
46
return '#version 310 es\nvoid main() {}'
47
48
49
@inside_glslc_testsuite('SpirvAssembly')
50
class TestAssemblyFileAsOnlyParameter(expect.ValidNamedObjectFile):
51
"""Tests that glslc accepts a SPIR-V assembly file as the only parameter."""
52
53
shader = FileShader(empty_main_assembly(), '.spvasm')
54
glslc_args = [shader]
55
expected_object_filenames = ('a.spv',)
56
57
58
@inside_glslc_testsuite('SpirvAssembly')
59
class TestDashCAssemblyFile(expect.ValidObjectFile):
60
"""Tests that -c works with SPIR-V assembly file."""
61
62
shader = FileShader(empty_main_assembly(), '.spvasm')
63
glslc_args = ['-c', shader]
64
65
66
@inside_glslc_testsuite('SpirvAssembly')
67
class TestAssemblyFileWithOnlyComments(expect.ValidObjectFile):
68
"""Tests that glslc accepts an assembly file with only comments inside."""
69
70
shader = FileShader(assembly_comments(), '.spvasm')
71
glslc_args = ['-c', shader]
72
73
74
@inside_glslc_testsuite('SpirvAssembly')
75
class TestEmptyAssemblyFile(expect.ValidObjectFile):
76
"""Tests that glslc accepts an empty assembly file."""
77
78
shader = FileShader('', '.spvasm')
79
glslc_args = ['-c', shader]
80
81
82
@inside_glslc_testsuite('SpirvAssembly')
83
class TestDashEAssemblyFile(expect.SuccessfulReturn, expect.NoGeneratedFiles):
84
"""Tests that -E works with SPIR-V assembly file."""
85
86
shader = FileShader(empty_main_assembly(), '.spvasm')
87
glslc_args = ['-E', shader]
88
89
90
@inside_glslc_testsuite('SpirvAssembly')
91
class TestDashSAssemblyFile(expect.SuccessfulReturn, expect.NoGeneratedFiles):
92
"""Tests that -S works with SPIR-V assembly file."""
93
94
shader = FileShader(empty_main_assembly(), '.spvasm')
95
glslc_args = ['-S', shader]
96
97
98
@inside_glslc_testsuite('SpirvAssembly')
99
class TestMultipleAssemblyFiles(expect.ValidObjectFile):
100
"""Tests that glslc accepts multiple SPIR-V assembly files."""
101
102
shader1 = FileShader(empty_main_assembly(), '.spvasm')
103
shader2 = FileShader(empty_main_assembly(), '.spvasm')
104
shader3 = FileShader(empty_main_assembly(), '.spvasm')
105
glslc_args = ['-c', shader1, shader2, shader3]
106
107
108
@inside_glslc_testsuite('SpirvAssembly')
109
class TestHybridInputFiles(expect.ValidObjectFile):
110
"""Tests that glslc accepts a mix of SPIR-V assembly files and
111
GLSL source files."""
112
113
shader1 = FileShader(empty_main_assembly(), '.spvasm')
114
shader2 = FileShader(empty_main(), '.vert')
115
shader3 = FileShader(empty_main(), '.frag')
116
glslc_args = ['-c', shader1, shader2, shader3]
117
118
119
@inside_glslc_testsuite('SpirvAssembly')
120
class TestShaderStageWithAssemblyFile(expect.ErrorMessage):
121
"""Tests that assembly files don't work with -fshader-stage"""
122
123
shader = FileShader(empty_main_assembly(), '.spvasm')
124
glslc_args = ['-c', '-fshader-stage=vertex', shader]
125
126
expected_error = [
127
shader, ": error: #version: Desktop shaders for Vulkan SPIR-V require "
128
"version 140 or higher\n",
129
shader, ":2: error: 'extraneous semicolon' :",
130
" not supported for this version or the enabled extensions\n",
131
shader, ":2: error: '' : syntax error, unexpected IDENTIFIER\n",
132
'3 errors generated.\n']
133
134
135
@inside_glslc_testsuite('SpirvAssembly')
136
class TestStdWithAssemblyFile(expect.ValidObjectFile):
137
"""Tests that --std= doesn't affect the processing of assembly files."""
138
139
shader = FileShader(empty_main_assembly(), '.spvasm')
140
glslc_args = ['-c', '-std=310es', shader]
141
142