MonadoRuntimeOpenXR

转载自Jakob Bornecrantz / Monado · GitLab

Monado - XR Runtime (XRT)

Monado is an open source XR runtime delivering immersive experiences such as VR and AR on mobile, PC/desktop, and any other device (because gosh darn people come up with a lot of weird hardware). Monado aims to be a complete and conforming implementation of the OpenXR API made by Khronos. The project currently is being developed for GNU/Linux and aims to support other operating systems in the near future. "Monado" has no specific meaning and is just a name.

Monado source tree

  • src/xrt/include - headers that define the internal interfaces of Monado.
  • src/xrt/compositor - code for doing distortion and driving the display hardware of a device.
  • src/xrt/auxiliary - utilities and other larger components.
  • src/xrt/drivers - hardware drivers.
  • src/xrt/state_trackers/oxr - OpenXR API implementation.
  • src/xrt/targets - glue code and build logic to produce final binaries.
  • src/external - a small collection of external code and headers.

Getting Started

Dependencies include:

  • CMake 3.13 or newer (Note Ubuntu 18.04 only has 3.10) or meson >= 0.49
  • Python 3.6 or newer
  • Vulkan headers and loader - Fedora package vulkan-loader-devel
  • OpenGL headers
  • Eigen3
  • glslangValidator - Debian/Ubuntu package glslang-tools, Fedora package glslang.
  • libusb
  • libudev - Fedora package systemd-devel
  • Video 4 Linux - Debian/Ubuntu package libv4l-dev.

Optional (but recommended) dependencies:

  • libxcb and xcb-xrandr development packages
  • OpenHMD 0.3.0 or newer (found using pkg-config)

Truly optional dependencies, useful for some drivers, app support, etc.:

  • Doxygen
  • Wayland development packages
  • Xlib development packages
  • libhidapi
  • OpenCV
  • libuvc
  • ffmpeg
  • libjpeg

Experimental Windows support requires the Vulkan SDK and also needs or works best with the following vcpkg packages installed:

  • pthreads eigen3 libusb hidapi zlib doxygen

If you have a recent vcpkg installed and use the appropriate CMake toolchain file, the vcpkg manifest in the Monado repository will instruct vcpkg to locally install the dependencies automatically.

Tested distributions that are fully compatible, on Intel (Vulkan only) and AMD graphics (Vulkan and OpenGL):

  • Ubuntu 18.10 (18.04 does not work)
  • Debian 10 buster
    • Up-to-date package lists can be found in our CI config file, .gitlab-ci.yml
  • Archlinux

These distributions include recent-enough versions of all the software to use direct mode, without using any external, third-party, or backported package sources.

See also Status of DRM Leases for more details on specific packages, versions, and commits.

Due to the lack of a OpenGL extension: GL_EXT_memory_object_fd on Intel's OpenGL driver, only the AMD radeonsi driver and the proprietary NVIDIA driver will work for OpenGL OpenXR clients. This is due to a requirement of the Compositor. Support status of the extension can be found on the mesamatrix website.

CMake

Build process is similar to other CMake builds, so something like the following will build it.

Go into the source directory, create a build directory, and change into it.

mkdir build
cd build

Then, invoke CMake to generate a project. Feel free to change the build type or generator ("Ninja" is fast and parallel) as you see fit.

cmake .. -DCMAKE_BUILD_TYPE=Debug -G "Unix Makefiles"

If you plan to install the runtime, append something like -DCMAKE_INSTALL_PREFIX=~/.local to specify the root of the install directory. (The default install prefix is /usr/local.)

To build, the generic CMake build commands below will work on all systems, though you can manually invoke your build tool (make, ninja, etc.) if you prefer. The first command builds the runtime and docs, and the second, which is optional, installs the runtime under ${CMAKE_INSTALL_PREFIX}.

cmake --build .
cmake --build . --target install

Alternately, if using Make, the following will build the runtime and docs, then install. Replace make with ninja if you used the Ninja generator.

make
make install

Documentation can be browsed by opening doc/html/index.html in the build directory in a web browser.

Meson

The build process is similar to other Meson builds. For a system wide installation requiring root privileges:

meson --prefix=/usr build
ninja -C build install

For a local installation in ~/.local:

meson --prefix=~/.local -Dinstall-active-runtime=false build
ninja -C build install

