Skip to content

Commit a50335f

Browse files
mockersfjimblandy
authored andcommitted
use smallvec instead of onplace_it with fixed size
1 parent 58bc205 commit a50335f

File tree

4 files changed

+60
-64
lines changed

4 files changed

+60
-64
lines changed

Cargo.lock

+1-7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

wgpu-hal/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ rust-version = "1.59"
1515
[features]
1616
default = []
1717
metal = ["naga/msl-out", "block", "foreign-types"]
18-
vulkan = ["naga/spv-out", "ash", "gpu-alloc", "gpu-descriptor", "libloading", "inplace_it"]
18+
vulkan = ["naga/spv-out", "ash", "gpu-alloc", "gpu-descriptor", "libloading", "smallvec"]
1919
gles = ["naga/glsl-out", "glow", "egl", "libloading"]
2020
dx11 = ["naga/hlsl-out", "native", "libloading", "winapi/d3d11", "winapi/d3d11_1", "winapi/d3d11_2", "winapi/d3d11sdklayers", "winapi/dxgi1_6"]
2121
dx12 = ["naga/hlsl-out", "native", "bit-set", "range-alloc", "winapi/d3d12", "winapi/d3d12shader", "winapi/d3d12sdklayers", "winapi/dxgi1_6"]
@@ -51,7 +51,7 @@ foreign-types = { version = "0.3", optional = true }
5151
ash = { version = "0.37", optional = true }
5252
gpu-alloc = { version = "0.5", optional = true }
5353
gpu-descriptor = { version = "0.2", optional = true }
54-
inplace_it = { version = "0.3.3", optional = true }
54+
smallvec = { version = "1", optional = true }
5555

5656
# backend: Gles
5757
glow = { version = "0.11.1", optional = true }

wgpu-hal/src/vulkan/command.rs

+28-34
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use super::conv;
22

33
use arrayvec::ArrayVec;
44
use ash::{extensions::ext, vk};
5-
use inplace_it::inplace_or_alloc_from_iter;
65

76
use std::{mem, ops::Range, slice};
87

@@ -208,11 +207,12 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
208207
size: r.size.get(),
209208
});
210209

211-
inplace_or_alloc_from_iter(vk_regions_iter, |vk_regions| {
212-
self.device
213-
.raw
214-
.cmd_copy_buffer(self.active, src.raw, dst.raw, vk_regions)
215-
})
210+
self.device.raw.cmd_copy_buffer(
211+
self.active,
212+
src.raw,
213+
dst.raw,
214+
&smallvec::SmallVec::<[vk::BufferCopy; 32]>::from_iter(vk_regions_iter),
215+
);
216216
}
217217

218218
unsafe fn copy_texture_to_texture<T>(
@@ -244,16 +244,14 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
244244
}
245245
});
246246

247-
inplace_or_alloc_from_iter(vk_regions_iter, |vk_regions| {
248-
self.device.raw.cmd_copy_image(
249-
self.active,
250-
src.raw,
251-
src_layout,
252-
dst.raw,
253-
DST_IMAGE_LAYOUT,
254-
vk_regions,
255-
);
256-
});
247+
self.device.raw.cmd_copy_image(
248+
self.active,
249+
src.raw,
250+
src_layout,
251+
dst.raw,
252+
DST_IMAGE_LAYOUT,
253+
&smallvec::SmallVec::<[vk::ImageCopy; 32]>::from_iter(vk_regions_iter),
254+
);
257255
}
258256

