# Copyright 2017 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 # An HLSL shader with uniforms without explicit bindings. HLSL_SHADER = """ Buffer t4 : register(t4); Buffer t5 : register(t5); float4 main() : SV_Target0 { return float4(t4.Load(0) + t5.Load(1)); } """ NEED_THREE_ARGS_ERR = "error: Option -fresource-set-binding requires at least 3 arguments" @inside_glslc_testsuite('OptionFRegisterSetBinding') class FRegisterSetBindingForFragRespected(expect.ValidAssemblyFileWithSubstr): """Tests -fresource-set-binding on specific shader two textures""" shader = FileShader(HLSL_SHADER, '.frag') glslc_args = ['-S', '-x', 'hlsl', shader, '-fresource-set-binding', 'frag', 't4', '9', '16', 't5', '17', '18'] expected_assembly_substr = """OpDecorate %t4 DescriptorSet 9 OpDecorate %t4 Binding 16 OpDecorate %t5 DescriptorSet 17 OpDecorate %t5 Binding 18""" @inside_glslc_testsuite('OptionFRegisterSetBinding') class FRegisterSetBindingForFragRespectedJustOneTriple(expect.ValidAssemblyFileWithSubstr): """Tests -fresource-set-binding on specific shader just one texture specified.""" shader = FileShader(HLSL_SHADER, '.frag') glslc_args = ['-S', '-x', 'hlsl', shader, '-fresource-set-binding', 'frag', 't4', '9', '16'] expected_assembly_substr = """OpDecorate %t4 DescriptorSet 9 OpDecorate %t4 Binding 16 OpDecorate %t5 DescriptorSet 0 OpDecorate %t5 Binding 5""" @inside_glslc_testsuite('OptionFRegisterSetBinding') class FRegisterSetBindingForWrongStageIgnored(expect.ValidAssemblyFileWithSubstr): """Tests -fresource-set-binding on wrong shader ignored""" shader = FileShader(HLSL_SHADER, '.frag') glslc_args = ['-S', '-x', 'hlsl', shader, '-fresource-set-binding', 'vert', 't4', '9', '16', 't5', '17', '18'] expected_assembly_substr = """OpDecorate %t4 DescriptorSet 0 OpDecorate %t4 Binding 4 OpDecorate %t5 DescriptorSet 0 OpDecorate %t5 Binding 5""" @inside_glslc_testsuite('OptionFRegisterSetBinding') class FRegisterSetBindingForAllRespected(expect.ValidAssemblyFileWithSubstr): """Tests -fresource-set-binding on all stages respected""" shader = FileShader(HLSL_SHADER, '.frag') glslc_args = ['-S', '-x', 'hlsl', shader, '-fresource-set-binding', 't4', '9', '16', 't5', '17', '18'] expected_assembly_substr = """OpDecorate %t4 DescriptorSet 9 OpDecorate %t4 Binding 16 OpDecorate %t5 DescriptorSet 17 OpDecorate %t5 Binding 18""" @inside_glslc_testsuite('OptionFRegisterSetBinding') class FRegisterSetBindingTooFewArgs(expect.ErrorMessageSubstr): """Tests -fresource-set-binding with too few arguments""" shader = FileShader(HLSL_SHADER, '.frag') glslc_args = ['-S', '-x', 'hlsl', shader, '-fresource-set-binding', 'frag', 't4', '9'] expected_error_substr = NEED_THREE_ARGS_ERR @inside_glslc_testsuite('OptionFRegisterSetBinding') class FRegisterSetBindingInvalidSetNumber(expect.ErrorMessageSubstr): """Tests -fresource-set-binding with inavlid set number""" shader = FileShader(HLSL_SHADER, '.frag') glslc_args = ['-S', '-x', 'hlsl', shader, '-fresource-set-binding', 'frag', 't4', '-9', '16'] expected_error_substr = NEED_THREE_ARGS_ERR @inside_glslc_testsuite('OptionFRegisterSetBinding') class FRegisterSetBindingInvalidBindingNumber(expect.ErrorMessageSubstr): """Tests -fresource-set-binding with inavlid binding number""" shader = FileShader(HLSL_SHADER, '.frag') glslc_args = ['-S', '-x', 'hlsl', shader, '-fresource-set-binding', 'frag', 't4', '9', '-16'] expected_error_substr = NEED_THREE_ARGS_ERR