Skip to content
This repository was archived by the owner on Jun 18, 2021. It is now read-only.

Commit 0641ef6

Browse files
bors[bot]kvark
andauthored
Merge #70
70: Wholesome update for wgpu-0.3 r=everyone a=kvark ~~This update is a little more opinionated, i.e. the BGL creation just accepts a slice of things instead of a descriptor. I believe the reason for descriptors in the upstream API is mostly techincal - it's more convenient to generate bindings in Googles giant codegen. Following it verbatim doesn't appear to be strictly necessary, especially if we can extract better usability from Rust features.~~ The change also disables "gl" feature for the release. We'll re-enable it once we can provide it nicely, it will not be a breaking change. I also noticed that barriers are not working correctly on the mipmap example. Will investigate separately - the native part is already published anyway. Edit: fixed by gfx-rs/wgpu#302 Co-authored-by: Dzmitry Malyshau <[email protected]>
2 parents 925e526 + c2743c2 commit 0641ef6

File tree

12 files changed

+352
-292
lines changed

12 files changed

+352
-292
lines changed

.travis.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ branches:
1010
- staging.tmp
1111

1212
script:
13-
- cargo test
13+
- cargo check
1414
- if [[ $TRAVIS_OS_NAME == "linux" ]]; then cargo test --no-run --features vulkan; fi
15-
- if [[ $TRAVIS_OS_NAME == "windows" ]]; then cargo test --no-run --features vulkan; fi
15+
- if [[ $TRAVIS_OS_NAME == "osx" ]]; then cargo test --no-run --features metal; fi
16+
- if [[ $TRAVIS_OS_NAME == "windows" ]]; then cargo test --no-run --features dx12; fi

Cargo.toml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@ version = "0.3.0"
44
authors = [
55
"Dzmitry Malyshau <[email protected]>",
66
"Joshua Groves <[email protected]>",
7+
"Lucas Kent <[email protected]>",
8+
"kyren <[email protected]>",
9+
"Cormac O'Brien <[email protected]>",
710
]
811
edition = "2018"
9-
description = "Rusty wgpu API wrapper"
12+
description = "Rusty WebGPU API wrapper"
1013
homepage = "https://github.com/gfx-rs/wgpu-rs"
1114
repository = "https://github.com/gfx-rs/wgpu-rs"
1215
keywords = ["graphics"]
@@ -20,12 +23,13 @@ metal = ["wgn/gfx-backend-metal"]
2023
dx11 = ["wgn/gfx-backend-dx11"]
2124
dx12 = ["wgn/gfx-backend-dx12"]
2225
vulkan = ["wgn/gfx-backend-vulkan"]
23-
gl = ["wgn/gfx-backend-gl"]
26+
#TODO: there is no way to use glutin-0.20 with GL backend v0.3 yet
27+
#gl = ["wgn/gfx-backend-gl"]
2428

2529
[dependencies]
26-
#TODO: only depend on the published version
27-
wgn = { package = "wgpu-native", version = "0.2.6", features = ["local", "window-winit"], git = "https://github.com/gfx-rs/wgpu", rev = "a47ff090bb042f1cb2ad7b13c76eca228390a311"}
30+
wgn = { package = "wgpu-native", version = "0.3.1", features = ["local"] }
2831
arrayvec = "0.4"
32+
raw-window-handle = "0.1"
2933
zerocopy = "0.2"
3034

3135
[dev-dependencies]
@@ -34,3 +38,4 @@ env_logger = "0.6"
3438
glsl-to-spirv = "0.1"
3539
log = "0.4"
3640
png = "0.15"
41+
winit = "0.20.0-alpha3"

