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
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
Comments (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
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
Latest issues
- URP Realtime reflection probes do not update when RenderProbe() is being called once per second
- Addressable terrain shader variants are stripped from the Player
- [iOS] Debug.Log() appears as <private> in Console app
- UI stays in the background when it is disabled in simulator
- A wrong log file is attached when project is launched with a "-logFile" command line argument
Resolution Note:
There are no fixes planned for this Bug