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