First Commit
This commit is contained in:
312
3rdparty/shaderc/glslc/test/option_std.py
vendored
Normal file
312
3rdparty/shaderc/glslc/test/option_std.py
vendored
Normal file
@@ -0,0 +1,312 @@
|
||||
# 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
|
||||
from glslc_test_framework import inside_glslc_testsuite
|
||||
from placeholder import FileShader
|
||||
|
||||
|
||||
def core_vert_shader_without_version():
|
||||
# gl_ClipDistance doesn't exist in es profile (at least until 3.10).
|
||||
return 'void main() { gl_ClipDistance[0] = 5.; }'
|
||||
|
||||
|
||||
def core_frag_shader_without_version():
|
||||
# gl_SampleID appears in core profile from 4.00.
|
||||
# gl_sampleID doesn't exsit in es profile (at least until 3.10).
|
||||
return 'void main() { int temp = gl_SampleID; }'
|
||||
|
||||
|
||||
def hlsl_compute_shader_with_barriers():
|
||||
# Use "main" to avoid the need for -fentry-point
|
||||
return 'void main() { AllMemoryBarrierWithGroupSync(); }'
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestStdNoArg(expect.ErrorMessage):
|
||||
"""Tests -std alone."""
|
||||
|
||||
glslc_args = ['-std']
|
||||
expected_error = ["glslc: error: unknown argument: '-std'\n"]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestStdEqNoArg(expect.ErrorMessage):
|
||||
"""Tests -std= with no argument."""
|
||||
|
||||
glslc_args = ['-std=']
|
||||
expected_error = ["glslc: error: invalid value '' in '-std='\n"]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestStdEqSpaceArg(expect.ErrorMessage):
|
||||
"""Tests -std= <version-profile>."""
|
||||
|
||||
shader = FileShader(core_frag_shader_without_version(), '.frag')
|
||||
glslc_args = ['-c', '-std=', '450core', shader]
|
||||
expected_error = ["glslc: error: invalid value '' in '-std='\n"]
|
||||
|
||||
|
||||
# TODO(dneto): The error message changes with different versions of glslang.
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestMissingVersionAndStd(expect.ErrorMessageSubstr):
|
||||
"""Tests that missing both #version and -std results in errors."""
|
||||
|
||||
shader = FileShader(core_frag_shader_without_version(), '.frag')
|
||||
glslc_args = ['-c', shader]
|
||||
expected_error_substr = ['error:']
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestMissingVersionButHavingStd(expect.ValidObjectFile):
|
||||
"""Tests that correct -std fixes missing #version."""
|
||||
|
||||
shader = FileShader(core_frag_shader_without_version(), '.frag')
|
||||
glslc_args = ['-c', '-std=450core', shader]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestGLSL460(expect.ValidObjectFile):
|
||||
"""Tests that GLSL version 4.6 is supported."""
|
||||
|
||||
shader = FileShader(core_frag_shader_without_version(), '.frag')
|
||||
glslc_args = ['-c', '-std=460', shader]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestGLSL460Core(expect.ValidObjectFile):
|
||||
"""Tests that GLSL version 4.6 core profile is supported."""
|
||||
|
||||
shader = FileShader(core_frag_shader_without_version(), '.frag')
|
||||
glslc_args = ['-c', '-std=460core', shader]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestESSL320(expect.ValidObjectFile):
|
||||
"""Tests that ESSL version 3.2 is supported."""
|
||||
|
||||
shader = FileShader(core_frag_shader_without_version(), '.frag')
|
||||
glslc_args = ['-c', '-std=320es', shader]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestStdIgnoredInHlsl(expect.ValidObjectFile):
|
||||
"""Tests HLSL compilation ignores -std."""
|
||||
|
||||
# Compute shaders are not available in OpenGL 150
|
||||
shader = FileShader(hlsl_compute_shader_with_barriers(), '.comp')
|
||||
glslc_args = ['-c', '-x', 'hlsl', '-std=150', shader]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestMissingVersionAndWrongStd(expect.ErrorMessage):
|
||||
"""Tests missing #version and wrong -std results in errors."""
|
||||
|
||||
shader = FileShader(core_frag_shader_without_version(), '.frag')
|
||||
glslc_args = ['-c', '-std=310es', shader]
|
||||
expected_error = [
|
||||
shader, ":1: error: 'gl_SampleID' : required extension not requested: "
|
||||
'GL_OES_sample_variables\n1 error generated.\n']
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestConflictingVersionAndStd(expect.ValidObjectFileWithWarning):
|
||||
"""Tests that with both #version and -std, -std takes precedence."""
|
||||
|
||||
# Wrong #version here on purpose.
|
||||
shader = FileShader(
|
||||
'#version 310 es\n' + core_frag_shader_without_version(), '.frag')
|
||||
# -std overwrites the wrong #version.
|
||||
glslc_args = ['-c', '-std=450core', shader]
|
||||
|
||||
expected_warning = [
|
||||
shader, ': warning: (version, profile) forced to be (450, core), while '
|
||||
'in source code it is (310, es)\n1 warning generated.\n']
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestMultipleStd(expect.ValidObjectFile):
|
||||
"""Tests that for multiple -std, the last one takes effect."""
|
||||
|
||||
shader = FileShader(core_frag_shader_without_version(), '.frag')
|
||||
glslc_args = ['-c', '-std=100', '-std=310es', shader, '-std=450core']
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestMultipleFiles(expect.ValidObjectFileWithWarning):
|
||||
"""Tests that -std covers all files."""
|
||||
|
||||
shader1 = FileShader(core_frag_shader_without_version(), '.frag')
|
||||
shader2 = FileShader(core_vert_shader_without_version(), '.vert')
|
||||
shader3 = FileShader(
|
||||
'#version 310 es\n' + core_frag_shader_without_version(), '.frag')
|
||||
glslc_args = ['-c', '-std=450core', shader1, shader2, shader3]
|
||||
|
||||
expected_warning = [
|
||||
shader3, ': warning: (version, profile) forced to be (450, '
|
||||
'core), while in source code it is (310, es)\n'
|
||||
'1 warning generated.\n']
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestUnkownProfile(expect.ErrorMessage):
|
||||
"""Tests that -std rejects unknown profile."""
|
||||
|
||||
shader = FileShader(core_frag_shader_without_version(), '.frag')
|
||||
glslc_args = ['-c', '-std=450google', shader]
|
||||
expected_error = [
|
||||
"glslc: error: invalid value '450google' in '-std=450google'\n"]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestUnkownVersion(expect.ErrorMessage):
|
||||
"""Tests that -std rejects unknown version."""
|
||||
|
||||
shader = FileShader(core_frag_shader_without_version(), '.frag')
|
||||
glslc_args = ['-c', '-std=42core', shader]
|
||||
expected_error = [
|
||||
"glslc: error: invalid value '42core' in '-std=42core'\n"]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestTotallyWrongStdValue(expect.ErrorMessage):
|
||||
"""Tests that -std rejects totally wrong -std value."""
|
||||
|
||||
shader = FileShader(core_vert_shader_without_version(), '.vert')
|
||||
glslc_args = ['-c', '-std=wrong42', shader]
|
||||
|
||||
expected_error = [
|
||||
"glslc: error: invalid value 'wrong42' in '-std=wrong42'\n"]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestVersionInsideSlashSlashComment(expect.ValidObjectFileWithWarning):
|
||||
"""Tests that -std substitutes the correct #version string."""
|
||||
|
||||
# The second #version string should be substituted and this shader
|
||||
# should compile successfully with -std=450core.
|
||||
shader = FileShader(
|
||||
'// #version 310 es\n#version 310 es\n' +
|
||||
core_vert_shader_without_version(), '.vert')
|
||||
glslc_args = ['-c', '-std=450core', shader]
|
||||
|
||||
expected_warning = [
|
||||
shader, ': warning: (version, profile) forced to be (450, core), while '
|
||||
'in source code it is (310, es)\n1 warning generated.\n']
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestVersionInsideSlashStarComment(expect.ValidObjectFileWithWarning):
|
||||
"""Tests that -std substitutes the correct #version string."""
|
||||
|
||||
# The second #version string should be substituted and this shader
|
||||
# should compile successfully with -std=450core.
|
||||
shader = FileShader(
|
||||
'/* #version 310 es */\n#version 310 es\n' +
|
||||
core_vert_shader_without_version(), '.vert')
|
||||
glslc_args = ['-c', '-std=450core', shader]
|
||||
|
||||
expected_warning = [
|
||||
shader, ': warning: (version, profile) forced to be (450, core), while '
|
||||
'in source code it is (310, es)\n1 warning generated.\n']
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestCommentBeforeVersion(expect.ValidObjectFileWithWarning):
|
||||
"""Tests that comments before #version (same line) is correctly handled."""
|
||||
|
||||
shader = FileShader(
|
||||
'/* some comment */ #version 150\n' +
|
||||
core_vert_shader_without_version(), '.vert')
|
||||
glslc_args = ['-c', '-std=450', shader]
|
||||
|
||||
expected_warning = [
|
||||
shader, ': warning: (version, profile) forced to be (450, none), while '
|
||||
'in source code it is (150, none)\n1 warning generated.\n']
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestCommentAfterVersion(expect.ValidObjectFileWithWarning):
|
||||
"""Tests that multiple-line comments after #version is correctly handled."""
|
||||
|
||||
shader = FileShader(
|
||||
'#version 150 compatibility ' +
|
||||
'/* start \n second line \n end */\n' +
|
||||
core_vert_shader_without_version(), '.vert')
|
||||
glslc_args = ['-c', '-std=450core', shader]
|
||||
|
||||
expected_warning = [
|
||||
shader, ': warning: (version, profile) forced to be (450, core), while '
|
||||
'in source code it is (150, compatibility)\n1 warning generated.\n']
|
||||
|
||||
|
||||
# The following test case is disabled because of a bug in glslang.
|
||||
# When checking non-newline whitespaces, glslang only recognizes
|
||||
# ' ' and '\t', leaving '\v' and '\f' unhandled. The following test
|
||||
# case exposes this problem. It should be turned on once a fix for
|
||||
# glslang is landed.
|
||||
#@inside_glslc_testsuite('OptionStd')
|
||||
class TestSpaceAroundVersion(expect.ValidObjectFileWithWarning):
|
||||
"""Tests that space around #version is correctly handled."""
|
||||
|
||||
shader = FileShader(
|
||||
'\t \t # \t \f\f version \v \t\t 310 \v\v \t es \n' +
|
||||
core_vert_shader_without_version(), '.vert')
|
||||
glslc_args = ['-c', '-std=450core', shader]
|
||||
|
||||
expected_warning = [
|
||||
shader, ': warning: (version, profile) forced to be (450, core), while '
|
||||
'in source code it is (310, es)\n1 warning generated.\n']
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestVersionInsideCrazyComment(expect.ValidObjectFileWithWarning):
|
||||
"""Tests that -std substitutes the correct #version string."""
|
||||
|
||||
# The fourth #version string should be substituted and this shader
|
||||
# should compile successfully with -std=450core.
|
||||
shader = FileShader(
|
||||
'/* */ /* // /* #version 310 es */\n' + # /*-style comment
|
||||
'// /* */ /* /* // #version 310 es\n' + # //-style comment
|
||||
'///*////*//*/*/ #version 310 es*/\n' + # //-style comment
|
||||
'#version 310 es\n' + core_vert_shader_without_version(), '.vert')
|
||||
glslc_args = ['-c', '-std=450core', shader]
|
||||
|
||||
expected_warning = [
|
||||
shader, ': warning: (version, profile) forced to be (450, core), while '
|
||||
'in source code it is (310, es)\n1 warning generated.\n']
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestVersionMissingProfile(expect.ErrorMessage):
|
||||
"""Tests that missing required profile in -std results in an error."""
|
||||
|
||||
shader = FileShader('#version 140\nvoid main() {}', '.vert')
|
||||
glslc_args = ['-c', '-std=310', shader]
|
||||
|
||||
expected_error = [
|
||||
shader, ': error: #version: versions 300, 310, and 320 require ',
|
||||
"specifying the 'es' profile\n1 error generated.\n"]
|
||||
|
||||
|
||||
@inside_glslc_testsuite('OptionStd')
|
||||
class TestVersionRedundantProfile(expect.ErrorMessageSubstr):
|
||||
"""Tests that adding non-required profile in -std results in an error."""
|
||||
|
||||
shader = FileShader('#version 140\nvoid main() {}', '.vert')
|
||||
glslc_args = ['-c', '-std=100core', shader]
|
||||
|
||||
expected_error_substr = [
|
||||
shader, ': error: #version: versions before 150 do not allow '
|
||||
'a profile token\n']
|
||||
Reference in New Issue
Block a user