Skip to content

Commit f2f7c5d

Browse files
bors[bot]kvark
andcommitted
Merge #2169
2169: Persistent Metal swapchain r=grovesNL a=kvark Includes #2164 Fixes #2168 Fixes #2143 Removes deferred image resolution (yay!), and also renames some of the outdated concepts. We have no flickering, and proper frame sync now. PR checklist: - [x] `make` succeeds (on *nix) - [x] `make reftests` succeeds - [x] tested examples with the following backends: Co-authored-by: Dzmitry Malyshau <[email protected]>
2 parents 1f3692f + 1f4cbc4 commit f2f7c5d

File tree

21 files changed

+423
-386
lines changed

21 files changed

+423
-386
lines changed

examples/quad/main.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -463,8 +463,8 @@ fn main() {
463463

464464
device.reset_fence(&frame_fence);
465465
command_pool.reset();
466-
let frame: hal::FrameImage = {
467-
match swap_chain.acquire_frame(FrameSync::Semaphore(&mut frame_semaphore)) {
466+
let frame: hal::SwapImageIndex = {
467+
match swap_chain.acquire_image(FrameSync::Semaphore(&mut frame_semaphore)) {
468468
Ok(i) => i,
469469
Err(_) => {
470470
recreate_swapchain = true;
@@ -599,6 +599,7 @@ fn swapchain_stuff(
599599
println!("Surface format: {:?}", format);
600600
let swap_config = SwapchainConfig::new()
601601
.with_color(format)
602+
.with_image_count(caps.image_count.start)
602603
.with_image_usage(i::Usage::COLOR_ATTACHMENT);
603604
let (swap_chain, backbuffer) = device.create_swapchain(surface, swap_config, None, &extent);
604605

src/backend/dx11/src/lib.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ extern crate winit;
1515
extern crate wio;
1616

1717
use hal::{buffer, command, error, format, image, memory, query, pso, Features, Limits, QueueType};
18-
use hal::{DrawCount, FrameImage, IndexCount, InstanceCount, VertexCount, VertexOffset, WorkGroupCount};
18+
use hal::{DrawCount, SwapImageIndex, IndexCount, InstanceCount, VertexCount, VertexOffset, WorkGroupCount};
1919
use hal::queue::{QueueFamilyId, Queues};
2020
use hal::backend::RawQueueGroup;
2121
use hal::range::RangeArg;
@@ -639,7 +639,7 @@ unsafe impl Send for Swapchain { }
639639
unsafe impl Sync for Swapchain { }
640640

641641
impl hal::Swapchain<Backend> for Swapchain {
642-
fn acquire_frame(&mut self, _sync: hal::FrameSync<Backend>) -> Result<hal::FrameImage, ()> {
642+
fn acquire_image(&mut self, _sync: hal::FrameSync<Backend>) -> Result<hal::SwapImageIndex, ()> {
643643
// TODO: non-`_DISCARD` swap effects have more than one buffer, `FLIP`
644644
// effects are dxgi 1.3 (w10+?) in which case there is
645645
// `GetCurrentBackBufferIndex()` on the swapchain
@@ -681,7 +681,7 @@ impl hal::queue::RawCommandQueue<Backend> for CommandQueue {
681681

682682
fn present<IS, S, IW>(&mut self, swapchains: IS, _wait_semaphores: IW) -> Result<(), ()>
683683
where
684-
IS: IntoIterator<Item = (S, FrameImage)>,
684+
IS: IntoIterator<Item = (S, SwapImageIndex)>,
685685
S: Borrow<Swapchain>,
686686
IW: IntoIterator,
687687
IW::Item: Borrow<Semaphore>,

src/backend/dx12/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ mod pool;
2424
mod root_constants;
2525
mod window;
2626

27-
use hal::{error, format as f, image, memory, Features, FrameImage, Limits, QueueType};
27+
use hal::{error, format as f, image, memory, Features, SwapImageIndex, Limits, QueueType};
2828
use hal::queue::{QueueFamilyId, Queues};
2929
use descriptors_cpu::DescriptorCpuPool;
3030

@@ -468,7 +468,7 @@ impl hal::queue::RawCommandQueue<Backend> for CommandQueue {
468468

469469
fn present<IS, S, IW>(&mut self, swapchains: IS, _wait_semaphores: IW) -> Result<(), ()>
470470
where
471-
IS: IntoIterator<Item = (S, FrameImage)>,
471+
IS: IntoIterator<Item = (S, SwapImageIndex)>,
472472
S: Borrow<window::Swapchain>,
473473
IW: IntoIterator,
474474
IW::Item: Borrow<native::Semaphore>,

src/backend/dx12/src/window.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ pub struct Swapchain {
109109
}
110110

111111
impl hal::Swapchain<Backend> for Swapchain {
112-
fn acquire_frame(&mut self, _sync: hal::FrameSync<Backend>) -> Result<hal::FrameImage, ()> {
112+
fn acquire_image(&mut self, _sync: hal::FrameSync<Backend>) -> Result<hal::SwapImageIndex, ()> {
113113
// TODO: sync
114114

115115
if false {

src/backend/empty/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ impl queue::RawCommandQueue<Backend> for RawCommandQueue {
9898

9999
fn present<IS, S, IW>(&mut self, _: IS, _: IW) -> Result<(), ()>
100100
where
101-
IS: IntoIterator<Item = (S, hal::FrameImage)>,
101+
IS: IntoIterator<Item = (S, hal::SwapImageIndex)>,
102102
S: Borrow<Swapchain>,
103103
IW: IntoIterator,
104104
IW::Item: Borrow<()>,
@@ -785,7 +785,7 @@ impl hal::Surface<Backend> for Surface {
785785
/// Dummy swapchain.
786786
pub struct Swapchain;
787787
impl hal::Swapchain<Backend> for Swapchain {
788-
fn acquire_frame(&mut self, _: hal::FrameSync<Backend>) -> Result<hal::FrameImage, ()> {
788+
fn acquire_image(&mut self, _: hal::FrameSync<Backend>) -> Result<hal::SwapImageIndex, ()> {
789789
unimplemented!()
790790
}
791791
}

src/backend/gl/src/queue.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -722,7 +722,7 @@ impl hal::queue::RawCommandQueue<Backend> for CommandQueue {
722722
#[cfg(feature = "glutin")]
723723
fn present<IS, S, IW>(&mut self, swapchains: IS, _wait_semaphores: IW) -> Result<(), ()>
724724
where
725-
IS: IntoIterator<Item = (S, hal::FrameImage)>,
725+
IS: IntoIterator<Item = (S, hal::SwapImageIndex)>,
726726
S: Borrow<window::glutin::Swapchain>,
727727
IW: IntoIterator,
728728
IW::Item: Borrow<native::Semaphore>,

src/backend/gl/src/window/glutin.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ pub struct Swapchain {
6565
}
6666

6767
impl hal::Swapchain<B> for Swapchain {
68-
fn acquire_frame(&mut self, _sync: hal::FrameSync<B>) -> Result<hal::FrameImage, ()> {
68+
fn acquire_image(&mut self, _sync: hal::FrameSync<B>) -> Result<hal::SwapImageIndex, ()> {
6969
// TODO: sync
7070
Ok(0)
7171
}

0 commit comments

Comments
 (0)