Skip to content

Foveated rendering broken in Vulkan Mobile renderer on Meta Quest devices (won't render or wrong FDM offsets) #112988

Description

@dsnopek

Tested versions

  • Reproducible on master after d30ec9a
  • Not reproducible on Godot 4.5.1

System information

Meta Quest 3 or Pro - Android - Qualcomm XR2 (gen2 or gen1+)

Issue description

This is a regression caused by #112888

While that PR works great on Samsung Galaxy XR, it has issues on Meta Quest devices (and I assume Pico too, but I haven't tested yet).

On headsets that don't support XR_META_foveation_eye_tracked, like the Meta Quest 3, it will fail to render any frames, giving these errors in the logs:

56053:11-19 12:46:12.764 13136 13159 E godot   : ERROR: Condition "err != VK_SUCCESS" is true. Returning: FAILED
56054:11-19 12:46:12.764 13136 13159 E godot   :    at: command_queue_execute_and_present (drivers/vulkan/rendering_device_driver_vulkan.cpp:2966)
56067:11-19 12:46:12.778 13136 13159 E godot   : ERROR: Condition "err != VK_SUCCESS" is true. Returning: FAILED
56068:11-19 12:46:12.778 13136 13159 E godot   :    at: command_queue_execute_and_present (drivers/vulkan/rendering_device_driver_vulkan.cpp:2966)

However, on the Meta Quest Pro which does support XR_META_foveation_eye_tracked, it's rendering, but it's offsetting the FDM incorrectly. The data we are getting back from the OpenXR extension looks very different on Meta Quest Pro, and, actually, kind of wrong? I'm still debugging it.

Anyway, it's my fault for only testing PR #112888 on Samsung Galaxy XR, and not on any other headsets - sorry about that!

(This issue makes it so that issue #112834 can't be reproduced on Meta Quest 3 at the moment, because it simply won't render anything)

Steps to reproduce

With an XR project using the Vulkan Mobile renderer, you only need to ensure that foveated rendering is enabled by:

  • Setting "XR" -> "OpenXR" -> "Foveation Level" to "High" (or any other value aside from "Off")
  • Setting "Rendering" -> "VRS" -> "Mode" to "XR"

Minimal reproduction project (MRP)

This isn't exactly an MRP (because it isn't minimal), but the issue is apparent if you take this project and switch the renderer to "Mobile" (it's set to "Compatibility" in the repo):

https://github.com/dsnopek/gdquest-tps-demo/tree/standalone-vr-benchmark

(Note: the branch is standalone-vr-benchmark)

Metadata

Metadata

Assignees

Type

No type

Fields

No fields configured for issues without a type.

Projects

Status
Release Blocker
Status
Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions