Provided by: spirv-cross_2021.01.15+1.4.304.1-2_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.

spirv-cross                                         June 2021                                     spirv-cross(1)