examples/capture/main.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ fn main() {
99

1010
let instance = wgpu::Instance::new();
1111

12-
let adapter = instance.get_adapter(Some(&wgpu::RequestAdapterOptions {
12+
let adapter = instance.request_adapter(&wgpu::RequestAdapterOptions {
1313
power_preference: wgpu::PowerPreference::LowPower,
14-
}));
14+
});
1515

16-
let mut device = adapter.request_device(Some(&wgpu::DeviceDescriptor {
16+
let mut device = adapter.request_device(&wgpu::DeviceDescriptor {
1717
extensions: wgpu::Extensions {
1818
anisotropic_filtering: false,
1919
},
2020
limits: wgpu::Limits::default(),
21-
}));
21+
});
2222

2323
// Rendered image is 256×256 with 32-bit RGBA color
2424
let size = 256u32;
@@ -52,7 +52,7 @@ fn main() {
5252
device.create_command_encoder(&wgpu::CommandEncoderDescriptor { todo: 0 });
5353
encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
5454
color_attachments: &[wgpu::RenderPassColorAttachmentDescriptor {
55-
attachment: &texture.create_view(None),
55+
attachment: &texture.create_default_view(),
5656
resolve_target: None,
5757
load_op: wgpu::LoadOp::Clear,
5858
store_op: wgpu::StoreOp::Store,
@@ -78,7 +78,7 @@ fn main() {
7878
texture_extent,
7979
);
8080

81-
encoder.finish(None)
81+
encoder.finish()
8282
};
8383

8484
device.get_queue().submit(&[command_buffer]);

examples/cube/main.rs

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -129,26 +129,22 @@ impl framework::Example for Example {
129129
wgpu::BindGroupLayoutBinding {
130130
binding: 0,
131131
visibility: wgpu::ShaderStage::VERTEX,
132-
ty: wgpu::BindingType::UniformBuffer,
133-
dynamic: false,
134-
multisampled: false,
135-
texture_dimension: wgpu::TextureViewDimension::D2,
132+
ty: wgpu::BindingType::UniformBuffer {
133+
dynamic: false,
134+
},
136135
},
137136
wgpu::BindGroupLayoutBinding {
138137
binding: 1,
139138
visibility: wgpu::ShaderStage::FRAGMENT,
140-
ty: wgpu::BindingType::SampledTexture,
141-
dynamic: false,
142-
multisampled: false,
143-
texture_dimension: wgpu::TextureViewDimension::D2,
139+
ty: wgpu::BindingType::SampledTexture {
140+
multisampled: false,
141+
dimension: wgpu::TextureViewDimension::D2,
142+
},
144143
},
145144
wgpu::BindGroupLayoutBinding {
146145
binding: 2,
147146
visibility: wgpu::ShaderStage::FRAGMENT,
148147
ty: wgpu::BindingType::Sampler,
149-
dynamic: false,
150-
multisampled: false,
151-
texture_dimension: wgpu::TextureViewDimension::D2,
152148
},
153149
],
154150
});
@@ -173,7 +169,7 @@ impl framework::Example for Example {
173169
format: wgpu::TextureFormat::Rgba8UnormSrgb,
174170
usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST,
175171
});
176-
let texture_view = texture.create_view(None);
172+
let texture_view = texture.create_default_view();
177173
let temp_buf = device
178174
.create_buffer_mapped(texels.len(), wgpu::BufferUsage::COPY_SRC)
179175
.fill_from_slice(&texels);
@@ -298,7 +294,7 @@ impl framework::Example for Example {
298294
});
299295

300296
// Done
301-
let init_command_buf = init_encoder.finish(None);
297+
let init_command_buf = init_encoder.finish();
302298
device.get_queue().submit(&[init_command_buf]);
303299
Example {
304300
vertex_buf,
@@ -310,7 +306,7 @@ impl framework::Example for Example {
310306
}
311307
}
312308

313-
fn update(&mut self, _event: wgpu::winit::WindowEvent) {
309+
fn update(&mut self, _event: winit::event::WindowEvent) {
314310
//empty
315311
}
316312

@@ -325,7 +321,7 @@ impl framework::Example for Example {
325321
let mut encoder =
326322
device.create_command_encoder(&wgpu::CommandEncoderDescriptor { todo: 0 });
327323
encoder.copy_buffer_to_buffer(&temp_buf, 0, &self.uniform_buf, 0, 64);
328-
device.get_queue().submit(&[encoder.finish(None)]);
324+
device.get_queue().submit(&[encoder.finish()]);
329325
}
330326

331327
fn render(&mut self, frame: &wgpu::SwapChainOutput, device: &mut wgpu::Device) {
@@ -354,7 +350,7 @@ impl framework::Example for Example {
354350
rpass.draw_indexed(0 .. self.index_count as u32, 0, 0 .. 1);
355351
}
356352

357-
device.get_queue().submit(&[encoder.finish(None)]);
353+
device.get_queue().submit(&[encoder.finish()]);
358354
}
359355
}
360356

examples/framework.rs

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use log::info;
2+
use winit::event::WindowEvent;
23

