Skip to content

MSL: Add reversed depth viewport emulation#2640

Open
vkedwardli wants to merge 1 commit into
KhronosGroup:mainfrom
vkedwardli:msl-emulate-reversed-depth-viewport
Open

MSL: Add reversed depth viewport emulation#2640
vkedwardli wants to merge 1 commit into
KhronosGroup:mainfrom
vkedwardli:msl-emulate-reversed-depth-viewport

Conversation

@vkedwardli

Copy link
Copy Markdown

This add an opt-in MSL backend option to emulate reversed depth viewports by inverting clip-space Z in vertex-like shaders.

The option originated from the MoltenVK workaround discussion in KhronosGroup/MoltenVK#2760
On some affected Metal implementations, passing a reversed depth viewport directly to Metal can fail. The intended consumer is MoltenVK, which can normalize the Metal viewport depth range and ask SPIRV-Cross to emulate the missing reversed-depth transform in generated MSL

When enabled, SPIRV-Cross adds a constant uint& mask argument and emits:

position.z = position.w - position.z

for viewports whose mask bit is set.

Changes:

  • CompilerMSL::Options::emulate_reversed_depth_viewport
  • CompilerMSL::Options::reversed_depth_viewport_buffer_index
  • C API options for both fields
  • MSL emission for the clip-space Z inversion in vertex-like shaders

Add an MSL option to emulate reversed depth viewports by inverting clip-space Z in vertex-like shaders.
The option binds a per-viewport mask and applies:
    position.z = position.w - position.z
when the selected viewport bit is set. If the shader writes ViewportIndex, use that output to select the mask bit; otherwise use viewport 0.
@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants