HLSL: Add location offsets per resource type
authorsteve-lunarg <steve_gh@khasekhemwy.net>
Wed, 7 Sep 2016 21:20:19 +0000 (15:20 -0600)
committersteve-lunarg <steve_gh@khasekhemwy.net>
Wed, 21 Sep 2016 02:31:27 +0000 (20:31 -0600)
commit7f7c2ed7809b0041f508e4d99dbf2c1284d0c320
tree5585393c5f22a6672c77334cd0976cb7ff579d69
parenta1e2d4952e0bf6ec809d243e01e0c602797bbfd2
HLSL: Add location offsets per resource type

This PR adds the ability to offset sampler, texture, and UBO bindings
from provided base bindings, and to auto-number bindings that are not
provided with explicit register numbers. The mechanism works as
follows:

- Offsets may be given on the command line for all stages, or
  individually for one or more single stages, in which case the
  offset will be auto-selected according to the stage being
  compiled. There is also an API to set them. The new command line
  options are --shift-sampler-binding, --shift-texture-binding, and
  --shift-UBO-binding.

- Uniforms which are not given explicit bindings in the source code
  are auto-numbered if and only if they are in live code as
  determined by the algorithm used to build the reflection
  database, and the --auto-map-bindings option is given. This auto-numbering
  avoids using any binding slots which were explicitly provided in
  the code, whether or not that explicit use was live. E.g, "uniform
  Texture1D foo : register(t3);" with --shift-texture-binding 10 will
  reserve binding 13, whether or not foo is used in live code.

- Shorter synonyms for the command line options are available.  See
  the --help output.

The testing infrastructure is slightly extended to allow use of the
binding offset API, and two new tests spv.register.(no)autoassign.frag are
added for comparing the resulting SPIR-V.
13 files changed:
StandAlone/StandAlone.cpp
Test/baseResults/spv.register.autoassign.frag.out [new file with mode: 0644]
Test/baseResults/spv.register.noautoassign.frag.out [new file with mode: 0644]
Test/spv.register.autoassign.frag [new file with mode: 0644]
Test/spv.register.noautoassign.frag [new file with mode: 0644]
glslang/CMakeLists.txt
glslang/MachineIndependent/ShaderLang.cpp
glslang/MachineIndependent/iomapper.cpp [new file with mode: 0644]
glslang/MachineIndependent/iomapper.h [new file with mode: 0644]
glslang/MachineIndependent/localintermediate.h
glslang/Public/ShaderLang.h
gtests/Spv.FromFile.cpp
gtests/TestFixture.h