Search Issue Tracker

Won't Fix

Votes

0

Found in [Package]

1.16.0-pre.2

Issue ID

OXRB-659

Regression

No

[Vulkan][OpenXR] ScriptableRendererFeature breaks when Optimize Buffer Discards (Vulkan) and Foveated Rendering are enabled on Meta devices

Package: OpenXR Plugin

-

Steps to reproduce:
1. Open the attached user's project "Repro Project.zip"
2. Navigate to the Project Settings > OpenXR settings under XR Plug-in Management
2. Find and select the Meta Quest Support OpenXR Feature, selecting the gear icon, enable the "Optimize Buffer Discards (Vulkan)" setting
3. Build the application to a Quest 3/3S device
4. Verify the graphical issue where the RendererFeature is present and, using the UI button, turn off the RendererFeature. Notice the graphical issue disappears
5. Turn off the "Optimize Buffer Discards (Vulkan)" and create a new build. Notice there is not a graphical issue

Expected result: Enabling the "Optimize Buffer Discards (Vulkan)" doesn't break existing RendererFeature functionality
Actual result: Enabling the "Optimize Buffer Discards (Vulkan)" breaks existing RendererFeature functionality

Reproducible with: OpenXR 1.15.1 - 1.16.0-pre.2 (6000.0.60f1, 6000.2.8f1, 6000.3.0b5, 6000.4.0a2)
Could not test below 6000.0.23f1 due to the Editor crashing at the end of the build process

Environment tested: Windows 11 24H2

Reproducible with these devices:
VLNQA00609 - Oculus Quest 3 (Quest 3), CPU: Snapdragon XR2 Gen 2 (SM8550), GPU: Adreno 740, OS: 12
VLNQA00644 - Oculus Quest 3S (Quest 3S), CPU: Google Tensor G2, GPU: Adreno 740, OS: 14

Notes:
-Issue reproduces only with OpenXR plugin
-Issue reproduces only with Vulkan
-Issue reproduces with Meta Quest Support feature group and Android XR Feature group
-Issue requires that both "Optimize Buffer Discards (Vulkan)" and "Foveated Rendering" features be enabled for the issue to occur. If either one of these settings is disabled, it doesn't reproduce

  1. Resolution Note:

    There are no fixes planned for this Bug

Comments (1)

  1. jdiehl_unity3d

    Nov 03, 2025 16:41

    Just wanted to clarify the resolution for this issue:

    A ScriptableRenderPass that may run on XR should include this block when configuring render targets:
    -------
    if (cameraData.xr.enabled)
    builder.EnableFoveatedRasterization(cameraData.xr.supportsFoveatedRendering);
    -------

    When merging render passes passes we make sure all of the incoming passes have the same supportsFoveatedRendering value.
    If they don't then the passes cannot merge and we break them into separate passes.
    This results in normal behavior.
    However, when Optimize Buffer Discards is enabled then the color and depth textures are set to memoryless.
    Because of this when breaking into separate passes we are discarding the color and depth textures, so a ScriptableRenderPass that is trying to write into the activeColorTexture or activeDepthTexture will be writing into nothing.
    Adding the above code block resolves this issue by avoiding breaking into separate passes.

Add comment

Log in to post comment

All about bugs

View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.