Path: blob/main/glslc/test/option_fauto_bind_uniforms.py
1560 views
# Copyright 2017 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 FileShader1718# A GLSL shader with uniforms without explicit bindings.19GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS = """#version 45020#extension GL_ARB_sparse_texture2 : enable21uniform texture2D my_tex;22uniform sampler my_sam;23layout(rgba32f) uniform image2D my_img;24layout(rgba32f) uniform imageBuffer my_imbuf;25uniform block { float x; float y; } my_ubo;26buffer B { float z; } my_ssbo;27void main() {28texture(sampler2D(my_tex,my_sam),vec2(1.0));29vec4 t;30sparseImageLoadARB(my_img,ivec2(0),t);31imageLoad(my_imbuf,42);32float x = my_ubo.x;33my_ssbo.z = 1.1;34}"""353637# An HLSL shader with uniforms without explicit bindings.38# The counter buffer has an associated counter that needs a39# binding. Compile this shader with --auto-bind-uniforms to40# give it a binding, since Glslang does not support attribute41# [[vk::counter_binding(N))]].42# See https://github.com/KhronosGroup/glslang/issues/161643HLSL_SHADER_WITHOUT_BINDINGS = """44SamplerState s1 : register(s1);45SamplerComparisonState s2 : register(s2);4647Texture1D t1 : register(t11);48Texture2D <float4> t2 : register(t12);49Texture3D <float2> t3 : register(t13);50StructuredBuffer<float4> t4 : register(t14);51ByteAddressBuffer t5 : register(t15);52Buffer<float4> t6 : register(t16);5354RWTexture1D <float4> u1 : register(u21);55RWTexture1D <float4> u2 : register(u22);56RWTexture1D <float4> u3 : register(u23);57RWBuffer <float4> u4 : register(u24);58RWByteAddressBuffer u5 : register(u25);59RWStructuredBuffer<float> u6 : register(u26);60AppendStructuredBuffer<float> u7 : register(u27);61ConsumeStructuredBuffer<float> u8 : register(u28);6263float4 main() : SV_Target0 {64s1;65s2;6667t1;68t2;69t3;70t4[2];71t5.Load(8);72t6;7374u1;75u2;76u3;77u4[1];78u5.Load(15);79u6[2];80u7;81u8;82return float4(u8.Consume() + t2.SampleCmp(s2, 1.0, 2.0)) + t1.Sample(s1, 1.0)83+ t6.Load(1);84}85"""8687@inside_glslc_testsuite('OptionFAutoBindUniforms')88class UniformBindingsNotCreatedByDefault(expect.ErrorMessageSubstr):89"""Tests that compilation fails when uniforms have no binding."""9091shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')92glslc_args = ['-S', shader]93expected_error_substr = "sampler/texture/image requires layout(binding=X)"949596@inside_glslc_testsuite('OptionFAutoBindUniforms')97class FAutoBindingUniformsGeneratesBindings(expect.ValidAssemblyFileWithSubstr):98"""Tests that the compiler generates bindings for uniforms upon request ."""99100shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')101glslc_args = ['-S', shader, '-fauto-bind-uniforms']102# Sufficient to just check one of the uniforms.103expected_assembly_substr = "OpDecorate %my_sam Binding 1"104105106@inside_glslc_testsuite('OptionFAutoBindUniforms')107class FImageBindingBaseOptionRespectedOnImage(expect.ValidAssemblyFileWithSubstr):108"""Tests that -fimage-binding-base value is respected on images."""109110shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')111glslc_args = ['-S', shader, '-fauto-bind-uniforms', '-fimage-binding-base', '44']112expected_assembly_substr = "OpDecorate %my_img Binding 44"113114115@inside_glslc_testsuite('OptionFAutoBindUniforms')116class FImageBindingBaseOptionRespectedOnImageBuffer(expect.ValidAssemblyFileWithSubstr):117"""Tests that -fimage-binding-base value is respected on image buffers."""118119shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')120glslc_args = ['-S', shader, '-fauto-bind-uniforms', '-fimage-binding-base', '44']121expected_assembly_substr = "OpDecorate %my_imbuf Binding 45"122123124@inside_glslc_testsuite('OptionFAutoBindUniforms')125class FTextureBindingBaseOptionRespected(expect.ValidAssemblyFileWithSubstr):126"""Tests that -ftexture-binding-base value is respected."""127128shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')129glslc_args = ['-S', shader, '-fauto-bind-uniforms', '-ftexture-binding-base', '44']130expected_assembly_substr = "OpDecorate %my_tex Binding 44"131132133@inside_glslc_testsuite('OptionFAutoBindUniforms')134class FSamplerBindingBaseOptionRespected(expect.ValidAssemblyFileWithSubstr):135"""Tests that -fsampler-binding-base value is respected."""136137shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')138glslc_args = ['-S', shader, '-fauto-bind-uniforms', '-fsampler-binding-base', '44']139expected_assembly_substr = "OpDecorate %my_sam Binding 44"140141142@inside_glslc_testsuite('OptionFAutoBindUniforms')143class FUboBindingBaseOptionRespectedOnBuffer(expect.ValidAssemblyFileWithSubstr):144"""Tests that -fubo-binding-base value is respected."""145146shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')147glslc_args = ['-S', shader, '-fauto-bind-uniforms', '-fubo-binding-base', '44']148expected_assembly_substr = "OpDecorate %my_ubo Binding 44"149150151@inside_glslc_testsuite('OptionFAutoBindUniforms')152class FCbufferBindingBaseOptionRespectedOnBuffer(expect.ValidAssemblyFileWithSubstr):153"""Tests that -fcbuffer-binding-base value is respected."""154155shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')156glslc_args = ['-S', shader, '-fauto-bind-uniforms', '-fcbuffer-binding-base', '44']157expected_assembly_substr = "OpDecorate %my_ubo Binding 44"158159160@inside_glslc_testsuite('OptionFAutoBindUniforms')161class FImageBindingBaseNeedsValue(expect.ErrorMessageSubstr):162"""Tests that -fimage-binding-base requires a value."""163164shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')165glslc_args = ['-S', shader, '-fimage-binding-base']166expected_error_substr = "error: Option -fimage-binding-base requires at least one argument"167168169@inside_glslc_testsuite('OptionFAutoBindUniforms')170class FTextureBindingBaseNeedsValue(expect.ErrorMessageSubstr):171"""Tests that -ftexture-binding-base requires a value."""172173shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')174glslc_args = ['-S', shader, '-ftexture-binding-base']175expected_error_substr = "error: Option -ftexture-binding-base requires at least one argument"176177178@inside_glslc_testsuite('OptionFAutoBindUniforms')179class FSamplerBindingBaseNeedsValue(expect.ErrorMessageSubstr):180"""Tests that -fsampler-binding-base requires a value."""181182shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')183glslc_args = ['-S', shader, '-fsampler-binding-base']184expected_error_substr = "error: Option -fsampler-binding-base requires at least one argument"185186187@inside_glslc_testsuite('OptionFAutoBindUniforms')188class FUboBindingBaseNeedsValue(expect.ErrorMessageSubstr):189"""Tests that -fubo-binding-base requires a value."""190191shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')192glslc_args = ['-S', shader, '-fubo-binding-base']193expected_error_substr = "error: Option -fubo-binding-base requires at least one argument"194195196@inside_glslc_testsuite('OptionFAutoBindUniforms')197class FImageBindingBaseNeedsNumberValueIfNotStage(expect.ErrorMessageSubstr):198"""Tests that -fimage-binding-base requires a number value."""199200shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')201glslc_args = ['-S', shader, '-fimage-binding-base', '9x']202expected_error_substr = "error: invalid offset value 9x for -fimage-binding-base"203204205@inside_glslc_testsuite('OptionFAutoBindUniforms')206class FTextureBindingBaseNeedsNumberValue(expect.ErrorMessageSubstr):207"""Tests that -ftexture-binding-base requires a number value."""208209shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')210glslc_args = ['-S', shader, '-ftexture-binding-base', '9x']211expected_error_substr = "error: invalid offset value 9x for -ftexture-binding-base"212213214@inside_glslc_testsuite('OptionFAutoBindUniforms')215class FSamplerBindingBaseNeedsNumberValue(expect.ErrorMessageSubstr):216"""Tests that -fsampler-binding-base requires a number value."""217218shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')219glslc_args = ['-S', shader, '-fsampler-binding-base', '9x']220expected_error_substr = "error: invalid offset value 9x for -fsampler-binding-base"221222223@inside_glslc_testsuite('OptionFAutoBindUniforms')224class FUboBindingBaseNeedsNumberValue(expect.ErrorMessageSubstr):225"""Tests that -fubo-binding-base requires a number value."""226227shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')228glslc_args = ['-S', shader, '-fubo-binding-base', '9x']229expected_error_substr = "error: invalid offset value 9x for -fubo-binding-base"230231232@inside_glslc_testsuite('OptionFAutoBindUniforms')233class FImageBindingBaseNeedsUnsignedNumberValue(expect.ErrorMessageSubstr):234"""Tests that -fimage-binding-base requires an unsigned number value."""235236shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')237glslc_args = ['-S', shader, '-fimage-binding-base', '-6']238expected_error_substr = "error: invalid offset value -6 for -fimage-binding-base"239240241@inside_glslc_testsuite('OptionFAutoBindUniforms')242class FTextureBindingBaseNeedsUnsignedNumberValue(expect.ErrorMessageSubstr):243"""Tests that -ftexture-binding-base requires an unsigned number value."""244245shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')246glslc_args = ['-S', shader, '-ftexture-binding-base', '-6']247expected_error_substr = "error: invalid offset value -6 for -ftexture-binding-base"248249250@inside_glslc_testsuite('OptionFAutoBindUniforms')251class FSamplerBindingBaseNeedsUnsignedNumberValue(expect.ErrorMessageSubstr):252"""Tests that -fsampler-binding-base requires an unsigned value."""253254shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')255glslc_args = ['-S', shader, '-fsampler-binding-base', '-6']256expected_error_substr = "error: invalid offset value -6 for -fsampler-binding-base"257258259@inside_glslc_testsuite('OptionFAutoBindUniforms')260class FUboBindingBaseNeedsUnsignedNumberValue(expect.ErrorMessageSubstr):261"""Tests that -fubo-binding-base requires an unsigned value."""262263shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')264glslc_args = ['-S', shader, '-fubo-binding-base', '-6']265expected_error_substr = "error: invalid offset value -6 for -fubo-binding-base"266267268@inside_glslc_testsuite('OptionFAutoBindUniforms')269class FImageBindingBaseForVertOptionRespectedOnImageCompileAsVert(expect.ValidAssemblyFileWithSubstr):270"""Tests that -fimage-binding-base with vert stage value is respected on images."""271272shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')273glslc_args = ['-S', shader, '-fauto-bind-uniforms', '-fimage-binding-base', 'vert', '44']274expected_assembly_substr = "OpDecorate %my_img Binding 44"275276277@inside_glslc_testsuite('OptionFAutoBindUniforms')278class FImageBindingBaseForVertOptionIgnoredOnImageCompileAsFrag(expect.ValidAssemblyFileWithSubstr):279"""Tests that -fimage-binding-base with vert stage value is ignored when cmopiled as280fragment."""281282shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.frag')283glslc_args = ['-S', shader, '-fauto-bind-uniforms', '-fimage-binding-base', 'vert', '44']284expected_assembly_substr = "OpDecorate %my_img Binding 2"285286287@inside_glslc_testsuite('OptionFAutoBindUniforms')288class FImageBindingBaseForFragOptionRespectedOnImageCompileAsFrag(expect.ValidAssemblyFileWithSubstr):289"""Tests that -fimage-binding-base with frag stage value is respected on images."""290291shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.frag')292glslc_args = ['-S', shader, '-fauto-bind-uniforms', '-fimage-binding-base', 'frag', '44']293expected_assembly_substr = "OpDecorate %my_img Binding 44"294295296@inside_glslc_testsuite('OptionFAutoBindUniforms')297class FSsboBindingBaseRespectedOnSsboCompileAsFrag(expect.ValidAssemblyFileWithSubstr):298"""Tests that -fssbo-binding-base with frag stage value is respected on SSBOs."""299300shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.frag')301glslc_args = ['-S', shader, '-fauto-bind-uniforms', '-fssbo-binding-base', '100']302expected_assembly_substr = "OpDecorate %my_ssbo Binding 100"303304305@inside_glslc_testsuite('OptionFAutoBindUniforms')306class FSsboBindingBaseForFragOptionRespectedOnSsboCompileAsFrag(expect.ValidAssemblyFileWithSubstr):307"""Tests that -fssbo-binding-base with frag stage value is respected on SSBOs."""308309shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.frag')310glslc_args = ['-S', shader, '-fauto-bind-uniforms', '-fssbo-binding-base', 'frag', '100']311expected_assembly_substr = "OpDecorate %my_ssbo Binding 100"312313314@inside_glslc_testsuite('OptionFAutoBindUniforms')315class FSsboBindingBaseForFragOptionIgnoredOnSsboCompileAsVert(expect.ValidAssemblyFileWithSubstr):316"""Tests that -fssbo-binding-base with frag stage value is ignored on SSBOs317when compiling as a vertex shader."""318319shader = FileShader(GLSL_SHADER_WITH_UNIFORMS_WITHOUT_BINDINGS, '.vert')320glslc_args = ['-S', shader, '-fauto-bind-uniforms', '-fssbo-binding-base', 'frag', '100']321expected_assembly_substr = "OpDecorate %my_ssbo Binding 5"322323324@inside_glslc_testsuite('OptionFAutoBindUniforms')325class AutomaticHlslIoMapping(expect.ValidAssemblyFileWithSubstr):326"""Tests that HLSL IO Mapping uses the register values in the source code."""327328shader = FileShader(HLSL_SHADER_WITHOUT_BINDINGS, '.frag')329glslc_args = ['-S', '-x', 'hlsl', '-fhlsl-iomap',330'-fauto-bind-uniforms', shader]331expected_assembly_substr = "OpDecorate %u8 Binding 28"332333334@inside_glslc_testsuite('OptionFAutoBindUniforms')335class HlslFSamplerBindingBaseOptionRespected(expect.ValidAssemblyFileWithSubstr):336"""Tests that -fsampler-binding-base sets binding base for samplers in HLSL337compilation."""338339shader = FileShader(HLSL_SHADER_WITHOUT_BINDINGS, '.frag')340glslc_args = ['-S', '-x', 'hlsl', '-fhlsl-iomap', shader,341'-fauto-bind-uniforms', '-fsampler-binding-base', '100']342expected_assembly_substr = "OpDecorate %s2 Binding 102"343344345@inside_glslc_testsuite('OptionFAutoBindUniforms')346class HlslFSamplerBindingBaseForFragOptionRespected(expect.ValidAssemblyFileWithSubstr):347"""Tests that -fsampler-binding-base for frag sets binding base for samplers348in HLSL compilation."""349350shader = FileShader(HLSL_SHADER_WITHOUT_BINDINGS, '.frag')351glslc_args = ['-S', '-x', 'hlsl', '-fhlsl-iomap', shader,352'-fauto-bind-uniforms', '-fsampler-binding-base', 'frag', '100']353expected_assembly_substr = "OpDecorate %s2 Binding 102"354355356@inside_glslc_testsuite('OptionFAutoBindUniforms')357class HlslFSamplerBindingBaseForComputeOptionIgnoredWhenCompilingAsFrag(expect.ValidAssemblyFileWithSubstr):358"""Tests that -fsampler-binding-base for compute is ignored when compiling359as a fragment shader."""360361shader = FileShader(HLSL_SHADER_WITHOUT_BINDINGS, '.frag')362glslc_args = ['-S', '-x', 'hlsl', '-fhlsl-iomap', shader,363'-fauto-bind-uniforms', '-fsampler-binding-base', 'compute', '100']364expected_assembly_substr = "OpDecorate %s2 Binding 2"365366367@inside_glslc_testsuite('OptionFAutoBindUniforms')368class HlslFTextureBindingBaseOptionRespected(expect.ValidAssemblyFileWithSubstr):369"""Tests that -ftexture-binding-base sets binding base for textures in HLSL370compilation."""371372shader = FileShader(HLSL_SHADER_WITHOUT_BINDINGS, '.frag')373glslc_args = ['-S', '-x', 'hlsl', '-fhlsl-iomap', shader,374'-fauto-bind-uniforms', '-ftexture-binding-base', '100']375expected_assembly_substr = "OpDecorate %t6 Binding 116"376377378@inside_glslc_testsuite('OptionFAutoBindUniforms')379class HlslFTextureBindingBaseForFragOptionRespected(expect.ValidAssemblyFileWithSubstr):380"""Tests that -ftexture-binding-base for frag sets binding base for textures381in HLSL compilation."""382383shader = FileShader(HLSL_SHADER_WITHOUT_BINDINGS, '.frag')384glslc_args = ['-S', '-x', 'hlsl', '-fhlsl-iomap', shader,385'-fauto-bind-uniforms', '-ftexture-binding-base', 'frag', '100']386expected_assembly_substr = "OpDecorate %t6 Binding 116"387388389@inside_glslc_testsuite('OptionFAutoBindUniforms')390class HlslFTextureBindingBaseForComputeOptionIgnoredWhenCompilingAsFrag(expect.ValidAssemblyFileWithSubstr):391"""Tests that -ftexture-binding-base for compute is ignored when compiling392as a fragment shader."""393394shader = FileShader(HLSL_SHADER_WITHOUT_BINDINGS, '.frag')395glslc_args = ['-S', '-x', 'hlsl', '-fhlsl-iomap', shader,396'-fauto-bind-uniforms', '-ftexture-binding-base', 'compute', '100']397expected_assembly_substr = "OpDecorate %t6 Binding 16"398399400@inside_glslc_testsuite('OptionFAutoBindUniforms')401class HlslFUavBindingBaseOptionRespected(expect.ValidAssemblyFileWithSubstr):402"""Tests that -fuav-binding-base sets binding base for UAVs in HLSL403compilation."""404405shader = FileShader(HLSL_SHADER_WITHOUT_BINDINGS, '.frag')406glslc_args = ['-S', '-x', 'hlsl', '-fhlsl-iomap', shader,407'-fauto-bind-uniforms', '-fuav-binding-base', '100']408expected_assembly_substr = "OpDecorate %u8 Binding 128"409410411@inside_glslc_testsuite('OptionFAutoBindUniforms')412class HlslFUavBindingBaseForFragOptionRespected(expect.ValidAssemblyFileWithSubstr):413"""Tests that -fuav-binding-base for frag sets binding base for UAVs in HLSL414compilation."""415416shader = FileShader(HLSL_SHADER_WITHOUT_BINDINGS, '.frag')417glslc_args = ['-S', '-x', 'hlsl', '-fhlsl-iomap', shader,418'-fauto-bind-uniforms', '-fuav-binding-base', 'frag', '100']419expected_assembly_substr = "OpDecorate %u8 Binding 128"420421422@inside_glslc_testsuite('OptionFAutoBindUniforms')423class HlslFUavBindingBaseForComputeOptionIgnoredWhenCompilingAsFrag(expect.ValidAssemblyFileWithSubstr):424"""Tests that -fuav-binding-base for compute is ignored when compiling425as a fragment shader."""426427shader = FileShader(HLSL_SHADER_WITHOUT_BINDINGS, '.frag')428glslc_args = ['-S', '-x', 'hlsl', '-fhlsl-iomap', shader,429'-fauto-bind-uniforms', '-fuav-binding-base', 'compute', '100']430expected_assembly_substr = "OpDecorate %u8 Binding 28"431432433