Skip to content

Commit 0d2ff00

Browse files
committed
update everything except graph to gfx 0.7, add nograph example
1 parent 960b4e6 commit 0d2ff00

File tree

24 files changed

+713
-156
lines changed

24 files changed

+713
-156
lines changed

command/src/buffer/encoder.rs

+22-39
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,9 @@ where
104104
self.capability.assert();
105105
rendy_core::hal::command::CommandBuffer::bind_index_buffer(
106106
self.raw,
107-
rendy_core::hal::buffer::IndexBufferView {
108-
buffer,
109-
range: rendy_core::hal::buffer::SubRange { offset, size: None },
110-
index_type,
111-
},
107+
buffer,
108+
rendy_core::hal::buffer::SubRange { offset, size: None },
109+
index_type,
112110
)
113111
}
114112

@@ -174,10 +172,8 @@ where
174172
sets: I,
175173
offsets: J,
176174
) where
177-
I: IntoIterator<Item = &'b B::DescriptorSet>,
178-
I::IntoIter: ExactSizeIterator,
179-
J: IntoIterator<Item = u32>,
180-
J::IntoIter: ExactSizeIterator,
175+
I: Iterator<Item = &'b B::DescriptorSet>,
176+
J: Iterator<Item = u32>,
181177
C: Supports<Graphics>,
182178
{
183179
self.capability.assert();
@@ -215,10 +211,8 @@ where
215211
sets: I,
216212
offsets: J,
217213
) where
218-
I: IntoIterator<Item = &'b B::DescriptorSet>,
219-
I::IntoIter: ExactSizeIterator,
220-
J: IntoIterator<Item = u32>,
221-
J::IntoIter: ExactSizeIterator,
214+
I: Iterator<Item = &'b B::DescriptorSet>,
215+
J: Iterator<Item = u32>,
222216
C: Supports<Compute>,
223217
{
224218
self.capability.assert();
@@ -241,7 +235,7 @@ where
241235
&mut self,
242236
stages: std::ops::Range<rendy_core::hal::pso::PipelineStage>,
243237
dependencies: rendy_core::hal::memory::Dependencies,
244-
barriers: impl IntoIterator<Item = rendy_core::hal::memory::Barrier<'b, B>>,
238+
barriers: impl Iterator<Item = rendy_core::hal::memory::Barrier<'b, B>>,
245239
) {
246240
rendy_core::hal::command::CommandBuffer::pipeline_barrier(
247241
self.raw,
@@ -275,10 +269,9 @@ where
275269
/// Set viewports
276270
///
277271
/// See: https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/vkCmdSetViewport.html
278-
pub unsafe fn set_viewports<'b, I>(&mut self, first_viewport: u32, viewports: I)
272+
pub unsafe fn set_viewports<I>(&mut self, first_viewport: u32, viewports: I)
279273
where
280-
I: IntoIterator<Item = &'b rendy_core::hal::pso::Viewport>,
281-
I::IntoIter: ExactSizeIterator,
274+
I: Iterator<Item = rendy_core::hal::pso::Viewport>,
282275
C: Supports<Graphics>,
283276
{
284277
self.capability.assert();
@@ -295,8 +288,7 @@ where
295288
/// See: https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/vkCmdSetScissor.html
296289
pub unsafe fn set_scissors<'b, I>(&mut self, first_scissor: u32, rects: I)
297290
where
298-
I: IntoIterator<Item = &'b rendy_core::hal::pso::Rect>,
299-
I::IntoIter: ExactSizeIterator,
291+
I: Iterator<Item = rendy_core::hal::pso::Rect>,
300292
C: Supports<Graphics>,
301293
{
302294
self.capability.assert();
@@ -437,12 +429,8 @@ where
437429
/// See: https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/vkCmdClearAttachments.html#vkCmdBeginRenderPass
438430
pub unsafe fn clear_attachments<I, J>(&mut self, clears: I, rects: J)
439431
where
440-
I: IntoIterator,
441-
I::Item: std::borrow::Borrow<rendy_core::hal::command::AttachmentClear>,
442-
I::IntoIter: ExactSizeIterator,
443-
J: IntoIterator,
444-
J::Item: std::borrow::Borrow<rendy_core::hal::pso::ClearRect>,
445-
J::IntoIter: ExactSizeIterator,
432+
I: Iterator<Item = rendy_core::hal::command::AttachmentClear>,
433+
J: Iterator<Item = rendy_core::hal::pso::ClearRect>,
446434
{
447435
rendy_core::hal::command::CommandBuffer::clear_attachments(self.inner.raw, clears, rects);
448436
}
@@ -720,12 +708,12 @@ where
720708
B: rendy_core::hal::Backend,
721709
{
722710
/// Beging recording render pass inline.
723-
pub fn begin_render_pass_inline(
711+
pub fn begin_render_pass_inline<'b>(
724712
&mut self,
725713
render_pass: &B::RenderPass,
726714
framebuffer: &B::Framebuffer,
727715
render_area: rendy_core::hal::pso::Rect,
728-
clear_values: &[rendy_core::hal::command::ClearValue],
716+
clear_values: impl Iterator<Item = rendy_core::hal::command::RenderAttachmentInfo<'b, B>>,
729717
) -> RenderPassInlineEncoder<'_, B>
730718
where
731719
C: Supports<Graphics>,
@@ -751,12 +739,12 @@ where
751739
}
752740

753741
/// Beging recording render pass secondary.
754-
pub fn begin_render_pass_secondary(
742+
pub fn begin_render_pass_secondary<'b>(
755743
&mut self,
756744
render_pass: &B::RenderPass,
757745
framebuffer: &B::Framebuffer,
758746
render_area: rendy_core::hal::pso::Rect,
759-
clear_values: &[rendy_core::hal::command::ClearValue],
747+
clear_values: impl Iterator<Item = rendy_core::hal::command::RenderAttachmentInfo<'b, B>>,
760748
) -> RenderPassSecondaryEncoder<'_, B>
761749
where
762750
C: Supports<Graphics>,
@@ -824,8 +812,7 @@ where
824812
/// See: https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/vkCmdCopyBuffer.html
825813
pub unsafe fn copy_buffer<I>(&mut self, src: &B::Buffer, dst: &B::Buffer, regions: I)
826814
where
827-
I: IntoIterator<Item = rendy_core::hal::command::BufferCopy>,
828-
I::IntoIter: ExactSizeIterator,
815+
I: Iterator<Item = rendy_core::hal::command::BufferCopy>,
829816
C: Supports<Transfer>,
830817
{
831818
self.capability.assert();
@@ -847,8 +834,7 @@ where
847834
dst_layout: rendy_core::hal::image::Layout,
848835
regions: I,
849836
) where
850-
I: IntoIterator<Item = rendy_core::hal::command::BufferImageCopy>,
851-
I::IntoIter: ExactSizeIterator,
837+
I: Iterator<Item = rendy_core::hal::command::BufferImageCopy>,
852838
C: Supports<Transfer>,
853839
{
854840
self.capability.assert();
@@ -877,8 +863,7 @@ where
877863
dst_layout: rendy_core::hal::image::Layout,
878864
regions: I,
879865
) where
880-
I: IntoIterator<Item = rendy_core::hal::command::ImageCopy>,
881-
I::IntoIter: ExactSizeIterator,
866+
I: Iterator<Item = rendy_core::hal::command::ImageCopy>,
882867
C: Supports<Transfer>,
883868
{
884869
self.capability.assert();
@@ -907,8 +892,7 @@ where
907892
dst: &B::Buffer,
908893
regions: I,
909894
) where
910-
I: IntoIterator<Item = rendy_core::hal::command::BufferImageCopy>,
911-
I::IntoIter: ExactSizeIterator,
895+
I: Iterator<Item = rendy_core::hal::command::BufferImageCopy>,
912896
C: Supports<Transfer>,
913897
{
914898
self.capability.assert();
@@ -938,8 +922,7 @@ where
938922
filter: rendy_core::hal::image::Filter,
939923
regions: I,
940924
) where
941-
I: IntoIterator<Item = rendy_core::hal::command::ImageBlit>,
942-
I::IntoIter: ExactSizeIterator,
925+
I: Iterator<Item = rendy_core::hal::command::ImageBlit>,
943926
C: Supports<Graphics>,
944927
{
945928
self.capability.assert();

command/src/family/queue.rs

+24-31
Original file line numberDiff line numberDiff line change
@@ -58,35 +58,31 @@ where
5858
impl IntoIterator<Item = &'a (impl std::borrow::Borrow<B::Semaphore> + 'a)>,
5959
>,
6060
>,
61-
fence: Option<&mut Fence<B>>,
61+
mut fence: Option<&mut Fence<B>>,
6262
) {
6363
assert!(fence.as_ref().map_or(true, |f| f.is_unsignaled()));
6464

6565
let mut submissions = submissions.into_iter().peekable();
6666
if submissions.peek().is_none() && fence.is_some() {
6767
self.raw.submit(
68-
rendy_core::hal::queue::Submission {
69-
command_buffers: std::iter::empty::<&'a B::CommandBuffer>(),
70-
wait_semaphores: std::iter::empty::<(&'a B::Semaphore, _)>(),
71-
signal_semaphores: std::iter::empty::<&'a B::Semaphore>(),
72-
},
73-
fence.as_ref().map(|f| f.raw()),
68+
std::iter::empty::<&'a B::CommandBuffer>(),
69+
std::iter::empty::<(&'a B::Semaphore, _)>(),
70+
std::iter::empty::<&'a B::Semaphore>(),
71+
fence.as_mut().map(|f| f.raw_mut()),
7472
);
7573
} else {
7674
let family = self.id.family;
7775
while let Some(submission) = submissions.next() {
7876
self.raw.submit(
79-
rendy_core::hal::queue::Submission {
80-
command_buffers: submission.submits.into_iter().map(|submit| {
81-
assert_eq!(submit.family(), family);
82-
submit.raw()
83-
}),
84-
wait_semaphores: submission.waits.into_iter().map(|w| (w.0.borrow(), w.1)),
85-
signal_semaphores: submission.signals.into_iter().map(|s| s.borrow()),
86-
},
77+
submission.submits.into_iter().map(|submit| {
78+
assert_eq!(submit.family(), family);
79+
submit.raw()
80+
}),
81+
submission.waits.into_iter().map(|w| (w.0.borrow(), w.1)),
82+
submission.signals.into_iter().map(|s| s.borrow()),
8783
submissions
8884
.peek()
89-
.map_or(fence.as_ref().map(|f| f.raw()), |_| None),
85+
.map_or(fence.as_mut().map(|f| f.raw_mut()), |_| None),
9086
);
9187
}
9288
}
@@ -118,38 +114,35 @@ where
118114
impl IntoIterator<Item = &'a (impl std::borrow::Borrow<B::Semaphore> + 'a)>,
119115
>,
120116
>,
121-
fence: Option<&B::Fence>,
117+
mut fence: Option<&mut B::Fence>,
122118
) {
123119
let mut submissions = submissions.into_iter().peekable();
124120
if submissions.peek().is_none() && fence.is_some() {
125121
self.raw.submit(
126-
rendy_core::hal::queue::Submission {
127-
command_buffers: std::iter::empty::<&'a B::CommandBuffer>(),
128-
wait_semaphores: std::iter::empty::<(&'a B::Semaphore, _)>(),
129-
signal_semaphores: std::iter::empty::<&'a B::Semaphore>(),
130-
},
122+
std::iter::empty::<&'a B::CommandBuffer>(),
123+
std::iter::empty::<(&'a B::Semaphore, _)>(),
124+
std::iter::empty::<&'a B::Semaphore>(),
131125
fence,
132126
);
133127
} else {
134128
let family = self.id.family;
135129
while let Some(submission) = submissions.next() {
130+
let fence = fence.as_mut().map(|f| &mut **f);
136131
self.raw.submit(
137-
rendy_core::hal::queue::Submission {
138-
command_buffers: submission.submits.into_iter().map(|submit| {
139-
assert_eq!(submit.family(), family);
140-
submit.raw()
141-
}),
142-
wait_semaphores: submission.waits.into_iter().map(|w| (w.0.borrow(), w.1)),
143-
signal_semaphores: submission.signals.into_iter().map(|s| s.borrow()),
144-
},
132+
submission.submits.into_iter().map(|submit| {
133+
assert_eq!(submit.family(), family);
134+
submit.raw()
135+
}),
136+
submission.waits.into_iter().map(|w| (w.0.borrow(), w.1)),
137+
submission.signals.into_iter().map(|s| s.borrow()),
145138
submissions.peek().map_or(fence, |_| None),
146139
);
147140
}
148141
}
149142
}
150143

151144
/// Wait for queue to finish all pending commands.
152-
pub fn wait_idle(&self) -> Result<(), rendy_core::hal::device::OutOfMemory> {
145+
pub fn wait_idle(&mut self) -> Result<(), rendy_core::hal::device::OutOfMemory> {
153146
self.raw.wait_idle()
154147
}
155148
}

command/src/fence.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ where
9797
self.assert_device_owner(device);
9898
match self.state {
9999
FenceState::Signaled => {
100-
unsafe { device.reset_fence(&self.raw) }?;
100+
unsafe { device.reset_fence(&mut self.raw) }?;
101101
self.state = FenceState::Unsignaled;
102102
Ok(())
103103
}
@@ -138,7 +138,7 @@ where
138138
&mut self,
139139
device: &Device<B>,
140140
timeout_ns: u64,
141-
) -> Result<Option<FenceEpoch>, rendy_core::hal::device::OomOrDeviceLost> {
141+
) -> Result<Option<FenceEpoch>, rendy_core::hal::device::WaitError> {
142142
self.assert_device_owner(device);
143143

144144
match self.state {
@@ -182,6 +182,12 @@ where
182182
&self.raw
183183
}
184184

185+
/// Get mutable raw fence reference.
186+
/// Use `mark_*` functions to reflect stage changes.
187+
pub fn raw_mut(&mut self) -> &mut B::Fence {
188+
&mut self.raw
189+
}
190+
185191
/// Get submission epoch.
186192
/// Panics if not submitted.
187193
pub fn epoch(&self) -> FenceEpoch {

command/src/pool.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,7 @@ where
105105
) {
106106
let buffers = buffers
107107
.into_iter()
108-
.map(|buffer| buffer.into_raw())
109-
.collect::<Vec<_>>();
108+
.map(|buffer| buffer.into_raw());
110109

111110
self.raw.free(buffers);
112111
}

core/Cargo.toml

+6-6
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ vulkan = ["gfx-backend-vulkan"]
2626
no-slow-safety-checks = []
2727

2828
[dependencies]
29-
gfx-hal = "0.6"
30-
gfx-backend-empty = { version = "0.6", optional = true }
31-
gfx-backend-gl = { version = "0.6", default_features = false, optional = true }
29+
gfx-hal = "0.7"
30+
gfx-backend-empty = { version = "0.7", optional = true }
31+
gfx-backend-gl = { version = "0.7", default_features = false, optional = true }
3232
lazy_static = "1.4.0"
3333
log = "0.4.11"
3434
parking_lot = "0.11.1"
@@ -37,10 +37,10 @@ thread_profiler = "0.3.0"
3737
raw-window-handle = "0.3.3"
3838

3939
[target.'cfg(all(target_os = "windows", not(target_arch = "wasm32")))'.dependencies]
40-
gfx-backend-dx12 = { version = "0.6", optional = true }
40+
gfx-backend-dx12 = { version = "0.7", optional = true }
4141

4242
[target.'cfg(any(all(not(target_arch = "wasm32"), target_os = "macos"), all(target_arch = "aarch64", target_os = "ios")))'.dependencies]
43-
gfx-backend-metal = { version = "0.6", optional = true }
43+
gfx-backend-metal = { version = "0.7", optional = true }
4444

4545
[target.'cfg(all(any(target_os = "windows", all(unix, not(any(target_os = "macos", target_os = "ios")))), not(target_arch = "wasm32")))'.dependencies]
46-
gfx-backend-vulkan = { version = "0.6", features = ["x11"], optional = true }
46+
gfx-backend-vulkan = { version = "0.7", optional = true }

descriptor/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ categories = ["rendering"]
1111
description = "Rendy's descriptor allocator"
1212

1313
[dependencies]
14-
gfx-hal = "0.6"
14+
gfx-hal = "0.7"
1515
log = "0.4.11"
1616
relevant = { version = "0.4.2", features = ["log"] }
1717
smallvec = "1.5.1"

descriptor/src/allocator.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ where
189189
);
190190
let raw = device.create_descriptor_pool(
191191
size as usize,
192-
&pool_ranges,
192+
pool_ranges.iter(),
193193
DescriptorPoolCreateFlags::empty(),
194194
)?;
195195
let allocate = size.min(count);

0 commit comments

Comments
 (0)