mirror of
https://github.com/gfx-rs/wgpu.git
synced 2024-11-22 14:55:05 +00:00
Raw window handle support instead of winit
This commit is contained in:
parent
9c2019478a
commit
1d36203c9a
@ -59,7 +59,6 @@ script:
|
||||
- cargo test
|
||||
- (cd wgpu-native && cargo check --features local,glutin)
|
||||
# TODO: Temporarily only test building the gl backend, properly test when it is usable from C
|
||||
- if [[ $TRAVIS_OS_NAME == "linux" ]]; then cd wgpu-native && cargo check --features winit-vulkan; fi
|
||||
- if [[ $TRAVIS_OS_NAME == "linux" ]]; then cargo check --release; fi
|
||||
- if [[ $TRAVIS_RUST_VERSION == "nightly" ]]; then cargo +nightly install cbindgen; fi
|
||||
- if [[ $TRAVIS_RUST_VERSION == "nightly" ]] && [[ $TRAVIS_OS_NAME == "windows" ]]; then
|
||||
|
58
Cargo.lock
generated
58
Cargo.lock
generated
@ -313,7 +313,6 @@ dependencies = [
|
||||
"smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"spirv_cross 0.14.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winit 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"wio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@ -331,7 +330,6 @@ dependencies = [
|
||||
"smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"spirv_cross 0.14.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winit 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -340,7 +338,6 @@ version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"gfx-hal 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winit 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -384,7 +381,6 @@ dependencies = [
|
||||
"smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"spirv_cross 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"storage-map 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winit 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -402,7 +398,6 @@ dependencies = [
|
||||
"objc 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winit 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"x11 2.18.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@ -627,14 +622,6 @@ dependencies = [
|
||||
"scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
version = "0.3.1"
|
||||
@ -826,16 +813,6 @@ dependencies = [
|
||||
"parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"lock_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parking_lot_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot"
|
||||
version = "0.9.0"
|
||||
@ -858,21 +835,6 @@ dependencies = [
|
||||
"winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot_core"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot_core"
|
||||
version = "0.6.1"
|
||||
@ -1014,6 +976,14 @@ name = "range-alloc"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "raw-window-handle"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rdrand"
|
||||
version = "0.4.0"
|
||||
@ -1449,7 +1419,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wgpu-native"
|
||||
version = "0.2.6"
|
||||
version = "0.3.0"
|
||||
dependencies = [
|
||||
"arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -1464,11 +1434,11 @@ dependencies = [
|
||||
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"raw-window-handle 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rendy-descriptor 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rendy-memory 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winit 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1477,9 +1447,9 @@ version = "0.1.0"
|
||||
dependencies = [
|
||||
"ipc-channel 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"wgpu-native 0.2.6",
|
||||
"wgpu-native 0.3.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1667,7 +1637,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
"checksum libloading 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3ad660d7cb8c5822cd83d10897b0f1f1526792737a179e73896152f85b88c2"
|
||||
"checksum line_drawing 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5cc7ad3d82c845bdb5dde34ffdcc7a5fb4d2996e1e1ee0f19c33bc80e15196b9"
|
||||
"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c"
|
||||
"checksum lock_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ed946d4529956a20f2d63ebe1b69996d5a2137c91913fe3ebbeff957f5bca7ff"
|
||||
"checksum lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f8912e782533a93a167888781b836336a6ca5da6175c05944c86cf28c31104dc"
|
||||
"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
|
||||
"checksum malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
|
||||
@ -1689,10 +1658,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
"checksum osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b"
|
||||
"checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13"
|
||||
"checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337"
|
||||
"checksum parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa7767817701cce701d5585b9c4db3cdd02086398322c1d7e8bf5094a96a2ce7"
|
||||
"checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
|
||||
"checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9"
|
||||
"checksum parking_lot_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cb88cb1cb3790baa6776844f968fea3be44956cf184fa1be5a03341f5491278c"
|
||||
"checksum parking_lot_core 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1a7bbaa05312363e0480e1efee133fff1a09ef4a6406b65e226b9a793c223a32"
|
||||
"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
|
||||
"checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c"
|
||||
@ -1709,6 +1676,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
|
||||
"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
|
||||
"checksum range-alloc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dd5927936723a9e8b715d37d7e4b390455087c4bdf25b9f702309460577b14f9"
|
||||
"checksum raw-window-handle 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "af3d3b2e1053b3ff2171efc29a8bff3439ce6b2ce6a0432695134bc1c7ff8e87"
|
||||
"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
|
||||
"checksum redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)" = "12229c14a0f65c4f1cb046a3b52047cdd9da1f4b30f8a39c5063c8bae515e252"
|
||||
"checksum relevant 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bbc232e13d37f4547f5b9b42a5efc380cabe5dbc1807f8b893580640b2ab0308"
|
||||
|
@ -16,7 +16,7 @@ WGPUU32Array read_file(const char *name) {
|
||||
fclose(file);
|
||||
return (WGPUU32Array){
|
||||
.bytes = (uint32_t*) bytes,
|
||||
.length = length,
|
||||
.length = length / 4,
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
#define WGPU_LOCAL
|
||||
struct WGPUWindow;
|
||||
|
||||
|
||||
/* Generated with cbindgen:0.9.0 */
|
||||
@ -836,11 +835,6 @@ WGPUSurfaceId wgpu_instance_create_surface_from_windows_hwnd(WGPUInstanceId inst
|
||||
void *hwnd);
|
||||
#endif
|
||||
|
||||
#if (defined(WGPU_LOCAL) && defined(WGPU_WINIT) && !defined(WGPU_GLUTIN))
|
||||
WGPUSurfaceId wgpu_instance_create_surface_from_winit(WGPUInstanceId instance_id,
|
||||
const WGPUWindow *window);
|
||||
#endif
|
||||
|
||||
#if (defined(WGPU_LOCAL) && !defined(WGPU_BACKEND_GL))
|
||||
WGPUSurfaceId wgpu_instance_create_surface_from_xlib(WGPUInstanceId instance_id,
|
||||
const void **display,
|
||||
|
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "wgpu-native"
|
||||
version = "0.2.6"
|
||||
version = "0.3.0"
|
||||
authors = [
|
||||
"Dzmitry Malyshau <kvark@mozilla.com>",
|
||||
"Joshua Groves <josh@joshgroves.com>",
|
||||
@ -20,12 +20,8 @@ default = []
|
||||
local = []
|
||||
remote = ["serde"]
|
||||
metal-auto-capture = ["gfx-backend-metal/auto-capture"]
|
||||
winit-empty = ["winit", "gfx-backend-empty/winit"]
|
||||
winit-vulkan = ["winit", "gfx-backend-vulkan/winit"]
|
||||
winit-dx12 = ["winit", "gfx-backend-dx12/winit"]
|
||||
winit-dx11 = ["winit", "gfx-backend-dx11/winit"]
|
||||
winit-metal = ["winit", "gfx-backend-metal/winit"]
|
||||
glutin = ["winit", "gfx-backend-gl/glutin"]
|
||||
#NOTE: glutin feature is not stable, use at your own risk
|
||||
glutin = ["gfx-backend-gl/glutin"]
|
||||
|
||||
[dependencies]
|
||||
arrayvec = "0.4"
|
||||
@ -40,9 +36,10 @@ gfx-backend-dx12 = { version = "0.3.0", optional = true }
|
||||
gfx-backend-dx11 = { version = "0.3.0", optional = true }
|
||||
gfx-backend-metal = { version = "0.3.0", optional = true }
|
||||
gfx-backend-gl = { version = "0.3.0", optional = true }
|
||||
parking_lot = { version = "0.9" }
|
||||
rendy-memory = { version = "0.4" }
|
||||
rendy-descriptor = { version = "0.4" }
|
||||
parking_lot = "0.9"
|
||||
raw-window-handle = "0.1"
|
||||
rendy-memory = "0.4"
|
||||
rendy-descriptor = "0.4"
|
||||
serde = { version = "1.0", features = ["serde_derive"], optional = true }
|
||||
vec_map = "0.8"
|
||||
winit = { version = "0.19", optional = true }
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
header = """
|
||||
#define WGPU_LOCAL
|
||||
struct WGPUWindow;
|
||||
"""
|
||||
include_version = true
|
||||
braces = "SameLine"
|
||||
|
@ -88,15 +88,56 @@ pub fn wgpu_create_gl_instance(windowed_context: back::glutin::RawContext<back::
|
||||
HUB.surfaces.register_local(surface, &mut Token::root())
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "local", feature = "winit", not(feature = "glutin")))]
|
||||
#[no_mangle]
|
||||
pub extern "C" fn wgpu_instance_create_surface_from_winit(
|
||||
#[cfg(all(feature = "local", not(feature = "gfx-backend-gl")))]
|
||||
pub fn wgpu_instance_create_surface(
|
||||
instance_id: InstanceId,
|
||||
window: &winit::Window,
|
||||
raw_handle: raw_window_handle::RawWindowHandle,
|
||||
) -> SurfaceId {
|
||||
let mut token = Token::root();
|
||||
let (instance_guard, mut token) = HUB.instances.read(&mut token);
|
||||
let raw = instance_guard[instance_id].create_surface(window);
|
||||
let instance = &instance_guard[instance_id];
|
||||
let raw = match raw_handle {
|
||||
#[cfg(all(target_os = "ios", feature = "gfx-backend-metal"))]
|
||||
raw_window_handle::RawWindowHandle::IOS(h) =>
|
||||
instance.create_surface_from_uiview(h.ui_view, cfg!(debug_assertions)),
|
||||
#[cfg(all(target_os = "macos", feature = "gfx-backend-metal"))]
|
||||
raw_window_handle::RawWindowHandle::MacOS(h) =>
|
||||
instance.create_surface_from_nsview(h.ns_view, cfg!(debug_assertions)),
|
||||
#[cfg(all(target_os = "macos", feature = "gfx-backend-vulkan"))]
|
||||
raw_window_handle::RawWindowHandle::MacOS(h) =>
|
||||
instance.create_surface_from_nsview(h.ns_view),
|
||||
#[cfg(all(unix, feature = "gfx-backend-vulkan"))]
|
||||
raw_window_handle::RawWindowHandle::X11(h) =>
|
||||
instance.create_surface_from_xlib(h.display as _, h.window as _),
|
||||
#[cfg(all(unix, feature = "gfx-backend-vulkan"))]
|
||||
raw_window_handle::RawWindowHandle::Wayland(h) =>
|
||||
instance.create_surface_from_wayland(h.display, h.surface),
|
||||
#[cfg(all(windows, feature = "gfx-backend-vulkan"))]
|
||||
raw_window_handle::RawWindowHandle::Windows(h) =>
|
||||
instance.create_surface_from_hwnd(ptr::null_mut(), h.hwnd),
|
||||
#[cfg(all(windows, feature = "gfx-backend-dx12"))]
|
||||
raw_window_handle::RawWindowHandle::Windows(h) =>
|
||||
instance.create_surface_from_hwnd(h.hwnd),
|
||||
#[cfg(all(windows, feature = "gfx-backend-dx12"))]
|
||||
raw_window_handle::RawWindowHandle::Windows(h) =>
|
||||
instance.create_surface_from_hwnd(h.hwnd),
|
||||
#[cfg(any(
|
||||
feature = "gfx-backend-vulkan",
|
||||
feature = "gfx-backend-dx11",
|
||||
feature = "gfx-backend-dx12",
|
||||
feature = "gfx-backend-metal",
|
||||
feature = "gfx-backend-gl",
|
||||
))]
|
||||
_ => panic!("Unsupported window handle"),
|
||||
#[cfg(not(any(
|
||||
feature = "gfx-backend-vulkan",
|
||||
feature = "gfx-backend-dx11",
|
||||
feature = "gfx-backend-dx12",
|
||||
feature = "gfx-backend-metal",
|
||||
feature = "gfx-backend-gl",
|
||||
)))]
|
||||
_ => { let _ = instance; back::Surface },
|
||||
};
|
||||
let surface = SurfaceHandle::new(raw);
|
||||
HUB.surfaces.register_local(surface, &mut token)
|
||||
}
|
||||
@ -221,7 +262,7 @@ pub fn instance_get_adapter(
|
||||
let (surface_guard, _) = HUB.surfaces.read(token);
|
||||
surface_guard[instance_id].raw.enumerate_adapters()
|
||||
};
|
||||
#[cfg(all(feature = "glutin", not(feature = "gfx-backend-gl")))]
|
||||
#[cfg(all(not(feature = "glutin"), feature = "gfx-backend-gl"))]
|
||||
let adapters = Vec::<AdapterHandle>::new();
|
||||
|
||||
let (mut integrated_first, mut discrete_first, mut discrete_last, mut alternative) =
|
||||
|
@ -1,6 +1,3 @@
|
||||
#[cfg(all(feature = "winit"))]
|
||||
pub extern crate winit;
|
||||
|
||||
#[cfg(feature = "gfx-backend-dx11")]
|
||||
extern crate gfx_backend_dx11 as back;
|
||||
#[cfg(feature = "gfx-backend-dx12")]
|
||||
|
@ -19,8 +19,8 @@ metal = ["wgpu-native/gfx-backend-metal"]
|
||||
gl = ["wgpu-native/gfx-backend-gl"]
|
||||
|
||||
[dependencies]
|
||||
wgpu-native = { path = "../wgpu-native", version = "0.2", features = ["remote"] }
|
||||
wgpu-native = { path = "../wgpu-native", version = "0.3", features = ["remote"] }
|
||||
ipc-channel = "0.12"
|
||||
log = "0.4"
|
||||
parking_lot = { version = "0.8" }
|
||||
parking_lot = { version = "0.9" }
|
||||
serde = { version = "1.0", features = ["serde_derive"] }
|
||||
|
Loading…
Reference in New Issue
Block a user