1010namespace gfx ::backend::webgpu::core {
1111
1212namespace {
13- std::vector<WGPUAdapter> discoverAdapters (WGPUInstance instance)
13+ std::vector<WGPUAdapter> discoverAdapters (WGPUInstance instance, bool xrCompatible )
1414 {
1515 std::vector<WGPUAdapter> adapters;
1616
@@ -27,6 +27,15 @@ namespace {
2727 WGPURequestAdapterOptions options = WGPU_REQUEST_ADAPTER_OPTIONS_INIT ;
2828 options.powerPreference = preference;
2929 options.forceFallbackAdapter = forceFallback;
30+ #if defined(__EMSCRIPTEN__)
31+ WGPURequestAdapterWebXROptions xrOptions = WGPU_REQUEST_ADAPTER_WEBXR_OPTIONS_INIT ;
32+ if (xrCompatible) {
33+ xrOptions.xrCompatible = WGPU_TRUE ;
34+ options.nextInChain = &xrOptions.chain ;
35+ }
36+ #else
37+ (void )xrCompatible; // Not applicable for native Dawn
38+ #endif
3039
3140 WGPUAdapter adapter = nullptr ;
3241 bool completed = false ;
@@ -71,8 +80,6 @@ namespace {
7180
7281Instance::Instance (const InstanceCreateInfo& createInfo)
7382{
74- (void )createInfo; // Descriptor not used in current implementation
75-
7683 // Request TimedWaitAny feature for proper async callback handling
7784 // For native Dawn, also request ShaderSourceSPIRV for SPIR-V shader support
7885 static const WGPUInstanceFeatureName requiredFeatures[] = {
@@ -106,7 +113,10 @@ Instance::Instance(const InstanceCreateInfo& createInfo)
106113 throw std::runtime_error (" Failed to create WebGPU instance" );
107114 }
108115
109- std::vector<WGPUAdapter> discoveredAdapters = discoverAdapters (m_instance);
116+ const bool xrCompatible = std::find (createInfo.enabledExtensions .begin (), createInfo.enabledExtensions .end (),
117+ std::string (extensions::XR_COMPATIBLE ))
118+ != createInfo.enabledExtensions .end ();
119+ std::vector<WGPUAdapter> discoveredAdapters = discoverAdapters (m_instance, xrCompatible);
110120 m_adapters.reserve (discoveredAdapters.size ());
111121 for (auto adapter : discoveredAdapters) {
112122 m_adapters.push_back (std::make_unique<Adapter>(adapter, this ));
0 commit comments