Path: blob/main/glslc/test/option_target_env.py
1560 views
# Copyright 2015 The Shaderc Authors. All rights reserved.1#2# Licensed under the Apache License, Version 2.0 (the "License");3# you may not use this file except in compliance with the License.4# You may obtain a copy of the License at5#6# http://www.apache.org/licenses/LICENSE-2.07#8# Unless required by applicable law or agreed to in writing, software9# distributed under the License is distributed on an "AS IS" BASIS,10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.11# See the License for the specific language governing permissions and12# limitations under the License.1314import expect15from glslc_test_framework import inside_glslc_testsuite16from placeholder import FileShader171819def opengl_compat_fragment_shader():20return """#version 33021uniform highp sampler2D tex;22void main() {23gl_FragColor = texture2D(tex, vec2(0.0, 0.0));24}"""252627def opengl_vertex_shader():28return """#version 33029void main() { int t = gl_VertexID; }"""303132def vulkan_vertex_shader():33return """#version 310 es34void main() { int t = gl_VertexIndex; }"""353637def vulkan_compute_subgroup_shader():38"""Returns a compute shader that requires Vulkan 1.1"""39return """#version 45040#extension GL_KHR_shader_subgroup_basic : enable41void main() { subgroupBarrier(); }"""424344@inside_glslc_testsuite('OptionTargetEnv')45class TestTargetEnvEqOpenglCompatWithOpenGlCompatShader(expect.ErrorMessageSubstr):46"""Tests that compiling OpenGL Compatibility Fragment shader with47--target-env=opengl_compat works correctly"""48shader = FileShader(opengl_compat_fragment_shader(), '.frag')49glslc_args = ['--target-env=opengl_compat', '-c', shader]50expected_error_substr = "error: opengl_compat is no longer supported"515253@inside_glslc_testsuite('OptionTargetEnv')54class TestTargetEnvEqOpenglWithOpenGlCompatShader(expect.ErrorMessageSubstr):55"""Tests the error message of compiling OpenGL Compatibility Fragment shader56with --target-env=opengl"""57shader = FileShader(opengl_compat_fragment_shader(), '.frag')58glslc_args = ['--target-env=opengl', shader]59# Glslang does not give a pretty message. Make sure we get an error.60expected_error_substr = "errors generated"616263@inside_glslc_testsuite('OptionTargetEnv')64class TestTargetEnvEqOpenglCompatWithOpenGlVertexShader(expect.ErrorMessageSubstr):65"""Tests that compiling OpenGL vertex shader with --target-env=opengl_compat66generates valid SPIR-V code"""67shader = FileShader(opengl_vertex_shader(), '.vert')68glslc_args = ['--target-env=opengl_compat', '-c', shader]69expected_error_substr = "error: opengl_compat is no longer supported"707172@inside_glslc_testsuite('OptionTargetEnv')73class TestTargetEnvEqOpenglWithOpenGlVertexShader(expect.ValidObjectFile):74"""Tests that compiling OpenGL vertex shader with --target-env=opengl75generates valid SPIR-V code"""76shader = FileShader(opengl_vertex_shader(), '.vert')77glslc_args = ['--target-env=opengl', '-c', shader]787980@inside_glslc_testsuite('OptionTargetEnv')81class TestDefaultTargetEnvWithVulkanShader(expect.ValidObjectFile):82"""Tests that compiling a Vulkan-specific shader with a default83target environment succeeds"""84shader = FileShader(vulkan_vertex_shader(), '.vert')85glslc_args = ['-c', shader]868788@inside_glslc_testsuite('OptionTargetEnv')89class TestTargetEnvEqVulkanWithVulkan1_0ShaderSucceeds(expect.ValidObjectFile):90"""Tests that compiling a Vulkan-specific Vulkan 1.0 shader succeeds with91--target-env=vulkan"""92shader = FileShader(vulkan_vertex_shader(), '.vert')93glslc_args = ['--target-env=vulkan', '-c', shader]949596@inside_glslc_testsuite('OptionTargetEnv')97class TestTargetEnvEqVulkan1_0WithVulkan1_0ShaderSucceeds(expect.ValidObjectFile):98"""Tests that compiling a Vulkan-specific Vulkan 1.0 shader succeeds with99--target-env=vulkan1.0"""100shader = FileShader(vulkan_vertex_shader(), '.vert')101glslc_args = ['--target-env=vulkan1.0', '-c', shader]102103104@inside_glslc_testsuite('OptionTargetEnv')105class TestTargetEnvEqVulkan1_0WithVulkan1_1ShaderFails(expect.ErrorMessageSubstr):106shader = FileShader(vulkan_compute_subgroup_shader(), '.comp')107glslc_args = ['--target-env=vulkan1.0', '-c', shader]108expected_error_substr = "error: 'subgroup op' : requires SPIR-V 1.3"109110111@inside_glslc_testsuite('OptionTargetEnv')112class TestTargetEnvEqVulkan1_1WithVulkan1_0ShaderSucceeds(expect.ValidObjectFile1_3):113shader = FileShader(vulkan_vertex_shader(), '.vert')114glslc_args = ['--target-env=vulkan1.1', '-c', shader]115116117@inside_glslc_testsuite('OptionTargetEnv')118class TestTargetEnvEqVulkan1_1WithVulkan1_1ShaderSucceeds(expect.ValidObjectFile1_3):119shader = FileShader(vulkan_compute_subgroup_shader(), '.comp')120glslc_args = ['--target-env=vulkan1.1', '-c', shader]121122@inside_glslc_testsuite('OptionTargetEnv')123class TestTargetEnvEqVulkan1_2WithVulkan1_0ShaderSucceeds(expect.ValidObjectFile1_5):124shader = FileShader(vulkan_vertex_shader(), '.vert')125glslc_args = ['--target-env=vulkan1.2', '-c', shader]126127@inside_glslc_testsuite('OptionTargetEnv')128class TestTargetEnvEqVulkan1_2WithVulkan1_1ShaderSucceeds(expect.ValidObjectFile1_5):129shader = FileShader(vulkan_compute_subgroup_shader(), '.comp')130glslc_args = ['--target-env=vulkan1.2', '-c', shader]131132@inside_glslc_testsuite('OptionTargetEnv')133class TestTargetEnvEqVulkan1_2WithVulkan1_0ShaderSucceeds(expect.ValidObjectFile1_6):134shader = FileShader(vulkan_vertex_shader(), '.vert')135glslc_args = ['--target-env=vulkan1.3', '-c', shader]136137@inside_glslc_testsuite('OptionTargetEnv')138class TestTargetEnvEqVulkan1_2WithVulkan1_1ShaderSucceeds(expect.ValidObjectFile1_6):139shader = FileShader(vulkan_compute_subgroup_shader(), '.comp')140glslc_args = ['--target-env=vulkan1.3', '-c', shader]141142@inside_glslc_testsuite('OptionTargetEnv')143class TestTargetEnvEqOpenGL4_5WithOpenGLShaderSucceeds(expect.ValidObjectFile):144shader = FileShader(opengl_vertex_shader(), '.vert')145glslc_args = ['--target-env=opengl4.5', '-c', shader]146147148@inside_glslc_testsuite('OptionTargetEnv')149class TestTargetEnvEqOpenGL4_6WithOpenGLShaderFailsUnsupported(expect.ErrorMessageSubstr):150shader = FileShader(opengl_vertex_shader(), '.vert')151glslc_args = ['--target-env=opengl4.6', '-c', shader]152expected_error_substr = "invalid value 'opengl4.6' in '--target-env=opengl4.6'"153154155# Note: Negative tests are covered in the libshaderc_util unit tests.156# For example, that an OpenGL-specific shader should fail to compile157# for Vulkan, or a Vulkan-specific shader should fail to compile for158# OpenGL.159160161@inside_glslc_testsuite('OptionTargetEnv')162class TestTargetEnvEqNoArg(expect.ErrorMessage):163"""Tests the error message of assigning empty string to --target-env"""164shader = FileShader(opengl_vertex_shader(), '.vert')165glslc_args = ['--target-env=', shader]166expected_error = ["glslc: error: invalid value ",167"'' in '--target-env='\n"]168169170@inside_glslc_testsuite('OptionTargetEnv')171class TestTargetEnvNoEqNoArg(expect.ErrorMessage):172"""Tests the error message of using --target-env without equal sign and173arguments"""174shader = FileShader(opengl_vertex_shader(), '.vert')175glslc_args = ['--target-env', shader]176expected_error = ["glslc: error: unsupported option: ",177"'--target-env'\n"]178179180@inside_glslc_testsuite('OptionTargetEnv')181class TestTargetEnvNoEqWithArg(expect.ErrorMessage):182"""Tests the error message of using --target-env without equal sign but183arguments"""184shader = FileShader(opengl_vertex_shader(), '.vert')185glslc_args = ['--target-env', 'opengl', shader]186expected_error = ["glslc: error: unsupported option: ",187"'--target-env'\n"]188189190@inside_glslc_testsuite('OptionTargetEnv')191class TestTargetEnvEqWrongArg(expect.ErrorMessage):192"""Tests the error message of using --target-env with wrong argument"""193shader = FileShader(opengl_vertex_shader(), '.vert')194glslc_args = ['--target-env=wrong_arg', shader]195expected_error = ["glslc: error: invalid value ",196"'wrong_arg' in '--target-env=wrong_arg'\n"]197198199