blob: 21209a884228c78b8297610e8221738ecdbee158 [file] [log] [blame]
Andrew Woloszyne549e7b2015-07-16 11:07:40 -04001# 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
15import expect
16import os.path
17from glslc_test_framework import inside_glslc_testsuite
18from placeholder import FileShader, StdinShader, TempFileName
19
20
21@inside_glslc_testsuite('File')
22class SimpleFileCompiled(expect.ValidObjectFile):
23 """Tests whether or not a simple glsl file compiles."""
24
25 shader = FileShader('#version 310 es\nvoid main() {}', '.frag')
26 glslc_args = ['-c', shader]
27
28
29@inside_glslc_testsuite('File')
30class NotSpecifyingOutputName(expect.SuccessfulReturn,
31 expect.CorrectObjectFilePreamble):
32 """Tests that when there is no -o and -E/-S/-c specified, output as a.spv."""
33
David Netofab64112016-02-02 16:24:06 -050034 shader = FileShader('#version 140\nvoid main() {}', '.frag')
Andrew Woloszyne549e7b2015-07-16 11:07:40 -040035 glslc_args = [shader]
36
37 def check_output_a_spv(self, status):
38 output_name = os.path.join(status.directory, 'a.spv')
39 return self.verify_object_file_preamble(output_name)
40
41
42@inside_glslc_testsuite('Parameters')
43class HelpParameters(
44 expect.ReturnCodeIsZero, expect.StdoutMatch, expect.StderrMatch):
45 """Tests the --help flag outputs correctly and does not produce and error."""
46
47 glslc_args = ['--help']
48
David Neto91bfb4c2016-02-23 22:26:18 -050049 expected_stdout = '''glslc - Compile shaders into SPIR-V
50
51Usage: glslc [options] file...
Andrew Woloszyne549e7b2015-07-16 11:07:40 -040052
53An input file of - represents standard input.
54
55Options:
56 -c Only run preprocess, compile, and assemble steps.
57 -Dmacro[=defn] Add an implicit macro definition.
58 -E Outputs only the results of the preprocessing step.
Lei Zhang1ccede12016-02-24 09:30:32 -050059 Output defaults to standard output.
David Neto7ae44a12017-01-23 17:24:33 -050060 -fauto-bind-uniforms
61 Automatically assign bindings to uniform variables that
62 don't have an explicit 'binding' layout in the shader
63 source.
David Neto63313f92017-06-07 09:15:34 -070064 -fhlsl-iomap Use HLSL IO mappings for bindings.
David Neto357d24b2017-06-04 18:27:12 -040065 -fimage-binding-base [stage] <value>
David Netoa2900672017-01-28 13:03:24 -080066 Sets the lowest automatically assigned binding number for
David Neto357d24b2017-06-04 18:27:12 -040067 images. Optionally only set it for a single shader stage.
David Neto63313f92017-06-07 09:15:34 -070068 For HLSL, the resource register number is added to this
69 base.
David Neto357d24b2017-06-04 18:27:12 -040070 -ftexture-binding-base [stage] <value>
David Netoa2900672017-01-28 13:03:24 -080071 Sets the lowest automatically assigned binding number for
David Neto357d24b2017-06-04 18:27:12 -040072 textures. Optionally only set it for a single shader stage.
David Neto63313f92017-06-07 09:15:34 -070073 For HLSL, the resource register number is added to this
74 base.
David Neto357d24b2017-06-04 18:27:12 -040075 -fsampler-binding-base [stage] <value>
David Netoa2900672017-01-28 13:03:24 -080076 Sets the lowest automatically assigned binding number for
David Neto357d24b2017-06-04 18:27:12 -040077 samplers Optionally only set it for a single shader stage.
David Neto63313f92017-06-07 09:15:34 -070078 For HLSL, the resource register number is added to this
79 base.
David Neto357d24b2017-06-04 18:27:12 -040080 -fubo-binding-base [stage] <value>
David Netoa2900672017-01-28 13:03:24 -080081 Sets the lowest automatically assigned binding number for
David Neto357d24b2017-06-04 18:27:12 -040082 uniform buffer objects (UBO). Optionally only set it for
83 a single shader stage.
David Neto63313f92017-06-07 09:15:34 -070084 For HLSL, the resource register number is added to this
85 base.
David Netocdcc0152017-06-04 19:53:34 -040086 -fcbuffer-binding-base [stage] <value>
87 Same as -fubo-binding-base.
88 -fssbo-binding-base [stage] <value>
89 Sets the lowest automatically assigned binding number for
90 shader storage buffer objects (SSBO). Optionally only set
91 it for a single shader stage. Only affects GLSL.
David Neto63313f92017-06-07 09:15:34 -070092 -fuav-binding-base [stage] <value>
93 For automatically assigned bindings for unordered access
94 views (UAV), the register number is added to this base to
95 determine the binding number. Optionally only set it for
96 a single shader stage. Only affects HLSL.
David Neto63d0f822017-06-10 01:11:51 -070097 -fresource-set-binding [stage] <reg0> <set0> <binding0>
98 [<reg1> <set1> <binding1>...]
99 Explicitly sets the descriptor set and binding for
100 HLSL resources, by register name. Optionally restrict
101 it to a single stage.
David Neto2df47b52016-11-12 13:55:21 -0800102 -fentry-point=<name>
103 Specify the entry point name for HLSL compilation, for
104 all subsequent source files. Default is "main".
105 -flimit=<settings>
106 Specify resource limits. Each limit is specified by a limit
107 name followed by an integer value. Tokens should be
108 separated by whitespace. If the same limit is specified
109 several times, only the last setting takes effect.
110 --show-limits Display available limit names and their default values.
111 -flimit-file <file>
112 Set limits as specified in the given file.
Andrew Woloszyne549e7b2015-07-16 11:07:40 -0400113 -fshader-stage=<stage>
114 Treat subsequent input files as having stage <stage>.
David Neto357d24b2017-06-04 18:27:12 -0400115 Valid stages are vertex, vert, fragment, frag, tesscontrol,
116 tesc, tesseval, tese, geometry, geom, compute, and comp.
Andrew Woloszyne549e7b2015-07-16 11:07:40 -0400117 -g Generate source-level debug information.
118 Currently this option has no effect.
119 --help Display available options.
Dejan Mircevski29174452016-02-18 18:11:57 -0500120 --version Display compiler version information.
Andrew Woloszyne549e7b2015-07-16 11:07:40 -0400121 -I <value> Add directory to include search path.
122 -o <file> Write output to <file>.
123 A file name of '-' represents standard output.
David Netocdefe182016-10-21 01:12:53 -0400124 -std=<value> Version and profile for GLSL input files. Possible values
Andrew Woloszyne549e7b2015-07-16 11:07:40 -0400125 are concatenations of version and profile, e.g. 310es,
David Netocdefe182016-10-21 01:12:53 -0400126 450core, etc. Ignored for HLSL files.
qiningb3cfde42016-05-14 01:43:31 -0400127 -mfmt=<format> Output SPIR-V binary code using the selected format. This
128 option may be specified only when the compilation output is
129 in SPIR-V binary code form. Available options include bin, c
130 and num. By default the binary output format is bin.
qiningbde33a92016-02-01 14:30:07 -0500131 -M Generate make dependencies. Implies -E and -w.
132 -MM An alias for -M.
133 -MD Generate make dependencies and compile.
134 -MF <file> Write dependency output to the given file.
135 -MT <target> Specify the target of the rule emitted by dependency
136 generation.
Andrew Woloszyne549e7b2015-07-16 11:07:40 -0400137 -S Only run preprocess and compilation steps.
qiningf6d83742016-01-28 16:05:11 -0500138 --target-env=<environment>
139 Set the target shader environment, and the semantics
140 of warnings and errors. Valid values are 'opengl',
141 'opengl_compat' and 'vulkan'. The default value is 'vulkan'.
Andrew Woloszyne549e7b2015-07-16 11:07:40 -0400142 -w Suppresses all warning messages.
143 -Werror Treat all warnings as errors.
Andrew Woloszyne549e7b2015-07-16 11:07:40 -0400144 -x <language> Treat subsequent input files as having type <language>.
David Netocdefe182016-10-21 01:12:53 -0400145 Valid languages are: glsl, hlsl.
146 For files ending in .hlsl the default is hlsl.
147 Otherwise the default is glsl.
David Neto44dff892017-06-08 00:15:58 -0700148 -fhlsl-offsets Use HLSL offset rules for packing members of blocks.
149 Affects only GLSL. HLSL rules are always used for HLSL.
Andrew Woloszyne549e7b2015-07-16 11:07:40 -0400150'''
151
152 expected_stderr = ''
153
154
155@inside_glslc_testsuite('Parameters')
156class HelpIsNotTooWide(expect.StdoutNoWiderThan80Columns):
157 """Tests that --help output is not too wide."""
158
159 glslc_args = ['--help']
160
161
162@inside_glslc_testsuite('Parameters')
163class UnknownSingleLetterArgument(expect.ErrorMessage):
164 """Tests that an unknown argument triggers an error message."""
165
166 glslc_args = ['-a']
167 expected_error = ["glslc: error: unknown argument: '-a'\n"]
168
169
170@inside_glslc_testsuite('Parameters')
171class UnknownMultiLetterArgument(expect.ErrorMessage):
172 """Tests that an unknown argument triggers an error message."""
173
174 glslc_args = ['-zzz']
175 expected_error = ["glslc: error: unknown argument: '-zzz'\n"]
176
177
178@inside_glslc_testsuite('Parameters')
179class UnsupportedOption(expect.ErrorMessage):
180 """Tests that an unsupported option triggers an error message."""
181
182 glslc_args = ['--unsupported-option']
183 expected_error = [
184 "glslc: error: unsupported option: '--unsupported-option'\n"]
185
186
187@inside_glslc_testsuite('File')
188class FileNotFound(expect.ErrorMessage):
189 """Tests the error message if a file cannot be found."""
190
191 blabla_file = TempFileName('blabla.frag')
192 glslc_args = [blabla_file]
193 expected_error = [
194 "glslc: error: cannot open input file: '", blabla_file,
195 "': No such file or directory\n"]
196
197
198@inside_glslc_testsuite('Unsupported')
199class LinkingNotSupported(expect.ErrorMessage):
200 """Tests the error message generated by linking not supported yet."""
201
David Netofab64112016-02-02 16:24:06 -0500202 shader1 = FileShader('#version 140\nvoid main() {}', '.vert')
203 shader2 = FileShader('#version 140\nvoid main() {}', '.frag')
Andrew Woloszyne549e7b2015-07-16 11:07:40 -0400204 glslc_args = [shader1, shader2]
205 expected_error = [
206 'glslc: error: linking multiple files is not supported yet. ',
207 'Use -c to compile files individually.\n']
208
209
210@inside_glslc_testsuite('Unsupported')
211class MultipleStdinUnsupported(expect.ErrorMessage):
212 """Tests the error message generated by having more than one - input."""
213
214 glslc_args = ['-c', '-fshader-stage=vertex', '-', '-']
215 expected_error = [
216 'glslc: error: specifying standard input "-" as input more'
217 ' than once is not allowed.\n']
218
219
220@inside_glslc_testsuite('Parameters')
221class StdinWithoutShaderStage(expect.StdoutMatch, expect.StderrMatch):
222 """Tests that you must use -fshader-stage when specifying - as input."""
223 shader = StdinShader(
David Netofab64112016-02-02 16:24:06 -0500224 """#version 140
Andrew Woloszyne549e7b2015-07-16 11:07:40 -0400225 int a() {
226 }
227 void main() {
228 int x = a();
229 }
230 """)
231 glslc_args = [shader]
232
233 expected_stdout = ''
234 expected_stderr = [
235 "glslc: error: '-': -fshader-stage required when input is from "
236 'standard input "-"\n']
David Neto2df47b52016-11-12 13:55:21 -0800237
238
239@inside_glslc_testsuite('Parameters')
240class LimitsHelp(expect.StdoutMatch, expect.StderrMatch):
241 """Tests --show-limits shows correct output."""
242
243 glslc_args = ['--show-limits']
244
245 expected_stderr = ''
246 expected_stdout = """MaxLights 8
247MaxClipPlanes 6
248MaxTextureUnits 2
249MaxTextureCoords 8
250MaxVertexAttribs 16
251MaxVertexUniformComponents 4096
252MaxVaryingFloats 60
253MaxVertexTextureImageUnits 16
254MaxCombinedTextureImageUnits 80
255MaxTextureImageUnits 16
256MaxFragmentUniformComponents 1024
David Netoef03acd2017-06-30 10:30:17 -0400257MaxDrawBuffers 8
David Neto2df47b52016-11-12 13:55:21 -0800258MaxVertexUniformVectors 256
259MaxVaryingVectors 15
260MaxFragmentUniformVectors 256
261MaxVertexOutputVectors 16
262MaxFragmentInputVectors 15
263MinProgramTexelOffset -8
264MaxProgramTexelOffset 7
265MaxClipDistances 8
266MaxComputeWorkGroupCountX 65535
267MaxComputeWorkGroupCountY 65535
268MaxComputeWorkGroupCountZ 65535
269MaxComputeWorkGroupSizeX 1024
270MaxComputeWorkGroupSizeY 1024
271MaxComputeWorkGroupSizeZ 64
272MaxComputeUniformComponents 512
273MaxComputeTextureImageUnits 16
274MaxComputeImageUniforms 8
275MaxComputeAtomicCounters 8
276MaxComputeAtomicCounterBuffers 1
277MaxVaryingComponents 60
278MaxVertexOutputComponents 64
279MaxGeometryInputComponents 64
280MaxGeometryOutputComponents 128
281MaxFragmentInputComponents 128
282MaxImageUnits 8
283MaxCombinedImageUnitsAndFragmentOutputs 8
284MaxCombinedShaderOutputResources 8
285MaxImageSamples 0
286MaxVertexImageUniforms 0
287MaxTessControlImageUniforms 0
288MaxTessEvaluationImageUniforms 0
289MaxGeometryImageUniforms 0
290MaxFragmentImageUniforms 8
291MaxCombinedImageUniforms 8
292MaxGeometryTextureImageUnits 16
293MaxGeometryOutputVertices 256
294MaxGeometryTotalOutputComponents 1024
295MaxGeometryUniformComponents 512
296MaxGeometryVaryingComponents 60
297MaxTessControlInputComponents 128
298MaxTessControlOutputComponents 128
299MaxTessControlTextureImageUnits 16
300MaxTessControlUniformComponents 1024
301MaxTessControlTotalOutputComponents 4096
302MaxTessEvaluationInputComponents 128
303MaxTessEvaluationOutputComponents 128
304MaxTessEvaluationTextureImageUnits 16
305MaxTessEvaluationUniformComponents 1024
306MaxTessPatchComponents 120
307MaxPatchVertices 32
308MaxTessGenLevel 64
309MaxViewports 16
310MaxVertexAtomicCounters 0
311MaxTessControlAtomicCounters 0
312MaxTessEvaluationAtomicCounters 0
313MaxGeometryAtomicCounters 0
314MaxFragmentAtomicCounters 8
315MaxCombinedAtomicCounters 8
316MaxAtomicCounterBindings 1
317MaxVertexAtomicCounterBuffers 0
318MaxTessControlAtomicCounterBuffers 0
319MaxTessEvaluationAtomicCounterBuffers 0
320MaxGeometryAtomicCounterBuffers 0
321MaxFragmentAtomicCounterBuffers 0
322MaxCombinedAtomicCounterBuffers 1
323MaxAtomicCounterBufferSize 32
324MaxTransformFeedbackBuffers 4
325MaxTransformFeedbackInterleavedComponents 64
326MaxCullDistances 8
327MaxCombinedClipAndCullDistances 8
328MaxSamples 4
329"""