Some Xbox 360 titles, like Sonic 06, need occlusion queries and conditional rendering for accurate results.
This can be implemented performantly on D3D12 using Predication, on Vulkan using VK_EXT_conditional_rendering, and on Metal using shared visibility result buffers on UMA devices.
Every API has a slightly different take on this, which makes creating a standard abstracted API for this complex. On Vulkan, we will also need a fallback for performing a full readback of occlusion queries. While VK_EXT_conditional_rendering has good coverage on desktop platforms, it is largely unsupported on Android, and is not supported by MoltenVK.
Some Xbox 360 titles, like Sonic 06, need occlusion queries and conditional rendering for accurate results.
This can be implemented performantly on D3D12 using Predication, on Vulkan using VK_EXT_conditional_rendering, and on Metal using shared visibility result buffers on UMA devices.
Every API has a slightly different take on this, which makes creating a standard abstracted API for this complex. On Vulkan, we will also need a fallback for performing a full readback of occlusion queries. While
VK_EXT_conditional_renderinghas good coverage on desktop platforms, it is largely unsupported on Android, and is not supported by MoltenVK.