Note that the installation of the active_runtime.json file should be disabled for installations without root privileges because this file is always installed in meson's syconfdir (usually /etc).

Getting started using OpenXR with Monado

This implements the OpenXR API, so to do anything with it, you'll need an application that uses OpenXR, along with the OpenXR loader. The OpenXR loader is a glue library that connects OpenXR applications to OpenXR runtimes such as Monado It determines which runtime to use by looking for the config file active_runtime.json (either a symlink to or a copy of a runtime manifest) in the usual XDG config paths and processes environment variables such as XR_RUNTIME_JSON=/usr/share/openxr/0/openxr_monado.json. It can also insert OpenXR API Layers without the application or the runtime having to do it.

You can use the hello_xr sample provided with the OpenXR SDK.

The OpenXR loader can be pointed to a runtime json file in a nonstandard location with the environment variable XR_RUNTIME_JSON. Example:

XR_RUNTIME_JSON=~/monado/build/openxr_monado-dev.json ./openxr-example

For ease of development Monado creates a runtime manifest file in its build directory using an absolute path to the Monado runtime in the build directory called openxr_monado-dev.json. Pointing XR_RUNTIME_JSON to this file allows using Monado after building, without installing.

Note that the loader can always find and load the runtime if the path to the runtime library given in the json manifest is an absolute path, but if a relative path like libopenxr_monado.so.0 is given, then LD_LIBRARY_PATH must include the directory that contains libopenxr_monado.so.0. The absolute path in openxr_monado-dev.json takes care of this for you.

Distribution packages for monado may provide the "active runtime" file /etc/xdg/openxr/1/active_runtime.json. In this case the loader will automatically use Monado when starting an OpenXR application. This global configuration can be overridden on a per user basis by creating ~/.config/openxr/1/active_runtime.json.

Direct mode

On AMD and Intel GPUs our direct mode code requires a connected HMD to have the non-desktop xrandr property set to 1. Only the most common HMDs have the needed quirks added to the linux kernel.

If you know that your HMD lacks the quirk you can run this command before or after connecting the HMD and it will have it. Where HDMI-A-0 is the xrandr output name where you plug the HMD in.

xrandr --output HDMI-A-0 --prop --set non-desktop 1

You can verify that it stuck with the command.

xrandr --prop

Running Vulkan Validation

To run Monado with Vulkan validation the loader's layer functionality can be used.

VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation ./build/src/xrt/targets/service/monado-service

The same can be done when launching a Vulkan client.

If you want a backtrace to be produced at validation errors, create a vk_layer_settings.txt file with the following content:

khronos_validation.debug_action = VK_DBG_LAYER_ACTION_LOG_MSG,VK_DBG_LAYER_ACTION_BREAK
khronos_validation.report_flags = error,warn
khronos_validation.log_filename = stdout

Coding style and formatting

clang-format is used, and a .clang-format config file is present in the repo to allow your editor to use them.

To manually apply clang-format to every non-external source file in the tree, run this command in the source dir with a sh-compatible shell (Git for Windows git-bash should be OK):

scripts/format-project.sh

You can optionally put something like CLANG_FORMAT=clang-format-7 before that command if your clang-format binary isn't named clang-format. Note that you'll typically prefer to use something like git clang-format to just re-format your changes, in case version differences in tools result in overall format changes. The CI "style" job currently runs on Debian Buster, so it has clang-format-7. We will probably update that job to Bullseye or Ubuntu 20.10, which will allow using clang-format-11 by default, soon.

Contributing, Code of Conduct

See CONTRIBUTING.md for details of contribution guidelines. GitLab Issues and Merge Requests are the preferred wait to discuss problems, suggest enhancements, or submit changes for review. In case of a security issue, you should choose the "confidential" option when using the GitLab issues page. For highest security, you can send encrypted email (using GPG/OpenPGP) to Ryan Pavlik, with the address below and the associated key on https://keys.openpgp.org.

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

We follow the standard freedesktop.org code of conduct, available at https://www.freedesktop.org/wiki/CodeOfConduct/, which is based on the Contributor Covenant.

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting:

Code of Conduct section excerpt adapted from the Contributor Covenant, version 1.4.1, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html, and from the freedesktop.org-specific version of that code, available at https://www.freedesktop.org/wiki/CodeOfConduct/, used under CC-BY-4.0.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容