First Commit
This commit is contained in:
390
3rdparty/shaderc/glslc/test/parameter_tests.py
vendored
Normal file
390
3rdparty/shaderc/glslc/test/parameter_tests.py
vendored
Normal file
@@ -0,0 +1,390 @@
|
||||
# Copyright 2015 The Shaderc Authors. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import expect
|
||||
import os.path
|
||||
from glslc_test_framework import inside_glslc_testsuite
|
||||
from placeholder import FileShader, StdinShader, TempFileName
|
||||
|
||||
|
||||
@inside_glslc_testsuite('File')
|
||||
class SimpleFileCompiled(expect.ValidObjectFile):
|
||||
"""Tests whether or not a simple glsl file compiles."""
|
||||
|
||||
shader = FileShader('#version 310 es\nvoid main() {}', '.frag')
|
||||
glslc_args = ['-c', shader]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('File')
|
||||
class NotSpecifyingOutputName(expect.SuccessfulReturn,
|
||||
expect.CorrectObjectFilePreamble):
|
||||
"""Tests that when there is no -o and -E/-S/-c specified, output as a.spv."""
|
||||
|
||||
shader = FileShader('#version 140\nvoid main() {}', '.frag')
|
||||
glslc_args = [shader]
|
||||
|
||||
def check_output_a_spv(self, status):
|
||||
output_name = os.path.join(status.directory, 'a.spv')
|
||||
return self.verify_object_file_preamble(output_name)
|
||||
|
||||
|
||||
@inside_glslc_testsuite('Parameters')
|
||||
class HelpParameters(
|
||||
expect.ReturnCodeIsZero, expect.StdoutMatch, expect.StderrMatch):
|
||||
"""Tests the --help flag outputs correctly and does not produce and error."""
|
||||
|
||||
glslc_args = ['--help']
|
||||
|
||||
expected_stdout = '''glslc - Compile shaders into SPIR-V
|
||||
|
||||
Usage: glslc [options] file...
|
||||
|
||||
An input file of - represents standard input.
|
||||
|
||||
Options:
|
||||
-c Only run preprocess, compile, and assemble steps.
|
||||
-Dmacro[=defn] Add an implicit macro definition.
|
||||
-E Outputs only the results of the preprocessing step.
|
||||
Output defaults to standard output.
|
||||
-fauto-bind-uniforms
|
||||
Automatically assign bindings to uniform variables that
|
||||
don't have an explicit 'binding' layout in the shader
|
||||
source.
|
||||
-fauto-map-locations
|
||||
Automatically assign locations to uniform variables that
|
||||
don't have an explicit 'location' layout in the shader
|
||||
source.
|
||||
-fauto-combined-image-sampler
|
||||
Removes sampler variables and converts existing textures
|
||||
to combined image-samplers.
|
||||
-fentry-point=<name>
|
||||
Specify the entry point name for HLSL compilation, for
|
||||
all subsequent source files. Default is "main".
|
||||
-fhlsl-16bit-types
|
||||
Enable 16-bit type support for HLSL.
|
||||
-fhlsl_functionality1, -fhlsl-functionality1
|
||||
Enable extension SPV_GOOGLE_hlsl_functionality1 for HLSL
|
||||
compilation.
|
||||
-fhlsl-iomap Use HLSL IO mappings for bindings.
|
||||
-fhlsl-offsets Use HLSL offset rules for packing members of blocks.
|
||||
Affects only GLSL. HLSL rules are always used for HLSL.
|
||||
-finvert-y Invert position.Y output in vertex shader.
|
||||
-flimit=<settings>
|
||||
Specify resource limits. Each limit is specified by a limit
|
||||
name followed by an integer value. Tokens should be
|
||||
separated by whitespace. If the same limit is specified
|
||||
several times, only the last setting takes effect.
|
||||
-flimit-file <file>
|
||||
Set limits as specified in the given file.
|
||||
-fnan-clamp Generate code for max and min builtins so that, when given
|
||||
a NaN operand, the other operand is returned. Similarly,
|
||||
the clamp builtin will favour the non-NaN operands, as if
|
||||
clamp were implemented as a composition of max and min.
|
||||
-fpreserve-bindings
|
||||
Preserve all binding declarations, even if those bindings
|
||||
are not used.
|
||||
-fresource-set-binding [stage] <reg0> <set0> <binding0>
|
||||
[<reg1> <set1> <binding1>...]
|
||||
Explicitly sets the descriptor set and binding for
|
||||
HLSL resources, by register name. Optionally restrict
|
||||
it to a single stage.
|
||||
-fcbuffer-binding-base [stage] <value>
|
||||
Same as -fubo-binding-base.
|
||||
-fimage-binding-base [stage] <value>
|
||||
Sets the lowest automatically assigned binding number for
|
||||
images. Optionally only set it for a single shader stage.
|
||||
For HLSL, the resource register number is added to this
|
||||
base.
|
||||
-fsampler-binding-base [stage] <value>
|
||||
Sets the lowest automatically assigned binding number for
|
||||
samplers Optionally only set it for a single shader stage.
|
||||
For HLSL, the resource register number is added to this
|
||||
base.
|
||||
-fssbo-binding-base [stage] <value>
|
||||
Sets the lowest automatically assigned binding number for
|
||||
shader storage buffer objects (SSBO). Optionally only set
|
||||
it for a single shader stage. Only affects GLSL.
|
||||
-ftexture-binding-base [stage] <value>
|
||||
Sets the lowest automatically assigned binding number for
|
||||
textures. Optionally only set it for a single shader stage.
|
||||
For HLSL, the resource register number is added to this
|
||||
base.
|
||||
-fuav-binding-base [stage] <value>
|
||||
For automatically assigned bindings for unordered access
|
||||
views (UAV), the register number is added to this base to
|
||||
determine the binding number. Optionally only set it for
|
||||
a single shader stage. Only affects HLSL.
|
||||
-fubo-binding-base [stage] <value>
|
||||
Sets the lowest automatically assigned binding number for
|
||||
uniform buffer objects (UBO). Optionally only set it for
|
||||
a single shader stage.
|
||||
For HLSL, the resource register number is added to this
|
||||
base.
|
||||
-fshader-stage=<stage>
|
||||
Treat subsequent input files as having stage <stage>.
|
||||
Valid stages are vertex, vert, fragment, frag, tesscontrol,
|
||||
tesc, tesseval, tese, geometry, geom, compute, and comp.
|
||||
-g Generate source-level debug information.
|
||||
-h Display available options.
|
||||
--help Display available options.
|
||||
-I <value> Add directory to include search path.
|
||||
-mfmt=<format> Output SPIR-V binary code using the selected format. This
|
||||
option may be specified only when the compilation output is
|
||||
in SPIR-V binary code form. Available options are:
|
||||
bin - SPIR-V binary words. This is the default.
|
||||
c - Binary words as C initializer list of 32-bit ints
|
||||
num - List of comma-separated 32-bit hex integers
|
||||
-M Generate make dependencies. Implies -E and -w.
|
||||
-MM An alias for -M.
|
||||
-MD Generate make dependencies and compile.
|
||||
-MF <file> Write dependency output to the given file.
|
||||
-MT <target> Specify the target of the rule emitted by dependency
|
||||
generation.
|
||||
-O Optimize the generated SPIR-V code for better performance.
|
||||
-Os Optimize the generated SPIR-V code for smaller size.
|
||||
-O0 Disable optimization.
|
||||
-o <file> Write output to <file>.
|
||||
A file name of '-' represents standard output.
|
||||
-std=<value> Version and profile for GLSL input files. Possible values
|
||||
are concatenations of version and profile, e.g. 310es,
|
||||
450core, etc. Ignored for HLSL files.
|
||||
-S Emit SPIR-V assembly instead of binary.
|
||||
--show-limits Display available limit names and their default values.
|
||||
--target-env=<environment>
|
||||
Set the target client environment, and the semantics
|
||||
of warnings and errors. An optional suffix can specify
|
||||
the client version. Values are:
|
||||
vulkan1.0 # The default
|
||||
vulkan1.1
|
||||
vulkan1.2
|
||||
vulkan1.3
|
||||
vulkan # Same as vulkan1.0
|
||||
opengl4.5
|
||||
opengl # Same as opengl4.5
|
||||
--target-spv=<spirv-version>
|
||||
Set the SPIR-V version to be used for the generated SPIR-V
|
||||
module. The default is the highest version of SPIR-V
|
||||
required to be supported for the target environment.
|
||||
For example, default for vulkan1.0 is spv1.0, and
|
||||
the default for vulkan1.1 is spv1.3,
|
||||
the default for vulkan1.2 is spv1.5.
|
||||
the default for vulkan1.3 is spv1.6.
|
||||
Values are:
|
||||
spv1.0, spv1.1, spv1.2, spv1.3, spv1.4, spv1.5, spv1.6
|
||||
--version Display compiler version information.
|
||||
-w Suppresses all warning messages.
|
||||
-Werror Treat all warnings as errors.
|
||||
-x <language> Treat subsequent input files as having type <language>.
|
||||
Valid languages are: glsl, hlsl.
|
||||
For files ending in .hlsl the default is hlsl.
|
||||
Otherwise the default is glsl.
|
||||
'''
|
||||
|
||||
expected_stderr = ''
|
||||
|
||||
|
||||
@inside_glslc_testsuite('Parameters')
|
||||
class HelpIsNotTooWide(expect.StdoutNoWiderThan80Columns):
|
||||
"""Tests that --help output is not too wide."""
|
||||
|
||||
glslc_args = ['--help']
|
||||
|
||||
|
||||
@inside_glslc_testsuite('Parameters')
|
||||
class UnknownSingleLetterArgument(expect.ErrorMessage):
|
||||
"""Tests that an unknown argument triggers an error message."""
|
||||
|
||||
glslc_args = ['-a']
|
||||
expected_error = ["glslc: error: unknown argument: '-a'\n"]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('Parameters')
|
||||
class UnknownMultiLetterArgument(expect.ErrorMessage):
|
||||
"""Tests that an unknown argument triggers an error message."""
|
||||
|
||||
glslc_args = ['-zzz']
|
||||
expected_error = ["glslc: error: unknown argument: '-zzz'\n"]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('Parameters')
|
||||
class UnsupportedOption(expect.ErrorMessage):
|
||||
"""Tests that an unsupported option triggers an error message."""
|
||||
|
||||
glslc_args = ['--unsupported-option']
|
||||
expected_error = [
|
||||
"glslc: error: unsupported option: '--unsupported-option'\n"]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('File')
|
||||
class FileNotFound(expect.ErrorMessage):
|
||||
"""Tests the error message if a file cannot be found."""
|
||||
|
||||
blabla_file = TempFileName('blabla.frag')
|
||||
glslc_args = [blabla_file]
|
||||
expected_error = [
|
||||
"glslc: error: cannot open input file: '", blabla_file,
|
||||
"': No such file or directory\n"]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('Unsupported')
|
||||
class LinkingNotSupported(expect.ErrorMessage):
|
||||
"""Tests the error message generated by linking not supported yet."""
|
||||
|
||||
shader1 = FileShader('#version 140\nvoid main() {}', '.vert')
|
||||
shader2 = FileShader('#version 140\nvoid main() {}', '.frag')
|
||||
glslc_args = [shader1, shader2]
|
||||
expected_error = [
|
||||
'glslc: error: linking multiple files is not supported yet. ',
|
||||
'Use -c to compile files individually.\n']
|
||||
|
||||
|
||||
@inside_glslc_testsuite('Unsupported')
|
||||
class MultipleStdinUnsupported(expect.ErrorMessage):
|
||||
"""Tests the error message generated by having more than one - input."""
|
||||
|
||||
glslc_args = ['-c', '-fshader-stage=vertex', '-', '-']
|
||||
expected_error = [
|
||||
'glslc: error: specifying standard input "-" as input more'
|
||||
' than once is not allowed.\n']
|
||||
|
||||
|
||||
@inside_glslc_testsuite('Parameters')
|
||||
class StdinWithoutShaderStage(expect.StdoutMatch, expect.StderrMatch):
|
||||
"""Tests that you must use -fshader-stage when specifying - as input."""
|
||||
shader = StdinShader(
|
||||
"""#version 140
|
||||
int a() {
|
||||
}
|
||||
void main() {
|
||||
int x = a();
|
||||
}
|
||||
""")
|
||||
glslc_args = [shader]
|
||||
|
||||
expected_stdout = ''
|
||||
expected_stderr = [
|
||||
"glslc: error: '-': -fshader-stage required when input is from "
|
||||
'standard input "-"\n']
|
||||
|
||||
|
||||
@inside_glslc_testsuite('Parameters')
|
||||
class LimitsHelp(expect.StdoutMatch, expect.StderrMatch):
|
||||
"""Tests --show-limits shows correct output."""
|
||||
|
||||
glslc_args = ['--show-limits']
|
||||
|
||||
expected_stderr = ''
|
||||
expected_stdout = """MaxLights 8
|
||||
MaxClipPlanes 6
|
||||
MaxTextureUnits 2
|
||||
MaxTextureCoords 8
|
||||
MaxVertexAttribs 16
|
||||
MaxVertexUniformComponents 4096
|
||||
MaxVaryingFloats 60
|
||||
MaxVertexTextureImageUnits 16
|
||||
MaxCombinedTextureImageUnits 80
|
||||
MaxTextureImageUnits 16
|
||||
MaxFragmentUniformComponents 1024
|
||||
MaxDrawBuffers 8
|
||||
MaxVertexUniformVectors 256
|
||||
MaxVaryingVectors 15
|
||||
MaxFragmentUniformVectors 256
|
||||
MaxVertexOutputVectors 16
|
||||
MaxFragmentInputVectors 15
|
||||
MinProgramTexelOffset -8
|
||||
MaxProgramTexelOffset 7
|
||||
MaxClipDistances 8
|
||||
MaxComputeWorkGroupCountX 65535
|
||||
MaxComputeWorkGroupCountY 65535
|
||||
MaxComputeWorkGroupCountZ 65535
|
||||
MaxComputeWorkGroupSizeX 1024
|
||||
MaxComputeWorkGroupSizeY 1024
|
||||
MaxComputeWorkGroupSizeZ 64
|
||||
MaxComputeUniformComponents 512
|
||||
MaxComputeTextureImageUnits 16
|
||||
MaxComputeImageUniforms 8
|
||||
MaxComputeAtomicCounters 8
|
||||
MaxComputeAtomicCounterBuffers 1
|
||||
MaxVaryingComponents 60
|
||||
MaxVertexOutputComponents 64
|
||||
MaxGeometryInputComponents 64
|
||||
MaxGeometryOutputComponents 128
|
||||
MaxFragmentInputComponents 128
|
||||
MaxImageUnits 8
|
||||
MaxCombinedImageUnitsAndFragmentOutputs 8
|
||||
MaxCombinedShaderOutputResources 8
|
||||
MaxImageSamples 0
|
||||
MaxVertexImageUniforms 0
|
||||
MaxTessControlImageUniforms 0
|
||||
MaxTessEvaluationImageUniforms 0
|
||||
MaxGeometryImageUniforms 0
|
||||
MaxFragmentImageUniforms 8
|
||||
MaxCombinedImageUniforms 8
|
||||
MaxGeometryTextureImageUnits 16
|
||||
MaxGeometryOutputVertices 256
|
||||
MaxGeometryTotalOutputComponents 1024
|
||||
MaxGeometryUniformComponents 512
|
||||
MaxGeometryVaryingComponents 60
|
||||
MaxTessControlInputComponents 128
|
||||
MaxTessControlOutputComponents 128
|
||||
MaxTessControlTextureImageUnits 16
|
||||
MaxTessControlUniformComponents 1024
|
||||
MaxTessControlTotalOutputComponents 4096
|
||||
MaxTessEvaluationInputComponents 128
|
||||
MaxTessEvaluationOutputComponents 128
|
||||
MaxTessEvaluationTextureImageUnits 16
|
||||
MaxTessEvaluationUniformComponents 1024
|
||||
MaxTessPatchComponents 120
|
||||
MaxPatchVertices 32
|
||||
MaxTessGenLevel 64
|
||||
MaxViewports 16
|
||||
MaxVertexAtomicCounters 0
|
||||
MaxTessControlAtomicCounters 0
|
||||
MaxTessEvaluationAtomicCounters 0
|
||||
MaxGeometryAtomicCounters 0
|
||||
MaxFragmentAtomicCounters 8
|
||||
MaxCombinedAtomicCounters 8
|
||||
MaxAtomicCounterBindings 1
|
||||
MaxVertexAtomicCounterBuffers 0
|
||||
MaxTessControlAtomicCounterBuffers 0
|
||||
MaxTessEvaluationAtomicCounterBuffers 0
|
||||
MaxGeometryAtomicCounterBuffers 0
|
||||
MaxFragmentAtomicCounterBuffers 0
|
||||
MaxCombinedAtomicCounterBuffers 1
|
||||
MaxAtomicCounterBufferSize 32
|
||||
MaxTransformFeedbackBuffers 4
|
||||
MaxTransformFeedbackInterleavedComponents 64
|
||||
MaxCullDistances 8
|
||||
MaxCombinedClipAndCullDistances 8
|
||||
MaxSamples 4
|
||||
MaxMeshOutputVerticesNV 256
|
||||
MaxMeshOutputPrimitivesNV 512
|
||||
MaxMeshWorkGroupSizeX_NV 32
|
||||
MaxMeshWorkGroupSizeY_NV 1
|
||||
MaxMeshWorkGroupSizeZ_NV 1
|
||||
MaxTaskWorkGroupSizeX_NV 32
|
||||
MaxTaskWorkGroupSizeY_NV 1
|
||||
MaxTaskWorkGroupSizeZ_NV 1
|
||||
MaxMeshViewCountNV 4
|
||||
MaxMeshOutputVerticesEXT 256
|
||||
MaxMeshOutputPrimitivesEXT 256
|
||||
MaxMeshWorkGroupSizeX_EXT 128
|
||||
MaxMeshWorkGroupSizeY_EXT 128
|
||||
MaxMeshWorkGroupSizeZ_EXT 128
|
||||
MaxTaskWorkGroupSizeX_EXT 128
|
||||
MaxTaskWorkGroupSizeY_EXT 128
|
||||
MaxTaskWorkGroupSizeZ_EXT 128
|
||||
MaxMeshViewCountEXT 4
|
||||
MaxDualSourceDrawBuffersEXT 1
|
||||
"""
|
||||
Reference in New Issue
Block a user