259257
unsafe fn copy_buffer_to_texture<T>(
@@ -266,15 +264,13 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
266264
{
267265
let vk_regions_iter = dst.map_buffer_copies(regions);
268266

269-
inplace_or_alloc_from_iter(vk_regions_iter, |vk_regions| {
270-
self.device.raw.cmd_copy_buffer_to_image(
271-
self.active,
272-
src.raw,
273-
dst.raw,
274-
DST_IMAGE_LAYOUT,
275-
vk_regions,
276-
);
277-
});
267+
self.device.raw.cmd_copy_buffer_to_image(
268+
self.active,
269+
src.raw,
270+
dst.raw,
271+
DST_IMAGE_LAYOUT,
272+
&smallvec::SmallVec::<[vk::BufferImageCopy; 32]>::from_iter(vk_regions_iter),
273+
);
278274
}
279275

280276
unsafe fn copy_texture_to_buffer<T>(
@@ -289,15 +285,13 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
289285
let src_layout = conv::derive_image_layout(src_usage, src.aspects);
290286
let vk_regions_iter = src.map_buffer_copies(regions);
291287

292-
inplace_or_alloc_from_iter(vk_regions_iter, |vk_regions| {
293-
self.device.raw.cmd_copy_image_to_buffer(
294-
self.active,
295-
src.raw,
296-
src_layout,
297-
dst.raw,
298-
vk_regions,
299-
);
300-
});
288+
self.device.raw.cmd_copy_image_to_buffer(
289+
self.active,
290+
src.raw,
291+
src_layout,
292+
dst.raw,
293+
&smallvec::SmallVec::<[vk::BufferImageCopy; 32]>::from_iter(vk_regions_iter),
294+
);
301295
}
302296

303297
unsafe fn begin_query(&mut self, set: &super::QuerySet, index: u32) {

wgpu-hal/src/vulkan/device.rs

+29-21
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use super::conv;
22

33
use arrayvec::ArrayVec;
44
use ash::{extensions::khr, vk};
5-
use inplace_it::inplace_or_alloc_from_iter;
65
use parking_lot::Mutex;
76

87
use std::{
@@ -462,13 +461,16 @@ impl
462461
layouts: impl ExactSizeIterator<Item = &'a vk::DescriptorSetLayout>,
463462
sets: &mut impl Extend<vk::DescriptorSet>,
464463
) -> Result<(), gpu_descriptor::DeviceAllocationError> {
465-
let result = inplace_or_alloc_from_iter(layouts.cloned(), |layouts_slice| {
466-
let vk_info = vk::DescriptorSetAllocateInfo::builder()
464+
let result = self.raw.allocate_descriptor_sets(
465+
&vk::DescriptorSetAllocateInfo::builder()
467466
.descriptor_pool(*pool)
468-
.set_layouts(layouts_slice)
469-
.build();
470-
self.raw.allocate_descriptor_sets(&vk_info)
471-
});
467+
.set_layouts(
468+
&smallvec::SmallVec::<[vk::DescriptorSetLayout; 32]>::from_iter(
469+
layouts.cloned(),
470+
),
471+
)
472+
.build(),
473+
);
472474

473475
match result {
474476
Ok(vk_sets) => {
@@ -497,9 +499,10 @@ impl
497499
pool: &mut vk::DescriptorPool,
498500
sets: impl Iterator<Item = vk::DescriptorSet>,
499501
) {
500-
let result = inplace_or_alloc_from_iter(sets, |sets_slice| {
501-
self.raw.free_descriptor_sets(*pool, sets_slice)
502-
});
502+
let result = self.raw.free_descriptor_sets(
503+
*pool,
504+
&smallvec::SmallVec::<[vk::DescriptorSet; 32]>::from_iter(sets),
505+
);
503506
match result {
504507
Ok(()) => {}
505508
Err(err) => log::error!("free_descriptor_sets: {:?}", err),
@@ -827,21 +830,26 @@ impl crate::Device<super::Api> for super::Device {
827830
I: Iterator<Item = crate::MemoryRange>,
828831
{
829832
let vk_ranges = self.shared.make_memory_ranges(buffer, ranges);
830-
inplace_or_alloc_from_iter(vk_ranges, |array| {
831-
self.shared.raw.flush_mapped_memory_ranges(array).unwrap()
832-
});
833+
834+
self.shared
835+
.raw
836+
.flush_mapped_memory_ranges(
837+
&smallvec::SmallVec::<[vk::MappedMemoryRange; 32]>::from_iter(vk_ranges),
838+
)
839+
.unwrap();
833840
}
834841
unsafe fn invalidate_mapped_ranges<I>(&self, buffer: &super::Buffer, ranges: I)
835842
where
836843
I: Iterator<Item = crate::MemoryRange>,
837844
{
838845
let vk_ranges = self.shared.make_memory_ranges(buffer, ranges);
839-
inplace_or_alloc_from_iter(vk_ranges, |array| {
840-
self.shared
841-
.raw
842-
.invalidate_mapped_memory_ranges(array)
843-
.unwrap()
844-
});
846+
847+
self.shared
848+
.raw
849+
.invalidate_mapped_memory_ranges(
850+
&smallvec::SmallVec::<[vk::MappedMemoryRange; 32]>::from_iter(vk_ranges),
851+
)
852+
.unwrap();
845853
}
846854

847855
unsafe fn create_texture(
@@ -1123,7 +1131,7 @@ impl crate::Device<super::Api> for super::Device {
11231131
}
11241132
}
11251133

1126-
//Note: not bothering with inplace_or_alloc_from_iter her as it's low frequency
1134+
//Note: not bothering with on stack array here as it's low frequency
11271135
let vk_bindings = desc
11281136
.entries
11291137
.iter()
@@ -1235,7 +1243,7 @@ impl crate::Device<super::Api> for super::Device {
12351243
&self,
12361244
desc: &crate::PipelineLayoutDescriptor<super::Api>,
12371245
) -> Result<super::PipelineLayout, crate::DeviceError> {
1238-
//Note: not bothering with inplace_or_alloc_from_iter her as it's low frequency
1246+
//Note: not bothering with on stack array here as it's low frequency
12391247
let vk_set_layouts = desc
12401248
.bind_group_layouts
12411249
.iter()

0 commit comments

Comments
 (0)