Provided by: spirv-cross_2021.01.15-5_amd64 bug

NAME

       spirv-cross - tool designed for parsing and converting SPIR-V to other shader languages

SYNOPSIS

       spirv-cross <...>

DESCRIPTION

   Basic:
              [SPIR-V file] (- is stdin) [--output <output path>]: If not provided, prints output
              to stdout.  [--dump-resources]:

              Prints a basic reflection of the SPIR-V module along with other output.

              [--help]:

              Prints this help message.

   Select backend:
              By  default,  OpenGL-style  GLSL  is  the  target,  with  #version  and   GLSL/ESSL
              information  inherited  from the SPIR-V module if present.  [--vulkan-semantics] or
              [-V]:

              Emit Vulkan GLSL instead of plain GLSL. Makes use of Vulkan-only features to  match
              SPIR-V.

              [--msl]:

              Emit Metal Shading Language (MSL).

              [--hlsl]:

              Emit HLSL.

              [--reflect]:

              Emit JSON reflection.

              [--cpp]:

              DEPRECATED. Emits C++ code.

   Common options:
              [--entry name]:

              Use  a  specific  entry  point.  By default, the first entry point in the module is
              used.

              [--stage <stage (vert, frag, geom, tesc, tese comp)>]:

              Forces use of a certain shader stage.  Can disambiguate the  entry  point  if  more
              than one entry point exists with same name, but different stage.

              [--emit-line-directives]:

              If  SPIR-V  has  OpLine  directives, aim to emit those accurately in output code as
              well.

              [--rename-entry-point <old> <new> <stage>]:

              Renames an entry point from what is declared in  SPIR-V  to  code  output.   Mostly
              relevant for HLSL or MSL.

              [--rename-interface-variable <in|out> <location> <new_variable_name>]:

              Rename an interface variable based on location decoration.

              [--force-zero-initialized-variables]:

              Forces   temporary  variables  to  be  initialized  to  zero.   Can  be  useful  in
              environments where compilers do  not  allow  potentially  uninitialized  variables.
              This usually comes up with Phi temporaries.

              [--fixup-clipspace]:

              Fixup   Z   clip-space   at   the   end   of  a  vertex  shader.  The  behavior  is
              backend-dependent.  GLSL: Rewrites [0, w] Z range  (D3D/Metal/Vulkan)  to  GL-style
              [-w, w].  HLSL/MSL: Rewrites [-w, w] Z range (GL) to D3D/Metal/Vulkan-style [0, w].

              [--flip-vert-y]:

              Inverts  gl_Position.y  (or  equivalent)  at  the  end  of a vertex shader. This is
              equivalent to using negative viewport height.

   GLSL options:
              [--es]:

              Force ESSL.

              [--no-es]:

              Force desktop GLSL.

              [--version <GLSL version>]:

              E.g. --version 450 will emit '#version 450' in shader.  Code generation will depend
              on the version used.

              [--flatten-ubo]:

              Emit  UBOs  as plain uniform arrays which are suitable for use with glUniform4*v().
              This can be an optimization on GL implementations where this  is  faster  or  works
              around  buggy driver implementations.  E.g.: uniform MyUBO { vec4 a; float b, c, d,
              e; }; will be emitted as uniform vec4 MyUBO[2]; Caveat: You cannot  mix  and  match
              floating-point  and  integer  in  the  same UBO with this option.  Legacy GLSL/ESSL
              (where this flattening makes sense) does not support bit-casting, which would  have
              been the obvious workaround.

              [--extension ext]:

              Add  #extension string of your choosing to GLSL output.  Useful if you use variable
              name remapping to something that requires an extension unknown to SPIRV-Cross.

              [--remove-unused-variables]:

              Do not emit interface variables which are not statically accessed by the shader.

              [--separate-shader-objects]:

              Redeclare gl_PerVertex blocks  to  be  suitable  for  desktop  GL  separate  shader
              objects.

              [--glsl-emit-push-constant-as-ubo]:

              Instead of a plain uniform of struct for push constants, emit a UBO block instead.

              [--glsl-emit-ubo-as-plain-uniforms]:

              Instead of emitting UBOs, emit them as plain uniform structs.

              [--glsl-remap-ext-framebuffer-fetch input-attachment color-location]:

              Remaps    an    input    attachment    to    use   GL_EXT_shader_framebuffer_fetch.
              gl_LastFragData[location] is read  from.  The  attachment  to  read  from  must  be
              declared as an output in the shader.

              [--vulkan-glsl-disable-ext-samplerless-texture-functions]:

              Do  not allow use of GL_EXT_samperless_texture_functions, even in Vulkan GLSL.  Use
              of texelFetch and similar might have to create dummy samplers to work around it.

              [--combined-samplers-inherit-bindings]:

              Inherit binding information from the textures when building combined image samplers
              from separate textures and samplers.

              [--no-support-nonzero-baseinstance]:

              When using gl_InstanceIndex with desktop GL, assume that base instance is always 0,
              and do not attempt to fix up gl_InstanceID to match Vulkan semantics.

              [--pls-in format input-name]:

              Remaps a subpass input with name into a GL_EXT_pixel_local_storage input.  Entry in
              PLS  block  is  ordered  where  first --pls-in marks the first entry. Can be called
              multiple times.  Formats allowed:  r11f_g11f_b10f,  r32f,  rg16f,  rg16,  rgb10_a2,
              rgba8, rgba8i, rgba8ui, rg16i, rgb10_a2ui, rg16ui, r32ui.  Requires ESSL.

              [--pls-out format output-name]:

              Remaps a color output with name into a GL_EXT_pixel_local_storage output.  Entry in
              PLS block is ordered where first --pls-output marks the first entry. Can be  called
              multiple  times.   Formats  allowed:  r11f_g11f_b10f,  r32f, rg16f, rg16, rgb10_a2,
              rgba8, rgba8i, rgba8ui, rg16i, rgb10_a2ui, rg16ui, r32ui.  Requires ESSL.

              [--remap source_name target_name components]:

              Remaps a variable to a different name with N components.  Main use case is to remap
              a subpass input to gl_LastFragDepthARM.  E.g.: uniform subpassInput uDepth; --remap
              uDepth               gl_LastFragDepthARM               1                --extension
              GL_ARM_shader_framebuffer_fetch_depth_stencil

              [--no-420pack-extension]:

              Do  not  make use of GL_ARB_shading_language_420pack in older GL targets to support
              layout(binding).

              [--remap-variable-type <variable_name> <new_variable_type>]:

              Remaps a variable type based on name.  Primary  use  case  is  supporting  external
              samplers  in ESSL for video rendering on Android where you could remap a texture to
              a YUV one.

              [--glsl-force-flattened-io-blocks]:

              Always flatten I/O blocks and structs.

   MSL options:
              [--msl-version <MMmmpp>]:

              Uses a specific MSL version, e.g. --msl-version 20100 for MSL 2.1.

              [--msl-capture-output]:

              Writes geometry varyings to a buffer instead of as stage-outputs.

              [--msl-swizzle-texture-samples]:

              Works around lack of support  for  VkImageView  component  swizzles.   This  has  a
              massive  impact on performance and bloat. Do not use this unless you are absolutely
              forced to.  To use this feature, the API  side  must  pass  down  swizzle  buffers.
              Should  only be used by translation layers as a last resort.  Recent Metal versions
              do not require this workaround.

              [--msl-ios]:

              Target iOS Metal instead of macOS Metal.

              [--msl-pad-fragment-output]:

              Always emit color outputs as 4-component variables.  In Metal, the fragment  shader
              must emit at least as many components as the render target format.

              [--msl-domain-lower-left]:

              Use a lower-left tessellation domain.

              [--msl-argument-buffers]:

              Emit  Indirect  Argument buffers instead of plain bindings.  Requires MSL 2.0 to be
              enabled.

              [--msl-texture-buffer-native]:

              Enable native support for texel buffers. Otherwise, it  is  emulated  as  a  normal
              texture.

              [--msl-framebuffer-fetch]:

              Implement  subpass  inputs  with  frame buffer fetch.  Emits [[color(N)]] inputs in
              fragment stage.  Requires an Apple GPU.

              [--msl-emulate-cube-array]:

              Emulate cube arrays with 2D array and manual math.

              [--msl-discrete-descriptor-set <index>]:

              When using argument buffers, forces a specific descriptor  set  to  be  implemented
              without  argument  buffers.   Useful for implementing push descriptors in emulation
              layers.  Can be used multiple times for each descriptor set in question.

              [--msl-device-argument-buffer <descriptor set index>]:

              Use device address space to hold indirect argument  buffers  instead  of  constant.
              Comes up when trying to support argument buffers which are larger than 64 KiB.

              [--msl-multiview]:

              Enable SPV_KHR_multiview emulation.

              [--msl-multiview-no-layered-rendering]:

              Don't  set  [[render_target_array_index]] in multiview shaders.  Useful for devices
              which don't support layered  rendering.  Only  effective  when  --msl-multiview  is
              enabled.

              [--msl-view-index-from-device-index]:

              Treat the view index as the device index instead.  For multi-GPU rendering.

              [--msl-dispatch-base]:

              Add  support  for  vkCmdDispatchBase()  or  similar APIs.  Offsets the workgroup ID
              based on a buffer.

              [--msl-dynamic-buffer <set index> <binding>]:

              Marks a buffer as having dynamic offset.  The offset is applied in the shader  with
              pointer  arithmetic.   Useful for argument buffers where it is non-trivial to apply
              dynamic offset otherwise.

              [--msl-inline-uniform-block <set index> <binding>]:

              In argument buffers, mark an UBO as being an inline uniform block which is embedded
              into the argument buffer itself.

              [--msl-decoration-binding]:

              Use  SPIR-V  bindings  directly as MSL bindings.  This does not work in the general
              case as there is no descriptor set support, and combined image samplers  are  split
              up.   However,  if the shader author knows of binding limitations, this option will
              avoid the need for reflection on Metal side.

              [--msl-force-active-argument-buffer-resources]:

              Always emit resources which are part of argument buffers.   This  makes  sure  that
              similar  shaders  with  same resource declarations can share the argument buffer as
              declaring an argument buffer implies an ABI.

              [--msl-force-native-arrays]:

              Rather than implementing array types as a templated value type  ala  std::array<T>,
              use  plain,  native  arrays.  This will lead to worse code-gen, but can work around
              driver bugs on certain driver  revisions  of  certain  Intel-based  Macbooks  where
              template arrays break.

              [--msl-disable-frag-depth-builtin]:

              Disables  FragDepth  output.  Useful if pipeline does not enable depth, as pipeline
              creation might otherwise fail.

              [--msl-disable-frag-stencil-ref-builtin]:

              Disable FragStencilRef output. Useful if pipeline does not enable  stencil  output,
              as pipeline creation might otherwise fail.

              [--msl-enable-frag-output-mask <mask>]:

              Only  selectively  enable  fragment  outputs.  Useful  if  pipeline does not enable
              fragment output for certain locations, as pipeline creation might otherwise fail.

              [--msl-no-clip-distance-user-varying]:

              Do not emit user varyings to emulate gl_ClipDistance in fragment shaders.

              [--msl-shader-input <index> <format> <size>]:

              Specify the format of the shader  input  at  <index>.   <format>  can  be  'any32',
              'any16',  'u16', 'u8', or 'other', to indicate a 32-bit opaque value, 16-bit opaque
              value, 16-bit unsigned integer, 8-bit unsigned integer,  or  other-typed  variable.
              <size> is the vector length of the variable, which must be greater than or equal to
              that declared in the shader.  Useful if shader stage interfaces don't match up,  as
              pipeline creation might otherwise fail.

              [--msl-multi-patch-workgroup]:

              Use  the  new  style of tessellation control processing, where multiple patches are
              processed per workgroup.  This should increase throughput by ensuring all the GPU's
              SIMD lanes are occupied, but it is not compatible with the old style.  In addition,
              this style also passes input variables in buffers directly instead of using  vertex
              attribute  processing.   In  a  future version of SPIRV-Cross, this will become the
              default.

              [--msl-vertex-for-tessellation]:

              When handling a vertex shader, marks it as one that will be used with  a  new-style
              tessellation  control  shader.   The  vertex  shader  is output to MSL as a compute
              kernel which outputs vertices to the buffer in the order they are received,  rather
              than in index order as with --msl-capture-output normally.

              [--msl-additional-fixed-sample-mask <mask>]:

              Set  an additional fixed sample mask. If the shader outputs a sample mask, then the
              final sample mask will be a bitwise AND of the two.

              [--msl-arrayed-subpass-input]:

              Assume that images of dimension SubpassData have  multiple  layers.  Layered  input
              attachments  are  accessed  relative to BuiltInLayer.  This option has no effect if
              multiview is also enabled.

              [--msl-r32ui-linear-texture-align <alignment>]:

              The required alignment of linear textures of format MTLPixelFormatR32Uint.  This is
              used to align the row stride for atomic accesses to such images.

              [--msl-r32ui-linear-texture-align-constant-id <id>]:

              The  function  constant  ID to use for the linear texture alignment.  On MSL 1.2 or
              later, you can override the alignment by setting this function constant.

              [--msl-texture-1d-as-2d]:

              Emit Image variables of dimension Dim1D as texture2d.  In Metal, 1D textures do not
              support  all  features  that 2D textures do. Use this option if your code relies on
              these features.

              [--msl-ios-use-simdgroup-functions]:

              Use simd_*() functions for subgroup ops instead of  quad_*().   Recent  Apple  GPUs
              support  SIMD-groups  larger than a quad. Use this option to take advantage of this
              support.

              [--msl-emulate-subgroups]:

              Assume subgroups of size 1.  Intended for Vulkan Portability implementations  where
              Metal support for SIMD-groups is insufficient for true subgroups.

              [--msl-fixed-subgroup-size <size>]:

              Assign  a  constant  <size>  to  the  SubgroupSize  builtin.   Intended  for Vulkan
              Portability implementations where VK_EXT_subgroup_size_control is not supported  or
              disabled.  If 0, assume variable subgroup size as actually exposed by Metal.

              [--msl-force-sample-rate-shading]:

              Force  fragment  shaders to run per sample.  This adds a [[sample_id]] parameter if
              none is already present.

   HLSL options:
              [--shader-model]:

              Enables a specific shader model, e.g. --shader-model 50 for SM 5.0.

              [--hlsl-enable-compat]:

              Allow point size and point coord to be used, even if they won't work  as  expected.
              PointSize is ignored, and PointCoord returns (0.5, 0.5).

              [--hlsl-support-nonzero-basevertex-baseinstance]:

              Support  base  vertex  and base instance by emitting a special cbuffer declared as:
              cbuffer    SPIRV_Cross_VertexInfo     {     int     SPIRV_Cross_BaseVertex;     int
              SPIRV_Cross_BaseInstance; };

              [--hlsl-auto-binding (push, cbv, srv, uav, sampler, all)]

              Do  not  emit  any  : register(#) bindings for specific resource types, and rely on
              HLSL compiler to assign something.

              [--hlsl-force-storage-buffer-as-uav]:

              Always emit SSBOs as UAVs, even when marked as read-only.  Normally,  SSBOs  marked
              with NonWritable will be emitted as SRVs.

              [--hlsl-nonwritable-uav-texture-as-srv]:

              Emit  NonWritable storage images as SRV textures instead of UAV.  Using this option
              messes with the type system. SPIRV-Cross cannot guarantee that this will work.  One
              major  problem area with this feature is function arguments, where we won't know if
              we're seeing a UAV or SRV.  Shader must ensure that read/write state is  consistent
              at all call sites.

              [--set-hlsl-vertex-input-semantic <location> <semantic>]:

              Emits  a specific vertex input semantic for a given location.  Otherwise, TEXCOORD#
              is used as semantics, where # is location.

              [--hlsl-enable-16bit-types]:

              Enables native use of half/int16_t/uint16_t and ByteAddressBuffer interaction  with
              these types. Requires SM 6.2.

              [--hlsl-flatten-matrix-vertex-input-semantics]:

              Emits  matrix  vertex  inputs  with  input  semantics  as  if they were independent
              vectors, e.g. TEXCOORD{2,3,4} rather than matrix form TEXCOORD2_{0,1,2}.

   Obscure options:
              These options are not meant  to  be  used  on  a  regular  basis.  They  have  some
              occasional uses in the test suite.  [--force-temporary]:

              Aggressively  emit  temporary  expressions  instead of forwarding expressions. Very
              rarely used and under-tested.

              [--revision]:

              Prints  build  timestamp  and  Git  commit  information  (updated  when  cmake   is
              configured).

              [--iterations iter]:

              Recompiles the same shader over and over, benchmarking related.

              [--disable-storage-image-qualifier-deduction]:

              If  storage images are received without any nonwritable or nonreadable information,
              do not attempt to analyze usage, and always emit read/write state.

              [--flatten-multidimensional-arrays]:

              Do not support multi-dimensional arrays and flatten them to one dimension.

              [--cpp-interface-name <name>]:

              Emit a specific class name in C++ codegen.

       Usage: spirv-cross <...>

   Basic:
              [SPIR-V file] (- is stdin) [--output <output path>]: If not provided, prints output
              to stdout.  [--dump-resources]:

              Prints a basic reflection of the SPIR-V module along with other output.

              [--help]:

              Prints this help message.

   Select backend:
              By   default,  OpenGL-style  GLSL  is  the  target,  with  #version  and  GLSL/ESSL
              information inherited from the SPIR-V module if present.   [--vulkan-semantics]  or
              [-V]:

              Emit  Vulkan GLSL instead of plain GLSL. Makes use of Vulkan-only features to match
              SPIR-V.

              [--msl]:

              Emit Metal Shading Language (MSL).

              [--hlsl]:

              Emit HLSL.

              [--reflect]:

              Emit JSON reflection.

              [--cpp]:

              DEPRECATED. Emits C++ code.

   Common options:
              [--entry name]:

              Use a specific entry point. By default, the first entry  point  in  the  module  is
              used.

              [--stage <stage (vert, frag, geom, tesc, tese comp)>]:

              Forces  use  of  a  certain shader stage.  Can disambiguate the entry point if more
              than one entry point exists with same name, but different stage.

              [--emit-line-directives]:

              If SPIR-V has OpLine directives, aim to emit those accurately  in  output  code  as
              well.

              [--rename-entry-point <old> <new> <stage>]:

              Renames  an  entry  point  from  what is declared in SPIR-V to code output.  Mostly
              relevant for HLSL or MSL.

              [--rename-interface-variable <in|out> <location> <new_variable_name>]:

              Rename an interface variable based on location decoration.

              [--force-zero-initialized-variables]:

              Forces  temporary  variables  to  be  initialized  to  zero.   Can  be  useful   in
              environments  where  compilers  do  not  allow potentially uninitialized variables.
              This usually comes up with Phi temporaries.

              [--fixup-clipspace]:

              Fixup  Z  clip-space  at  the  end  of   a   vertex   shader.   The   behavior   is
              backend-dependent.   GLSL:  Rewrites  [0, w] Z range (D3D/Metal/Vulkan) to GL-style
              [-w, w].  HLSL/MSL: Rewrites [-w, w] Z range (GL) to D3D/Metal/Vulkan-style [0, w].

              [--flip-vert-y]:

              Inverts gl_Position.y (or equivalent) at the  end  of  a  vertex  shader.  This  is
              equivalent to using negative viewport height.

   GLSL options:
              [--es]:

              Force ESSL.

              [--no-es]:

              Force desktop GLSL.

              [--version <GLSL version>]:

              E.g. --version 450 will emit '#version 450' in shader.  Code generation will depend
              on the version used.

              [--flatten-ubo]:

              Emit UBOs as plain uniform arrays which are suitable for use  with  glUniform4*v().
              This  can  be  an  optimization on GL implementations where this is faster or works
              around buggy driver implementations.  E.g.: uniform MyUBO { vec4 a; float b, c,  d,
              e;  };  will  be emitted as uniform vec4 MyUBO[2]; Caveat: You cannot mix and match
              floating-point and integer in the same UBO  with  this  option.   Legacy  GLSL/ESSL
              (where  this flattening makes sense) does not support bit-casting, which would have
              been the obvious workaround.

              [--extension ext]:

              Add #extension string of your choosing to GLSL output.  Useful if you use  variable
              name remapping to something that requires an extension unknown to SPIRV-Cross.

              [--remove-unused-variables]:

              Do not emit interface variables which are not statically accessed by the shader.

              [--separate-shader-objects]:

              Redeclare  gl_PerVertex  blocks  to  be  suitable  for  desktop  GL separate shader
              objects.

              [--glsl-emit-push-constant-as-ubo]:

              Instead of a plain uniform of struct for push constants, emit a UBO block instead.

              [--glsl-emit-ubo-as-plain-uniforms]:

              Instead of emitting UBOs, emit them as plain uniform structs.

              [--glsl-remap-ext-framebuffer-fetch input-attachment color-location]:

              Remaps   an    input    attachment    to    use    GL_EXT_shader_framebuffer_fetch.
              gl_LastFragData[location]  is  read  from.  The  attachment  to  read  from must be
              declared as an output in the shader.

              [--vulkan-glsl-disable-ext-samplerless-texture-functions]:

              Do not allow use of GL_EXT_samperless_texture_functions, even in Vulkan GLSL.   Use
              of texelFetch and similar might have to create dummy samplers to work around it.

              [--combined-samplers-inherit-bindings]:

              Inherit binding information from the textures when building combined image samplers
              from separate textures and samplers.

              [--no-support-nonzero-baseinstance]:

              When using gl_InstanceIndex with desktop GL, assume that base instance is always 0,
              and do not attempt to fix up gl_InstanceID to match Vulkan semantics.

              [--pls-in format input-name]:

              Remaps a subpass input with name into a GL_EXT_pixel_local_storage input.  Entry in
              PLS block is ordered where first --pls-in marks the  first  entry.  Can  be  called
              multiple  times.   Formats  allowed:  r11f_g11f_b10f,  r32f, rg16f, rg16, rgb10_a2,
              rgba8, rgba8i, rgba8ui, rg16i, rgb10_a2ui, rg16ui, r32ui.  Requires ESSL.

              [--pls-out format output-name]:

              Remaps a color output with name into a GL_EXT_pixel_local_storage output.  Entry in
              PLS  block is ordered where first --pls-output marks the first entry. Can be called
              multiple times.  Formats allowed:  r11f_g11f_b10f,  r32f,  rg16f,  rg16,  rgb10_a2,
              rgba8, rgba8i, rgba8ui, rg16i, rgb10_a2ui, rg16ui, r32ui.  Requires ESSL.

              [--remap source_name target_name components]:

              Remaps a variable to a different name with N components.  Main use case is to remap
              a subpass input to gl_LastFragDepthARM.  E.g.: uniform subpassInput uDepth; --remap
              uDepth                gl_LastFragDepthARM               1               --extension
              GL_ARM_shader_framebuffer_fetch_depth_stencil

              [--no-420pack-extension]:

              Do not make use of GL_ARB_shading_language_420pack in older GL targets  to  support
              layout(binding).

              [--remap-variable-type <variable_name> <new_variable_type>]:

              Remaps  a  variable  type  based  on name.  Primary use case is supporting external
              samplers in ESSL for video rendering on Android where you could remap a texture  to
              a YUV one.

              [--glsl-force-flattened-io-blocks]:

              Always flatten I/O blocks and structs.

   MSL options:
              [--msl-version <MMmmpp>]:

              Uses a specific MSL version, e.g. --msl-version 20100 for MSL 2.1.

              [--msl-capture-output]:

              Writes geometry varyings to a buffer instead of as stage-outputs.

              [--msl-swizzle-texture-samples]:

              Works  around  lack  of  support  for  VkImageView  component swizzles.  This has a
              massive impact on performance and bloat. Do not use this unless you are  absolutely
              forced  to.   To  use  this  feature,  the API side must pass down swizzle buffers.
              Should only be used by translation layers as a last resort.  Recent Metal  versions
              do not require this workaround.

              [--msl-ios]:

              Target iOS Metal instead of macOS Metal.

              [--msl-pad-fragment-output]:

              Always  emit color outputs as 4-component variables.  In Metal, the fragment shader
              must emit at least as many components as the render target format.

              [--msl-domain-lower-left]:

              Use a lower-left tessellation domain.

              [--msl-argument-buffers]:

              Emit Indirect Argument buffers instead of plain bindings.  Requires MSL 2.0  to  be
              enabled.

              [--msl-texture-buffer-native]:

              Enable  native  support  for  texel  buffers. Otherwise, it is emulated as a normal
              texture.

              [--msl-framebuffer-fetch]:

              Implement subpass inputs with frame buffer fetch.   Emits  [[color(N)]]  inputs  in
              fragment stage.  Requires an Apple GPU.

              [--msl-emulate-cube-array]:

              Emulate cube arrays with 2D array and manual math.

              [--msl-discrete-descriptor-set <index>]:

              When  using  argument  buffers,  forces a specific descriptor set to be implemented
              without argument buffers.  Useful for implementing push  descriptors  in  emulation
              layers.  Can be used multiple times for each descriptor set in question.

              [--msl-device-argument-buffer <descriptor set index>]:

              Use  device  address  space  to hold indirect argument buffers instead of constant.
              Comes up when trying to support argument buffers which are larger than 64 KiB.

              [--msl-multiview]:

              Enable SPV_KHR_multiview emulation.

              [--msl-multiview-no-layered-rendering]:

              Don't set [[render_target_array_index]] in multiview shaders.  Useful  for  devices
              which  don't  support  layered  rendering.  Only  effective when --msl-multiview is
              enabled.

              [--msl-view-index-from-device-index]:

              Treat the view index as the device index instead.  For multi-GPU rendering.

              [--msl-dispatch-base]:

              Add support for vkCmdDispatchBase() or similar  APIs.   Offsets  the  workgroup  ID
              based on a buffer.

              [--msl-dynamic-buffer <set index> <binding>]:

              Marks  a buffer as having dynamic offset.  The offset is applied in the shader with
              pointer arithmetic.  Useful for argument buffers where it is non-trivial  to  apply
              dynamic offset otherwise.

              [--msl-inline-uniform-block <set index> <binding>]:

              In argument buffers, mark an UBO as being an inline uniform block which is embedded
              into the argument buffer itself.

              [--msl-decoration-binding]:

              Use SPIR-V bindings directly as MSL bindings.  This does not work  in  the  general
              case  as  there is no descriptor set support, and combined image samplers are split
              up.  However, if the shader author knows of binding limitations, this  option  will
              avoid the need for reflection on Metal side.

              [--msl-force-active-argument-buffer-resources]:

              Always  emit  resources  which  are part of argument buffers.  This makes sure that
              similar shaders with same resource declarations can share the  argument  buffer  as
              declaring an argument buffer implies an ABI.

              [--msl-force-native-arrays]:

              Rather  than  implementing array types as a templated value type ala std::array<T>,
              use plain, native arrays.  This will lead to worse code-gen, but  can  work  around
              driver  bugs  on  certain  driver  revisions  of certain Intel-based Macbooks where
              template arrays break.

              [--msl-disable-frag-depth-builtin]:

              Disables FragDepth output. Useful if pipeline does not enable  depth,  as  pipeline
              creation might otherwise fail.

              [--msl-disable-frag-stencil-ref-builtin]:

              Disable  FragStencilRef  output. Useful if pipeline does not enable stencil output,
              as pipeline creation might otherwise fail.

              [--msl-enable-frag-output-mask <mask>]:

              Only selectively enable fragment  outputs.  Useful  if  pipeline  does  not  enable
              fragment output for certain locations, as pipeline creation might otherwise fail.

              [--msl-no-clip-distance-user-varying]:

              Do not emit user varyings to emulate gl_ClipDistance in fragment shaders.

              [--msl-shader-input <index> <format> <size>]:

              Specify  the  format  of  the  shader  input  at <index>.  <format> can be 'any32',
              'any16', 'u16', 'u8', or 'other', to indicate a 32-bit opaque value, 16-bit  opaque
              value,  16-bit  unsigned  integer, 8-bit unsigned integer, or other-typed variable.
              <size> is the vector length of the variable, which must be greater than or equal to
              that  declared in the shader.  Useful if shader stage interfaces don't match up, as
              pipeline creation might otherwise fail.

              [--msl-multi-patch-workgroup]:

              Use the new style of tessellation control processing, where  multiple  patches  are
              processed per workgroup.  This should increase throughput by ensuring all the GPU's
              SIMD lanes are occupied, but it is not compatible with the old style.  In addition,
              this  style also passes input variables in buffers directly instead of using vertex
              attribute processing.  In a future version of SPIRV-Cross,  this  will  become  the
              default.

              [--msl-vertex-for-tessellation]:

              When  handling  a vertex shader, marks it as one that will be used with a new-style
              tessellation control shader.  The vertex shader is  output  to  MSL  as  a  compute
              kernel  which outputs vertices to the buffer in the order they are received, rather
              than in index order as with --msl-capture-output normally.

              [--msl-additional-fixed-sample-mask <mask>]:

              Set an additional fixed sample mask. If the shader outputs a sample mask, then  the
              final sample mask will be a bitwise AND of the two.

              [--msl-arrayed-subpass-input]:

              Assume  that  images  of  dimension SubpassData have multiple layers. Layered input
              attachments are accessed relative to BuiltInLayer.  This option has  no  effect  if
              multiview is also enabled.

              [--msl-r32ui-linear-texture-align <alignment>]:

              The required alignment of linear textures of format MTLPixelFormatR32Uint.  This is
              used to align the row stride for atomic accesses to such images.

              [--msl-r32ui-linear-texture-align-constant-id <id>]:

              The function constant ID to use for the linear texture alignment.  On  MSL  1.2  or
              later, you can override the alignment by setting this function constant.

              [--msl-texture-1d-as-2d]:

              Emit Image variables of dimension Dim1D as texture2d.  In Metal, 1D textures do not
              support all features that 2D textures do. Use this option if your  code  relies  on
              these features.

              [--msl-ios-use-simdgroup-functions]:

              Use  simd_*()  functions  for  subgroup ops instead of quad_*().  Recent Apple GPUs
              support SIMD-groups larger than a quad. Use this option to take advantage  of  this
              support.

              [--msl-emulate-subgroups]:

              Assume  subgroups of size 1.  Intended for Vulkan Portability implementations where
              Metal support for SIMD-groups is insufficient for true subgroups.

              [--msl-fixed-subgroup-size <size>]:

              Assign a  constant  <size>  to  the  SubgroupSize  builtin.   Intended  for  Vulkan
              Portability  implementations where VK_EXT_subgroup_size_control is not supported or
              disabled.  If 0, assume variable subgroup size as actually exposed by Metal.

              [--msl-force-sample-rate-shading]:

              Force fragment shaders to run per sample.  This adds a [[sample_id]]  parameter  if
              none is already present.

   HLSL options:
              [--shader-model]:

              Enables a specific shader model, e.g. --shader-model 50 for SM 5.0.

              [--hlsl-enable-compat]:

              Allow  point  size and point coord to be used, even if they won't work as expected.
              PointSize is ignored, and PointCoord returns (0.5, 0.5).

              [--hlsl-support-nonzero-basevertex-baseinstance]:

              Support base vertex and base instance by emitting a special  cbuffer  declared  as:
              cbuffer     SPIRV_Cross_VertexInfo     {     int     SPIRV_Cross_BaseVertex;    int
              SPIRV_Cross_BaseInstance; };

              [--hlsl-auto-binding (push, cbv, srv, uav, sampler, all)]

              Do not emit any : register(#) bindings for specific resource  types,  and  rely  on
              HLSL compiler to assign something.

              [--hlsl-force-storage-buffer-as-uav]:

              Always  emit  SSBOs as UAVs, even when marked as read-only.  Normally, SSBOs marked
              with NonWritable will be emitted as SRVs.

              [--hlsl-nonwritable-uav-texture-as-srv]:

              Emit NonWritable storage images as SRV textures instead of UAV.  Using this  option
              messes with the type system. SPIRV-Cross cannot guarantee that this will work.  One
              major problem area with this feature is function arguments, where we won't know  if
              we're  seeing a UAV or SRV.  Shader must ensure that read/write state is consistent
              at all call sites.

              [--set-hlsl-vertex-input-semantic <location> <semantic>]:

              Emits a specific vertex input semantic for a given location.  Otherwise,  TEXCOORD#
              is used as semantics, where # is location.

              [--hlsl-enable-16bit-types]:

              Enables  native use of half/int16_t/uint16_t and ByteAddressBuffer interaction with
              these types. Requires SM 6.2.

              [--hlsl-flatten-matrix-vertex-input-semantics]:

              Emits matrix vertex inputs  with  input  semantics  as  if  they  were  independent
              vectors, e.g. TEXCOORD{2,3,4} rather than matrix form TEXCOORD2_{0,1,2}.

   Obscure options:
              These  options  are  not  meant  to  be  used  on  a  regular basis. They have some
              occasional uses in the test suite.  [--force-temporary]:

              Aggressively emit temporary expressions instead  of  forwarding  expressions.  Very
              rarely used and under-tested.

              [--revision]:

              Prints   build  timestamp  and  Git  commit  information  (updated  when  cmake  is
              configured).

              [--iterations iter]:

              Recompiles the same shader over and over, benchmarking related.

              [--disable-storage-image-qualifier-deduction]:

              If storage images are received without any nonwritable or nonreadable  information,
              do not attempt to analyze usage, and always emit read/write state.

              [--flatten-multidimensional-arrays]:

              Do not support multi-dimensional arrays and flatten them to one dimension.

              [--cpp-interface-name <name>]:

              Emit a specific class name in C++ codegen.