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