Skip to content

Commit 8fb9c94

Browse files
quic-dengkailrpavlik
authored andcommitted
OpenXR loader: add API layer discovery support, part 2
1 parent e83f35e commit 8fb9c94

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

src/loader/loader_init_data.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ XrResult InitializeLoaderInitData(const XrLoaderInitInfoBaseHeaderKHR* loaderIni
8888

8989
//! Modifies @p out_manifest and @p out_runtime_source only if returning successfully
9090
XrResult GetPlatformRuntimeVirtualManifest(Json::Value& out_manifest, ManifestFileSource& out_runtime_source);
91+
92+
//! Modifies @p out_manifest only if returning successfully
93+
XrResult GetPlatformApiLayerVirtualManifests(bool is_implicit, bool system_broker, std::vector<Json::Value>& out_manifest);
94+
9195
std::string GetAndroidNativeLibraryDir();
9296
void* Android_Get_Asset_Manager();
9397
#endif // XR_USE_PLATFORM_ANDROID

src/loader/runtime_interface.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,25 @@ XrResult GetPlatformRuntimeVirtualManifest(Json::Value& out_manifest, ManifestFi
5858
out_manifest = virtualManifest;
5959
return XR_SUCCESS;
6060
}
61+
62+
XrResult GetPlatformApiLayerVirtualManifests(bool is_implicit, bool system_broker, std::vector<Json::Value>& out_manifest) {
63+
using wrap::android::content::Context;
64+
auto& initData = LoaderInitData::instance();
65+
if (!initData.initialized()) {
66+
return XR_ERROR_INITIALIZATION_FAILED;
67+
}
68+
auto context = Context(reinterpret_cast<jobject>(initData.getData().applicationContext));
69+
if (context.isNull()) {
70+
return XR_ERROR_INITIALIZATION_FAILED;
71+
}
72+
std::vector<Json::Value> virtualManifests;
73+
if (0 != openxr_android::getApiLayerVirtualManifests(is_implicit ? "implicit" : "explicit", context, virtualManifests,
74+
system_broker)) {
75+
return XR_ERROR_INITIALIZATION_FAILED;
76+
}
77+
out_manifest = virtualManifests;
78+
return XR_SUCCESS;
79+
}
6180
#endif // defined(XR_USE_PLATFORM_ANDROID) && defined(XR_KHR_LOADER_INIT_SUPPORT)
6281

6382
XrResult RuntimeInterface::TryLoadingSingleRuntime(const std::string& openxr_command,

0 commit comments

Comments
 (0)