1# Copyright 2019 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 16from glslc_test_framework import inside_glslc_testsuite 17from placeholder import FileShader 18 19 20def vulkan_vertex_shader(): 21 return """#version 310 es 22void main() { int t = gl_VertexIndex; }""" 23 24 25def vulkan_compute_subgroup_shader(): 26 """Returns a compute shader that requires Vulkan 1.1 and SPIR-V 1.3""" 27 return """#version 450 28 #extension GL_KHR_shader_subgroup_basic : enable 29 void main() { subgroupBarrier(); }""" 30 31 32@inside_glslc_testsuite('OptionTargetSpv') 33class TestDefaultTargetSpvWithVulkanShader(expect.ValidObjectFile): 34 """Tests that compiling a Vulkan-specific shader with a default 35 target environment succeeds""" 36 shader = FileShader(vulkan_vertex_shader(), '.vert') 37 glslc_args = ['-c', shader] 38 39 40@inside_glslc_testsuite('OptionTargetSpv') 41class TestDefaultTargetSpvWithShaderRequiringSpv1p3Fails(expect.ErrorMessageSubstr): 42 """Tests that compiling a shader requiring SPIR-V 1.3 with default SPIR-V 43 target should fail. 44 """ 45 shader = FileShader(vulkan_compute_subgroup_shader(), '.comp') 46 glslc_args = ['-c', shader] 47 expected_error_substr = ["error: 'subgroup op' : requires SPIR-V 1.3\n"] 48 49 50@inside_glslc_testsuite('OptionTargetSpv') 51class TestTargetSpv1p2WithShaderRequiringSpv1p3Fails(expect.ErrorMessageSubstr): 52 """Tests that compiling a shader requiring SPIR-V 1.3 but targeting 1.2 53 should fail. 54 """ 55 shader = FileShader(vulkan_compute_subgroup_shader(), '.comp') 56 glslc_args = ['--target-spv=spv1.2', '-c', shader] 57 expected_error_substr = ["error: 'subgroup op' : requires SPIR-V 1.3\n"] 58 59 60@inside_glslc_testsuite('OptionTargetSpv') 61class TestTargetSpv1p3(expect.ValidObjectFile1_3): 62 """Tests that compiling to spv1.3 succeeds and generates SPIR-V 1.3 binary.""" 63 shader = FileShader(vulkan_compute_subgroup_shader(), '.comp') 64 glslc_args = ['--target-spv=spv1.3', '-c', shader] 65 66 67@inside_glslc_testsuite('OptionTargetSpv') 68class TestTargetSpv1p4(expect.ValidObjectFile1_4): 69 """Tests that compiling to spv1.4 succeeds and generates SPIR-V 1.4 binary.""" 70 shader = FileShader(vulkan_vertex_shader(), '.vert') 71 glslc_args = ['--target-spv=spv1.4', '-c', shader] 72 73 74@inside_glslc_testsuite('OptionTargetSpv') 75class TestTargetSpv1p5(expect.ValidObjectFile1_5): 76 """Tests that compiling to spv1.5 succeeds and generates SPIR-V 1.5 binary.""" 77 shader = FileShader(vulkan_vertex_shader(), '.vert') 78 glslc_args = ['--target-spv=spv1.5', '-c', shader] 79 80 81### Option parsing error cases 82 83@inside_glslc_testsuite('OptionTargetSpv') 84class TestTargetSpvNoArg(expect.ErrorMessage): 85 """Tests the error message of assigning empty string to --target-spv""" 86 shader = FileShader(vulkan_vertex_shader(), '.vert') 87 glslc_args = ['--target-spv=', shader] 88 expected_error = ["glslc: error: invalid value ", 89 "'' in '--target-spv='\n"] 90 91 92@inside_glslc_testsuite('OptionTargetSpv') 93class TestTargetSpvNoEqNoArg(expect.ErrorMessage): 94 """Tests the error message of using --target-spv without equal sign and 95 arguments""" 96 shader = FileShader(vulkan_vertex_shader(), '.vert') 97 glslc_args = ['--target-spv', shader] 98 expected_error = ["glslc: error: unsupported option: ", 99 "'--target-spv'\n"] 100 101 102@inside_glslc_testsuite('OptionTargetSpv') 103class TestTargetSpvNoEqWithArg(expect.ErrorMessage): 104 """Tests the error message of using --target-spv without equal sign but 105 arguments""" 106 shader = FileShader(vulkan_vertex_shader(), '.vert') 107 glslc_args = ['--target-spv', 'spv1.3', shader] 108 expected_error = ["glslc: error: unsupported option: ", 109 "'--target-spv'\n"] 110 111 112@inside_glslc_testsuite('OptionTargetSpv') 113class TestTargetSpvEqWrongArg(expect.ErrorMessage): 114 """Tests the error message of using --target-spv with wrong argument""" 115 shader = FileShader(vulkan_vertex_shader(), '.vert') 116 glslc_args = ['--target-spv=wrong_arg', shader] 117 expected_error = ["glslc: error: invalid value ", 118 "'wrong_arg' in '--target-spv=wrong_arg'\n"] 119