# 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 assembly_comments(): return """ ; SPIR-V ; Version: 1.0 ; Generator: Google Shaderc over Glslang; 11 ; Bound: 6 ; Schema: 0""" def empty_main_assembly(): return assembly_comments() + """ OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Vertex %4 "main" OpSource ESSL 310 OpName %4 "main" %2 = OpTypeVoid %3 = OpTypeFunction %2 %4 = OpFunction %2 None %3 %5 = OpLabel OpReturn OpFunctionEnd""" def empty_main(): return '#version 310 es\nvoid main() {}' @inside_glslc_testsuite('SpirvAssembly') class TestAssemblyFileAsOnlyParameter(expect.ValidNamedObjectFile): """Tests that glslc accepts a SPIR-V assembly file as the only parameter.""" shader = FileShader(empty_main_assembly(), '.spvasm') glslc_args = [shader] expected_object_filenames = ('a.spv',) @inside_glslc_testsuite('SpirvAssembly') class TestDashCAssemblyFile(expect.ValidObjectFile): """Tests that -c works with SPIR-V assembly file.""" shader = FileShader(empty_main_assembly(), '.spvasm') glslc_args = ['-c', shader] @inside_glslc_testsuite('SpirvAssembly') class TestAssemblyFileWithOnlyComments(expect.ValidObjectFile): """Tests that glslc accepts an assembly file with only comments inside.""" shader = FileShader(assembly_comments(), '.spvasm') glslc_args = ['-c', shader] @inside_glslc_testsuite('SpirvAssembly') class TestEmptyAssemblyFile(expect.ValidObjectFile): """Tests that glslc accepts an empty assembly file.""" shader = FileShader('', '.spvasm') glslc_args = ['-c', shader] @inside_glslc_testsuite('SpirvAssembly') class TestDashEAssemblyFile(expect.SuccessfulReturn, expect.NoGeneratedFiles): """Tests that -E works with SPIR-V assembly file.""" shader = FileShader(empty_main_assembly(), '.spvasm') glslc_args = ['-E', shader] @inside_glslc_testsuite('SpirvAssembly') class TestDashSAssemblyFile(expect.SuccessfulReturn, expect.NoGeneratedFiles): """Tests that -S works with SPIR-V assembly file.""" shader = FileShader(empty_main_assembly(), '.spvasm') glslc_args = ['-S', shader] @inside_glslc_testsuite('SpirvAssembly') class TestMultipleAssemblyFiles(expect.ValidObjectFile): """Tests that glslc accepts multiple SPIR-V assembly files.""" shader1 = FileShader(empty_main_assembly(), '.spvasm') shader2 = FileShader(empty_main_assembly(), '.spvasm') shader3 = FileShader(empty_main_assembly(), '.spvasm') glslc_args = ['-c', shader1, shader2, shader3] @inside_glslc_testsuite('SpirvAssembly') class TestHybridInputFiles(expect.ValidObjectFile): """Tests that glslc accepts a mix of SPIR-V assembly files and GLSL source files.""" shader1 = FileShader(empty_main_assembly(), '.spvasm') shader2 = FileShader(empty_main(), '.vert') shader3 = FileShader(empty_main(), '.frag') glslc_args = ['-c', shader1, shader2, shader3] @inside_glslc_testsuite('SpirvAssembly') class TestShaderStageWithAssemblyFile(expect.ErrorMessage): """Tests that assembly files don't work with -fshader-stage""" shader = FileShader(empty_main_assembly(), '.spvasm') glslc_args = ['-c', '-fshader-stage=vertex', shader] expected_error = [ shader, ": error: #version: Desktop shaders for Vulkan SPIR-V require " "version 140 or higher\n", shader, ":2: error: 'extraneous semicolon' :", " not supported for this version or the enabled extensions\n", shader, ":2: error: '' : syntax error, unexpected IDENTIFIER\n", '3 errors generated.\n'] @inside_glslc_testsuite('SpirvAssembly') class TestStdWithAssemblyFile(expect.ValidObjectFile): """Tests that --std= doesn't affect the processing of assembly files.""" shader = FileShader(empty_main_assembly(), '.spvasm') glslc_args = ['-c', '-std=310es', shader]