Skip to content

OpenXR: Add support for XR_KHR_generic_controller#110778

Merged
Repiteo merged 1 commit into
godotengine:masterfrom
BastiaanOlij:openxr_khr_generic_controller
Mar 11, 2026
Merged

OpenXR: Add support for XR_KHR_generic_controller#110778
Repiteo merged 1 commit into
godotengine:masterfrom
BastiaanOlij:openxr_khr_generic_controller

Conversation

@BastiaanOlij

Copy link
Copy Markdown
Contributor

This PR adds support for the new XR_KHR_generic_controller extension that became available in OpenXR 1.1.52 (#110777)

This is a new generic controller profile added to OpenXR that is represents the norm in XR controllers and should provide a suitable fallback where the "simple controller" profile is insufficient.

Marking this as a draft PR for now as we're awaiting confirmation which runtimes have added support for this extension.

Once enough runtimes support this new controller profile we'll have to have a discussion whether we'll restrict our default action map to this profile alongside the hand interaction profile.

@BastiaanOlij BastiaanOlij added this to the 4.6 milestone Sep 22, 2025
@BastiaanOlij BastiaanOlij self-assigned this Sep 22, 2025
@BastiaanOlij BastiaanOlij force-pushed the openxr_khr_generic_controller branch from cc4837a to 960fcc3 Compare September 22, 2025 11:51
@BastiaanOlij

Copy link
Copy Markdown
Contributor Author

Not sure what the CI failures are about, seem to be unrelated to this PR ?

@BastiaanOlij BastiaanOlij force-pushed the openxr_khr_generic_controller branch from 960fcc3 to b437d07 Compare September 24, 2025 11:02
@Repiteo Repiteo modified the milestones: 4.6, 4.x Jan 26, 2026
@BastiaanOlij

Copy link
Copy Markdown
Contributor Author

XR Team meeting, going to rebase this and we're going to merge after checking all the input paths.

After that we'll do a separate PR to clean up our default action map so it only contains:

  • generic controller
  • touch controller
  • hand interaction

We're leaving out the simple controller as it doesn't cover our use cases and we have runtimes that will preference it over more applicable interaction profiles.

@BastiaanOlij BastiaanOlij force-pushed the openxr_khr_generic_controller branch from b437d07 to fef319b Compare March 6, 2026 02:21
@BastiaanOlij BastiaanOlij marked this pull request as ready for review March 6, 2026 02:22
@BastiaanOlij BastiaanOlij requested a review from a team as a code owner March 6, 2026 02:22
@BastiaanOlij BastiaanOlij force-pushed the openxr_khr_generic_controller branch from fef319b to 0a82493 Compare March 6, 2026 02:25
Comment thread modules/openxr/extensions/openxr_khr_generic_controller_extension.h Outdated
@akien-mga akien-mga changed the title Openxr khr generic controller Mar 6, 2026
@dsnopek

dsnopek commented Mar 6, 2026

Copy link
Copy Markdown
Contributor

After that we'll do a separate PR to clean up our default action map so it only contains:

To follow-up on something I said at the XR team meeting yesterday: I just tested on the Pico 4 Ultra, and it looks like I was wrong - it's not able to map to the "Touch controller" profile.

So, we could either continue with our original planned 3 interaction profiles, but just add the "Pico 4 controller" profile to it (which would be my preference, because I'd love to see the default action map get much smaller). Or, be more conservative, and only remove the "Simple controller" profile.

It's a question of if we're worried that there's more runtimes that can't map to the "Touch controller" profile. We can test on all the headsets we have available, but beyond that, we can't really know without going forward with removing most interaction profiles and seeing if users with other headsets find any issues.

@m4gr3d

m4gr3d commented Mar 6, 2026

Copy link
Copy Markdown
Contributor

So, we could either continue with our original planned 3 interaction profiles, but just add the "Pico 4 controller" profile to it (which would be my preference, because I'd love to see the default action map get much smaller). Or, be more conservative, and only remove the "Simple controller" profile.

I'm in favor of the option of just adding the Pico 4 controller, bearing in mind that new users (who may have a harder time troubleshooting why their controls are not working) will in the majority be using one of Meta, Pico or Google headsets. Whereas advanced users targeting a wider range of devices will know to update the action map.

@BastiaanOlij

Copy link
Copy Markdown
Contributor Author

yeah I'm in favour of culling everything but just keeping the PICO 4 mapping. Just because we have an increasing number of PICO users.

Hopefully once we get confirmation the generic controllers gets support on Meta and Pico headsets we can remove those.

People can always add profiles back in that they need for their projects.

This also brings things in line with OpenXRs position that you should only include interaction profiles that you've actually tested.

@BastiaanOlij BastiaanOlij force-pushed the openxr_khr_generic_controller branch 2 times, most recently from edf25cd to efcc653 Compare March 9, 2026 05:34
@BastiaanOlij BastiaanOlij requested review from dsnopek and m4gr3d March 9, 2026 05:37
Comment thread modules/openxr/extensions/openxr_khr_generic_controller_extension.cpp Outdated
@BastiaanOlij BastiaanOlij force-pushed the openxr_khr_generic_controller branch from efcc653 to 87eafe2 Compare March 10, 2026 01:32

@dsnopek dsnopek left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! This looks good to me :-)

@Repiteo Repiteo merged commit 5636543 into godotengine:master Mar 11, 2026
20 checks passed
@Repiteo

Repiteo commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Thanks!

@AThousandShips AThousandShips modified the milestones: 4.x, 4.7 Mar 11, 2026
@BastiaanOlij BastiaanOlij deleted the openxr_khr_generic_controller branch March 17, 2026 04:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment