Make d3d12 build by default if possible
This commit is contained in:
@@ -8,7 +8,7 @@ license = "MIT/Apache-2.0"
|
|||||||
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["vulkan"]
|
default = ["vulkan", "d3d12"]
|
||||||
force-link = ["openxr/linked"]
|
force-link = ["openxr/linked"]
|
||||||
vulkan = ["wgpu-core/vulkan"]
|
vulkan = ["wgpu-core/vulkan"]
|
||||||
d3d12 = ["wgpu-core/dx12", "dep:winapi", "dep:d3d12"]
|
d3d12 = ["wgpu-core/dx12", "dep:winapi", "dep:d3d12"]
|
||||||
@@ -22,11 +22,9 @@ ash = "0.37.3"
|
|||||||
bevy = "0.13"
|
bevy = "0.13"
|
||||||
futures-lite = "2.0.1"
|
futures-lite = "2.0.1"
|
||||||
mint = "0.5.9"
|
mint = "0.5.9"
|
||||||
winapi = { version = "0.3.9", optional = true }
|
|
||||||
wgpu = "0.19"
|
wgpu = "0.19"
|
||||||
wgpu-core = { version = "0.19" }
|
wgpu-core = { version = "0.19" }
|
||||||
wgpu-hal = "0.19"
|
wgpu-hal = "0.19"
|
||||||
d3d12 = { version = "0.19", features = ["libloading"], optional = true }
|
|
||||||
eyre = "0.6.11"
|
eyre = "0.6.11"
|
||||||
|
|
||||||
[target.'cfg(windows)'.dependencies]
|
[target.'cfg(windows)'.dependencies]
|
||||||
@@ -35,6 +33,9 @@ openxr = { git = "https://github.com/Ralith/openxrs", rev = "0177d2d", features
|
|||||||
"static",
|
"static",
|
||||||
"mint",
|
"mint",
|
||||||
] }
|
] }
|
||||||
|
winapi = { version = "0.3.9", optional = true }
|
||||||
|
d3d12 = { version = "0.19", features = ["libloading"], optional = true }
|
||||||
|
|
||||||
[target.'cfg(all(target_family = "unix", not(target_arch = "wasm32")) )'.dependencies]
|
[target.'cfg(all(target_family = "unix", not(target_arch = "wasm32")) )'.dependencies]
|
||||||
openxr = { git = "https://github.com/Ralith/openxrs", rev = "0177d2d", features = [
|
openxr = { git = "https://github.com/Ralith/openxrs", rev = "0177d2d", features = [
|
||||||
"mint",
|
"mint",
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ use crate::resources::{
|
|||||||
XrFrameWaiter, XrInstance, XrResolution, XrSession, XrSessionRunning, XrSwapchain, XrViews,
|
XrFrameWaiter, XrInstance, XrResolution, XrSession, XrSessionRunning, XrSwapchain, XrViews,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
use crate::resources::D3D12OXrSessionSetupInfo;
|
use crate::resources::D3D12OXrSessionSetupInfo;
|
||||||
#[cfg(feature = "vulkan")]
|
#[cfg(feature = "vulkan")]
|
||||||
use crate::resources::VulkanOXrSessionSetupInfo;
|
use crate::resources::VulkanOXrSessionSetupInfo;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
pub mod extensions;
|
pub mod extensions;
|
||||||
|
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
mod d3d12;
|
mod d3d12;
|
||||||
#[cfg(feature = "vulkan")]
|
#[cfg(feature = "vulkan")]
|
||||||
mod vulkan;
|
mod vulkan;
|
||||||
@@ -69,27 +69,25 @@ pub fn start_xr_session(
|
|||||||
XrViews,
|
XrViews,
|
||||||
XrFrameState,
|
XrFrameState,
|
||||||
)> {
|
)> {
|
||||||
#[cfg(feature = "vulkan")]
|
match session_setup_data {
|
||||||
{
|
#[cfg(feature = "vulkan")]
|
||||||
vulkan::start_xr_session(
|
OXrSessionSetupInfo::Vulkan(_) => vulkan::start_xr_session(
|
||||||
window,
|
window,
|
||||||
session_setup_data,
|
session_setup_data,
|
||||||
xr_instance,
|
xr_instance,
|
||||||
render_device,
|
render_device,
|
||||||
render_adapter,
|
render_adapter,
|
||||||
wgpu_instance,
|
wgpu_instance,
|
||||||
)
|
),
|
||||||
}
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
#[cfg(feature = "d3d12")]
|
OXrSessionSetupInfo::D3D12(_) => d3d12::start_xr_session(
|
||||||
{
|
|
||||||
d3d12::start_xr_session(
|
|
||||||
window,
|
window,
|
||||||
session_setup_data,
|
session_setup_data,
|
||||||
xr_instance,
|
xr_instance,
|
||||||
render_device,
|
render_device,
|
||||||
render_adapter,
|
render_adapter,
|
||||||
wgpu_instance,
|
wgpu_instance,
|
||||||
)
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn initialize_xr_instance(
|
pub fn initialize_xr_instance(
|
||||||
@@ -134,7 +132,7 @@ pub fn initialize_xr_instance(
|
|||||||
app_info,
|
app_info,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
Backend::D3D12 => {
|
Backend::D3D12 => {
|
||||||
if !available_extensions.raw().khr_d3d12_enable {
|
if !available_extensions.raw().khr_d3d12_enable {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
39
src/lib.rs
39
src/lib.rs
@@ -175,7 +175,7 @@ impl Plugin for OpenXrPlugin {
|
|||||||
pub enum Backend {
|
pub enum Backend {
|
||||||
#[cfg(feature = "vulkan")]
|
#[cfg(feature = "vulkan")]
|
||||||
Vulkan,
|
Vulkan,
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
D3D12,
|
D3D12,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,21 +222,30 @@ fn xr_skip_frame(
|
|||||||
environment_blend_mode: Res<XrEnvironmentBlendMode>,
|
environment_blend_mode: Res<XrEnvironmentBlendMode>,
|
||||||
) {
|
) {
|
||||||
let swapchain: &Swapchain = &xr_swapchain;
|
let swapchain: &Swapchain = &xr_swapchain;
|
||||||
let stream = match swapchain {
|
match swapchain {
|
||||||
#[cfg(feature = "vulkan")]
|
#[cfg(feature = "vulkan")]
|
||||||
Swapchain::Vulkan(swap) => &swap.stream,
|
Swapchain::Vulkan(swap) => &swap
|
||||||
#[cfg(feature = "d3d12")]
|
.stream
|
||||||
Swapchain::D3D12(swap) => &swap.stream,
|
.lock()
|
||||||
|
.unwrap()
|
||||||
|
.end(
|
||||||
|
xr_frame_state.predicted_display_time,
|
||||||
|
**environment_blend_mode,
|
||||||
|
&[],
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
|
Swapchain::D3D12(swap) => &swap
|
||||||
|
.stream
|
||||||
|
.lock()
|
||||||
|
.unwrap()
|
||||||
|
.end(
|
||||||
|
xr_frame_state.predicted_display_time,
|
||||||
|
**environment_blend_mode,
|
||||||
|
&[],
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
};
|
};
|
||||||
stream
|
|
||||||
.lock()
|
|
||||||
.unwrap()
|
|
||||||
.end(
|
|
||||||
xr_frame_state.predicted_display_time,
|
|
||||||
**environment_blend_mode,
|
|
||||||
&[],
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct DefaultXrPlugins {
|
pub struct DefaultXrPlugins {
|
||||||
@@ -252,7 +261,7 @@ impl Default for DefaultXrPlugins {
|
|||||||
backend_preference: vec![
|
backend_preference: vec![
|
||||||
#[cfg(feature = "vulkan")]
|
#[cfg(feature = "vulkan")]
|
||||||
Backend::Vulkan,
|
Backend::Vulkan,
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
Backend::D3D12,
|
Backend::D3D12,
|
||||||
],
|
],
|
||||||
reqeusted_extensions: default(),
|
reqeusted_extensions: default(),
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ pub fn create_passthrough(
|
|||||||
XrSession::Vulkan(session) => {
|
XrSession::Vulkan(session) => {
|
||||||
session.create_passthrough(xr::PassthroughFlagsFB::IS_RUNNING_AT_CREATION)
|
session.create_passthrough(xr::PassthroughFlagsFB::IS_RUNNING_AT_CREATION)
|
||||||
}
|
}
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
XrSession::D3D12(session) => {
|
XrSession::D3D12(session) => {
|
||||||
session.create_passthrough(xr::PassthroughFlagsFB::IS_RUNNING_AT_CREATION)
|
session.create_passthrough(xr::PassthroughFlagsFB::IS_RUNNING_AT_CREATION)
|
||||||
}
|
}
|
||||||
@@ -212,7 +212,7 @@ pub fn create_passthrough(
|
|||||||
XrSession::Vulkan(session) => {
|
XrSession::Vulkan(session) => {
|
||||||
session.create_passthrough_layer(&passthrough, flags, purpose)
|
session.create_passthrough_layer(&passthrough, flags, purpose)
|
||||||
}
|
}
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
XrSession::D3D12(session) => session.create_passthrough_layer(&passthrough, flags, purpose),
|
XrSession::D3D12(session) => session.create_passthrough_layer(&passthrough, flags, purpose),
|
||||||
}?;
|
}?;
|
||||||
Ok((passthrough, passthrough_layer))
|
Ok((passthrough, passthrough_layer))
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ use bevy::render::extract_component::ExtractComponent;
|
|||||||
use bevy::render::extract_resource::{ExtractResource, ExtractResourcePlugin};
|
use bevy::render::extract_resource::{ExtractResource, ExtractResourcePlugin};
|
||||||
use core::ptr;
|
use core::ptr;
|
||||||
use openxr as xr;
|
use openxr as xr;
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
use winapi::um::d3d12::{ID3D12CommandQueue, ID3D12Device};
|
use winapi::um::d3d12::{ID3D12CommandQueue, ID3D12Device};
|
||||||
|
|
||||||
xr_resource_wrapper!(XrInstance, xr::Instance);
|
xr_resource_wrapper!(XrInstance, xr::Instance);
|
||||||
@@ -31,7 +31,7 @@ xr_no_clone_resource_wrapper!(XrFrameWaiter, xr::FrameWaiter);
|
|||||||
pub enum XrSession {
|
pub enum XrSession {
|
||||||
#[cfg(feature = "vulkan")]
|
#[cfg(feature = "vulkan")]
|
||||||
Vulkan(xr::Session<xr::Vulkan>),
|
Vulkan(xr::Session<xr::Vulkan>),
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
D3D12(xr::Session<xr::D3D12>),
|
D3D12(xr::Session<xr::D3D12>),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@ impl std::ops::Deref for XrSession {
|
|||||||
match self {
|
match self {
|
||||||
#[cfg(feature = "vulkan")]
|
#[cfg(feature = "vulkan")]
|
||||||
XrSession::Vulkan(sess) => std::mem::transmute(sess),
|
XrSession::Vulkan(sess) => std::mem::transmute(sess),
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
XrSession::D3D12(sess) => std::mem::transmute(sess),
|
XrSession::D3D12(sess) => std::mem::transmute(sess),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -60,7 +60,7 @@ pub struct VulkanOXrSessionSetupInfo {
|
|||||||
pub(crate) xr_system_id: xr::SystemId,
|
pub(crate) xr_system_id: xr::SystemId,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
pub struct D3D12OXrSessionSetupInfo {
|
pub struct D3D12OXrSessionSetupInfo {
|
||||||
pub(crate) raw_device: *mut ID3D12Device,
|
pub(crate) raw_device: *mut ID3D12Device,
|
||||||
pub(crate) raw_queue: *mut ID3D12CommandQueue,
|
pub(crate) raw_queue: *mut ID3D12CommandQueue,
|
||||||
@@ -70,7 +70,7 @@ pub struct D3D12OXrSessionSetupInfo {
|
|||||||
pub enum OXrSessionSetupInfo {
|
pub enum OXrSessionSetupInfo {
|
||||||
#[cfg(feature = "vulkan")]
|
#[cfg(feature = "vulkan")]
|
||||||
Vulkan(VulkanOXrSessionSetupInfo),
|
Vulkan(VulkanOXrSessionSetupInfo),
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
D3D12(D3D12OXrSessionSetupInfo),
|
D3D12(D3D12OXrSessionSetupInfo),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ impl Plugin for XrResourcePlugin {
|
|||||||
pub enum Swapchain {
|
pub enum Swapchain {
|
||||||
#[cfg(feature = "vulkan")]
|
#[cfg(feature = "vulkan")]
|
||||||
Vulkan(SwapchainInner<xr::Vulkan>),
|
Vulkan(SwapchainInner<xr::Vulkan>),
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
D3D12(SwapchainInner<xr::D3D12>),
|
D3D12(SwapchainInner<xr::D3D12>),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ impl Swapchain {
|
|||||||
match self {
|
match self {
|
||||||
#[cfg(feature = "vulkan")]
|
#[cfg(feature = "vulkan")]
|
||||||
Swapchain::Vulkan(swapchain) => swapchain.begin(),
|
Swapchain::Vulkan(swapchain) => swapchain.begin(),
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
Swapchain::D3D12(swapchain) => swapchain.begin(),
|
Swapchain::D3D12(swapchain) => swapchain.begin(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -111,7 +111,7 @@ impl Swapchain {
|
|||||||
match self {
|
match self {
|
||||||
#[cfg(feature = "vulkan")]
|
#[cfg(feature = "vulkan")]
|
||||||
Swapchain::Vulkan(swapchain) => swapchain.get_render_views(),
|
Swapchain::Vulkan(swapchain) => swapchain.get_render_views(),
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
Swapchain::D3D12(swapchain) => swapchain.get_render_views(),
|
Swapchain::D3D12(swapchain) => swapchain.get_render_views(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -120,7 +120,7 @@ impl Swapchain {
|
|||||||
match self {
|
match self {
|
||||||
#[cfg(feature = "vulkan")]
|
#[cfg(feature = "vulkan")]
|
||||||
Swapchain::Vulkan(swapchain) => swapchain.acquire_image(),
|
Swapchain::Vulkan(swapchain) => swapchain.acquire_image(),
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
Swapchain::D3D12(swapchain) => swapchain.acquire_image(),
|
Swapchain::D3D12(swapchain) => swapchain.acquire_image(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -129,7 +129,7 @@ impl Swapchain {
|
|||||||
match self {
|
match self {
|
||||||
#[cfg(feature = "vulkan")]
|
#[cfg(feature = "vulkan")]
|
||||||
Swapchain::Vulkan(swapchain) => swapchain.wait_image(),
|
Swapchain::Vulkan(swapchain) => swapchain.wait_image(),
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
Swapchain::D3D12(swapchain) => swapchain.wait_image(),
|
Swapchain::D3D12(swapchain) => swapchain.wait_image(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -138,7 +138,7 @@ impl Swapchain {
|
|||||||
match self {
|
match self {
|
||||||
#[cfg(feature = "vulkan")]
|
#[cfg(feature = "vulkan")]
|
||||||
Swapchain::Vulkan(swapchain) => swapchain.release_image(),
|
Swapchain::Vulkan(swapchain) => swapchain.release_image(),
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
Swapchain::D3D12(swapchain) => swapchain.release_image(),
|
Swapchain::D3D12(swapchain) => swapchain.release_image(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -162,7 +162,7 @@ impl Swapchain {
|
|||||||
environment_blend_mode,
|
environment_blend_mode,
|
||||||
passthrough_layer,
|
passthrough_layer,
|
||||||
),
|
),
|
||||||
#[cfg(feature = "d3d12")]
|
#[cfg(all(feature = "d3d12", windows))]
|
||||||
Swapchain::D3D12(swapchain) => swapchain.end(
|
Swapchain::D3D12(swapchain) => swapchain.end(
|
||||||
predicted_display_time,
|
predicted_display_time,
|
||||||
views,
|
views,
|
||||||
|
|||||||
Reference in New Issue
Block a user