34
#[cfg_attr(rustfmt, rustfmt_skip)]
5+
#[allow(unused)]
46
pub const OPENGL_TO_WGPU_MATRIX: cgmath::Matrix4<f32> = cgmath::Matrix4::new(
57
1.0, 0.0, 0.0, 0.0,
68
0.0, -1.0, 0.0, 0.0,
@@ -33,53 +35,47 @@ pub fn load_glsl(code: &str, stage: ShaderStage) -> Vec<u32> {
3335
wgpu::read_spirv(glsl_to_spirv::compile(&code, ty).unwrap()).unwrap()
3436
}
3537

36-
pub trait Example {
38+
pub trait Example: 'static {
3739
fn init(sc_desc: &wgpu::SwapChainDescriptor, device: &mut wgpu::Device) -> Self;
3840
fn resize(&mut self, sc_desc: &wgpu::SwapChainDescriptor, device: &mut wgpu::Device);
39-
fn update(&mut self, event: wgpu::winit::WindowEvent);
41+
fn update(&mut self, event: WindowEvent);
4042
fn render(&mut self, frame: &wgpu::SwapChainOutput, device: &mut wgpu::Device);
4143
}
4244

4345
pub fn run<E: Example>(title: &str) {
44-
use wgpu::winit::{
45-
ElementState,
46-
Event,
47-
EventsLoop,
48-
KeyboardInput,
49-
VirtualKeyCode,
50-
WindowEvent,
46+
use winit::{
47+
event_loop::{ControlFlow, EventLoop},
48+
event,
5149
};
5250

5351
env_logger::init();
54-
55-
let mut events_loop = EventsLoop::new();
56-
52+
let event_loop = EventLoop::new();
5753
info!("Initializing the window...");
5854

5955
#[cfg(not(feature = "gl"))]
6056
let (_window, instance, hidpi_factor, size, surface) = {
61-
use wgpu::winit::Window;
57+
use raw_window_handle::HasRawWindowHandle as _;
6258

63-
let instance = wgpu::Instance::new();
6459

65-
let window = Window::new(&events_loop).unwrap();
60+
let window = winit::window::Window::new(&event_loop).unwrap();
6661
window.set_title(title);
67-
let hidpi_factor = window.get_hidpi_factor();
68-
let size = window.get_inner_size().unwrap().to_physical(hidpi_factor);
62+
let hidpi_factor = window.hidpi_factor();
63+
let size = window.inner_size().to_physical(hidpi_factor);
6964

70-
let surface = instance.create_surface(&window);
65+
let instance = wgpu::Instance::new();
66+
let surface = instance.create_surface(window.raw_window_handle());
7167

7268
(window, instance, hidpi_factor, size, surface)
7369
};
7470

7571
#[cfg(feature = "gl")]
7672
let (_window, instance, hidpi_factor, size, surface) = {
77-
let wb = wgpu::winit::WindowBuilder::new();
73+
let wb = winit::WindowBuilder::new();
7874
let cb = wgpu::glutin::ContextBuilder::new().with_vsync(true);
79-
let context = cb.build_windowed(wb, &events_loop).unwrap();
75+
let context = cb.build_windowed(wb, &event_loop).unwrap();
8076
context.window().set_title(title);
8177

82-
let hidpi_factor = context.window().get_hidpi_factor();
78+
let hidpi_factor = context.window().hidpi_factor();
8379
let size = context
8480
.window()
8581
.get_inner_size()
@@ -94,16 +90,16 @@ pub fn run<E: Example>(title: &str) {
9490
(window, instance, hidpi_factor, size, surface)
9591
};
9692

97-
let adapter = instance.get_adapter(Some(&wgpu::RequestAdapterOptions {
93+
let adapter = instance.request_adapter(&wgpu::RequestAdapterOptions {
9894
power_preference: wgpu::PowerPreference::LowPower,
99-
}));
95+
});
10096

101-
let mut device = adapter.request_device(Some(&wgpu::DeviceDescriptor {
97+
let mut device = adapter.request_device(&wgpu::DeviceDescriptor {
10298
extensions: wgpu::Extensions {
10399
anisotropic_filtering: false,
104100
},
105101
limits: wgpu::Limits::default(),
106-
}));
102+
});
107103

108104
let mut sc_desc = wgpu::SwapChainDescriptor {
109105
usage: wgpu::TextureUsage::OUTPUT_ATTACHMENT,
@@ -118,10 +114,14 @@ pub fn run<E: Example>(title: &str) {
118114
let mut example = E::init(&sc_desc, &mut device);
119115

120116
info!("Entering render loop...");
121-
let mut running = true;
122-
while running {
123-
events_loop.poll_events(|event| match event {
124-
Event::WindowEvent {
117+
event_loop.run(move |event, _, control_flow| {
118+
*control_flow = if cfg!(feature = "metal-auto-capture") {
119+
ControlFlow::Exit
120+
} else {
121+
ControlFlow::Poll
122+
};
123+
match event {
124+
event::Event::WindowEvent {
125125
event: WindowEvent::Resized(size),
126126
..
127127
} => {
@@ -132,30 +132,30 @@ pub fn run<E: Example>(title: &str) {
132132
swap_chain = device.create_swap_chain(&surface, &sc_desc);
133133
example.resize(&sc_desc, &mut device);
134134
}
135-
Event::WindowEvent { event, .. } => match event {
135+
event::Event::WindowEvent { event, .. } => match event {
136136
WindowEvent::KeyboardInput {
137137
input:
138-
KeyboardInput {
139-
virtual_keycode: Some(VirtualKeyCode::Escape),
140-
state: ElementState::Pressed,
138+
event::KeyboardInput {
139+
virtual_keycode: Some(event::VirtualKeyCode::Escape),
140+
state: event::ElementState::Pressed,
141141
..
142142
},
143143
..
144144
}
145145
| WindowEvent::CloseRequested => {
146-
running = false;
146+
*control_flow = ControlFlow::Exit;
147147
}
148148
_ => {
149149
example.update(event);
150150
}
151151
},
152+
event::Event::EventsCleared => {
153+
let frame = swap_chain.get_next_texture();
154+
example.render(&frame, &mut device);
155+
}
152156
_ => (),
153-
});
154-
155-
let frame = swap_chain.get_next_texture();
156-
example.render(&frame, &mut device);
157-
running &= !cfg!(feature = "metal-auto-capture");
158-
}
157+
}
158+
});
159159
}
160160

161161
// This allows treating the framework as a standalone example,

examples/hello-compute/main.rs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@ fn main() {
1515
let size = (numbers.len() * std::mem::size_of::<u32>()) as wgpu::BufferAddress;
1616

1717
let instance = wgpu::Instance::new();
18-
let adapter = instance.get_adapter(Some(&wgpu::RequestAdapterOptions {
18+
let adapter = instance.request_adapter(&wgpu::RequestAdapterOptions {
1919
power_preference: wgpu::PowerPreference::Default,
20-
}));
20+
});
2121

22-
let mut device = adapter.request_device(Some(&wgpu::DeviceDescriptor {
22+
let mut device = adapter.request_device(&wgpu::DeviceDescriptor {
2323
extensions: wgpu::Extensions {
2424
anisotropic_filtering: false,
2525
},
2626
limits: wgpu::Limits::default(),
27-
}));
27+
});
2828

2929
let cs = include_bytes!("shader.comp.spv");
3030
let cs_module = device.create_shader_module(&wgpu::read_spirv(std::io::Cursor::new(&cs[..])).unwrap());
@@ -46,14 +46,13 @@ fn main() {
4646
});
4747

4848
let bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
49-
bindings: &[wgpu::BindGroupLayoutBinding {
50-
binding: 0,
51-
visibility: wgpu::ShaderStage::COMPUTE,
52-
ty: wgpu::BindingType::StorageBuffer,
53-
dynamic: false,
54-
multisampled: false,
55-
texture_dimension: wgpu::TextureViewDimension::D2,
56-
}],
49+
bindings: &[
50+
wgpu::BindGroupLayoutBinding {
51+
binding: 0,
52+
visibility: wgpu::ShaderStage::COMPUTE,
53+
ty: wgpu::BindingType::StorageBuffer { dynamic: false, readonly: false },
54+
},
55+
],
5756
});
5857

5958
let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
@@ -89,7 +88,7 @@ fn main() {
8988
}
9089
encoder.copy_buffer_to_buffer(&storage_buffer, 0, &staging_buffer, 0, size);
9190

92-
device.get_queue().submit(&[encoder.finish(None)]);
91+
device.get_queue().submit(&[encoder.finish()]);
9392

9493
staging_buffer.map_read_async(0, size, |result: wgpu::BufferMapAsyncResult<&[u32]>| {
9594
if let Ok(mapping) = result {

0 commit comments

Comments
 (0)