198 lines
8.0 KiB
Python
198 lines
8.0 KiB
Python
# 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 opengl_compat_fragment_shader():
|
|
return """#version 330
|
|
uniform highp sampler2D tex;
|
|
void main() {
|
|
gl_FragColor = texture2D(tex, vec2(0.0, 0.0));
|
|
}"""
|
|
|
|
|
|
def opengl_vertex_shader():
|
|
return """#version 330
|
|
void main() { int t = gl_VertexID; }"""
|
|
|
|
|
|
def vulkan_vertex_shader():
|
|
return """#version 310 es
|
|
void main() { int t = gl_VertexIndex; }"""
|
|
|
|
|
|
def vulkan_compute_subgroup_shader():
|
|
"""Returns a compute shader that requires Vulkan 1.1"""
|
|
return """#version 450
|
|
#extension GL_KHR_shader_subgroup_basic : enable
|
|
void main() { subgroupBarrier(); }"""
|
|
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqOpenglCompatWithOpenGlCompatShader(expect.ErrorMessageSubstr):
|
|
"""Tests that compiling OpenGL Compatibility Fragment shader with
|
|
--target-env=opengl_compat works correctly"""
|
|
shader = FileShader(opengl_compat_fragment_shader(), '.frag')
|
|
glslc_args = ['--target-env=opengl_compat', '-c', shader]
|
|
expected_error_substr = "error: opengl_compat is no longer supported"
|
|
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqOpenglWithOpenGlCompatShader(expect.ErrorMessageSubstr):
|
|
"""Tests the error message of compiling OpenGL Compatibility Fragment shader
|
|
with --target-env=opengl"""
|
|
shader = FileShader(opengl_compat_fragment_shader(), '.frag')
|
|
glslc_args = ['--target-env=opengl', shader]
|
|
# Glslang does not give a pretty message. Make sure we get an error.
|
|
expected_error_substr = "errors generated"
|
|
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqOpenglCompatWithOpenGlVertexShader(expect.ErrorMessageSubstr):
|
|
"""Tests that compiling OpenGL vertex shader with --target-env=opengl_compat
|
|
generates valid SPIR-V code"""
|
|
shader = FileShader(opengl_vertex_shader(), '.vert')
|
|
glslc_args = ['--target-env=opengl_compat', '-c', shader]
|
|
expected_error_substr = "error: opengl_compat is no longer supported"
|
|
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqOpenglWithOpenGlVertexShader(expect.ValidObjectFile):
|
|
"""Tests that compiling OpenGL vertex shader with --target-env=opengl
|
|
generates valid SPIR-V code"""
|
|
shader = FileShader(opengl_vertex_shader(), '.vert')
|
|
glslc_args = ['--target-env=opengl', '-c', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestDefaultTargetEnvWithVulkanShader(expect.ValidObjectFile):
|
|
"""Tests that compiling a Vulkan-specific shader with a default
|
|
target environment succeeds"""
|
|
shader = FileShader(vulkan_vertex_shader(), '.vert')
|
|
glslc_args = ['-c', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqVulkanWithVulkan1_0ShaderSucceeds(expect.ValidObjectFile):
|
|
"""Tests that compiling a Vulkan-specific Vulkan 1.0 shader succeeds with
|
|
--target-env=vulkan"""
|
|
shader = FileShader(vulkan_vertex_shader(), '.vert')
|
|
glslc_args = ['--target-env=vulkan', '-c', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqVulkan1_0WithVulkan1_0ShaderSucceeds(expect.ValidObjectFile):
|
|
"""Tests that compiling a Vulkan-specific Vulkan 1.0 shader succeeds with
|
|
--target-env=vulkan1.0"""
|
|
shader = FileShader(vulkan_vertex_shader(), '.vert')
|
|
glslc_args = ['--target-env=vulkan1.0', '-c', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqVulkan1_0WithVulkan1_1ShaderFails(expect.ErrorMessageSubstr):
|
|
shader = FileShader(vulkan_compute_subgroup_shader(), '.comp')
|
|
glslc_args = ['--target-env=vulkan1.0', '-c', shader]
|
|
expected_error_substr = "error: 'subgroup op' : requires SPIR-V 1.3"
|
|
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqVulkan1_1WithVulkan1_0ShaderSucceeds(expect.ValidObjectFile1_3):
|
|
shader = FileShader(vulkan_vertex_shader(), '.vert')
|
|
glslc_args = ['--target-env=vulkan1.1', '-c', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqVulkan1_1WithVulkan1_1ShaderSucceeds(expect.ValidObjectFile1_3):
|
|
shader = FileShader(vulkan_compute_subgroup_shader(), '.comp')
|
|
glslc_args = ['--target-env=vulkan1.1', '-c', shader]
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqVulkan1_2WithVulkan1_0ShaderSucceeds(expect.ValidObjectFile1_5):
|
|
shader = FileShader(vulkan_vertex_shader(), '.vert')
|
|
glslc_args = ['--target-env=vulkan1.2', '-c', shader]
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqVulkan1_2WithVulkan1_1ShaderSucceeds(expect.ValidObjectFile1_5):
|
|
shader = FileShader(vulkan_compute_subgroup_shader(), '.comp')
|
|
glslc_args = ['--target-env=vulkan1.2', '-c', shader]
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqVulkan1_2WithVulkan1_0ShaderSucceeds(expect.ValidObjectFile1_6):
|
|
shader = FileShader(vulkan_vertex_shader(), '.vert')
|
|
glslc_args = ['--target-env=vulkan1.3', '-c', shader]
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqVulkan1_2WithVulkan1_1ShaderSucceeds(expect.ValidObjectFile1_6):
|
|
shader = FileShader(vulkan_compute_subgroup_shader(), '.comp')
|
|
glslc_args = ['--target-env=vulkan1.3', '-c', shader]
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqOpenGL4_5WithOpenGLShaderSucceeds(expect.ValidObjectFile):
|
|
shader = FileShader(opengl_vertex_shader(), '.vert')
|
|
glslc_args = ['--target-env=opengl4.5', '-c', shader]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqOpenGL4_6WithOpenGLShaderFailsUnsupported(expect.ErrorMessageSubstr):
|
|
shader = FileShader(opengl_vertex_shader(), '.vert')
|
|
glslc_args = ['--target-env=opengl4.6', '-c', shader]
|
|
expected_error_substr = "invalid value 'opengl4.6' in '--target-env=opengl4.6'"
|
|
|
|
|
|
# Note: Negative tests are covered in the libshaderc_util unit tests.
|
|
# For example, that an OpenGL-specific shader should fail to compile
|
|
# for Vulkan, or a Vulkan-specific shader should fail to compile for
|
|
# OpenGL.
|
|
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqNoArg(expect.ErrorMessage):
|
|
"""Tests the error message of assigning empty string to --target-env"""
|
|
shader = FileShader(opengl_vertex_shader(), '.vert')
|
|
glslc_args = ['--target-env=', shader]
|
|
expected_error = ["glslc: error: invalid value ",
|
|
"'' in '--target-env='\n"]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvNoEqNoArg(expect.ErrorMessage):
|
|
"""Tests the error message of using --target-env without equal sign and
|
|
arguments"""
|
|
shader = FileShader(opengl_vertex_shader(), '.vert')
|
|
glslc_args = ['--target-env', shader]
|
|
expected_error = ["glslc: error: unsupported option: ",
|
|
"'--target-env'\n"]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvNoEqWithArg(expect.ErrorMessage):
|
|
"""Tests the error message of using --target-env without equal sign but
|
|
arguments"""
|
|
shader = FileShader(opengl_vertex_shader(), '.vert')
|
|
glslc_args = ['--target-env', 'opengl', shader]
|
|
expected_error = ["glslc: error: unsupported option: ",
|
|
"'--target-env'\n"]
|
|
|
|
|
|
@inside_glslc_testsuite('OptionTargetEnv')
|
|
class TestTargetEnvEqWrongArg(expect.ErrorMessage):
|
|
"""Tests the error message of using --target-env with wrong argument"""
|
|
shader = FileShader(opengl_vertex_shader(), '.vert')
|
|
glslc_args = ['--target-env=wrong_arg', shader]
|
|
expected_error = ["glslc: error: invalid value ",
|
|
"'wrong_arg' in '--target-env=wrong_arg'\n"]
|