1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "device/vr/openxr/openxr_extension_helper.h"
6 
7 namespace device {
8 
OpenXrExtensionEnumeration()9 OpenXrExtensionEnumeration::OpenXrExtensionEnumeration() {
10   uint32_t extension_count;
11   if (XR_SUCCEEDED(xrEnumerateInstanceExtensionProperties(
12           nullptr, 0, &extension_count, nullptr))) {
13     extension_properties_.resize(extension_count,
14                                  {XR_TYPE_EXTENSION_PROPERTIES});
15     xrEnumerateInstanceExtensionProperties(nullptr, extension_count,
16                                            &extension_count,
17                                            extension_properties_.data());
18   }
19 }
20 
21 OpenXrExtensionEnumeration::~OpenXrExtensionEnumeration() = default;
22 
ExtensionSupported(const char * extension_name) const23 bool OpenXrExtensionEnumeration::ExtensionSupported(
24     const char* extension_name) const {
25   return std::find_if(
26              extension_properties_.begin(), extension_properties_.end(),
27              [&extension_name](const XrExtensionProperties& properties) {
28                return strcmp(properties.extensionName, extension_name) == 0;
29              }) != extension_properties_.end();
30 }
31 
32 OpenXrExtensionHelper::~OpenXrExtensionHelper() = default;
33 
OpenXrExtensionHelper(XrInstance instance,const OpenXrExtensionEnumeration * const extension_enumeration)34 OpenXrExtensionHelper::OpenXrExtensionHelper(
35     XrInstance instance,
36     const OpenXrExtensionEnumeration* const extension_enumeration)
37     : extension_enumeration_(extension_enumeration) {
38   // Failure results in a nullptr
39   (void)xrGetInstanceProcAddr(
40       instance, "xrGetD3D11GraphicsRequirementsKHR",
41       reinterpret_cast<PFN_xrVoidFunction*>(
42           const_cast<PFN_xrGetD3D11GraphicsRequirementsKHR*>(
43               &extension_methods_.xrGetD3D11GraphicsRequirementsKHR)));
44 }
45 
46 }  // namespace device
47