Skip to content

Commit 8879733

Browse files
authored
[wgpu-hal] Upgrade to ash 0.38 (#5504)
1 parent ca91744 commit 8879733

File tree

10 files changed

+607
-714
lines changed

10 files changed

+607
-714
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ By @atlv24 and @cwfitzgerald in [#5154](https://github.com/gfx-rs/wgpu/pull/5154
257257
- Set object labels when the DEBUG flag is set, even if the VALIDATION flag is disabled. By @DJMcNab in [#5345](https://github.com/gfx-rs/wgpu/pull/5345).
258258
- Add safety check to `wgpu_hal::vulkan::CommandEncoder` to make sure `discard_encoding` is not called in the closed state. By @villuna in [#5557](https://github.com/gfx-rs/wgpu/pull/5557)
259259
- Fix SPIR-V type capability requests to not depend on `LocalType` caching. By @atlv24 in [#5590](https://github.com/gfx-rs/wgpu/pull/5590)
260+
- Upgrade `ash` to `0.38`. By @MarijnS95 in [#5504](https://github.com/gfx-rs/wgpu/pull/5504).
260261

261262
#### Tests
262263

Cargo.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ objc = "0.2.5"
133133

134134
# Vulkan dependencies
135135
android_system_properties = "0.1.1"
136-
ash = "0.37.3"
136+
ash = "0.38.0"
137137
gpu-alloc = "0.6"
138138
gpu-descriptor = "0.3"
139139

wgpu-hal/Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ gles = [
5555
"dep:khronos-egl",
5656
"dep:libloading",
5757
"dep:ndk-sys",
58+
"winapi/libloaderapi",
5859
]
5960
dx12 = [
6061
"naga/hlsl-out",
@@ -68,6 +69,7 @@ dx12 = [
6869
"winapi/d3d12shader",
6970
"winapi/d3d12sdklayers",
7071
"winapi/dxgi1_6",
72+
"winapi/errhandlingapi",
7173
]
7274
# TODO: This is a separate feature until Mozilla okays windows-rs, see https://github.com/gfx-rs/wgpu/issues/3207 for the tracking issue.
7375
windows_rs = ["dep:gpu-allocator"]
@@ -118,7 +120,7 @@ version = "0.20.0"
118120

119121
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
120122
# backend: Vulkan
121-
ash = { version = "0.37.3", optional = true }
123+
ash = { version = "0.38.0", optional = true }
122124
gpu-alloc = { version = "0.6", optional = true }
123125
gpu-descriptor = { version = "0.3", optional = true }
124126
smallvec = { version = "1", optional = true, features = ["union"] }
@@ -146,7 +148,6 @@ glutin_wgl_sys = { version = "0.5", optional = true }
146148

147149
winapi = { version = "0.3", features = [
148150
"profileapi",
149-
"libloaderapi",
150151
"windef",
151152
"winuser",
152153
"dcomp",

wgpu-hal/src/auxil/mod.rs

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -115,24 +115,3 @@ impl crate::TextureCopy {
115115
self.size = self.size.min(&max_src_size).min(&max_dst_size);
116116
}
117117
}
118-
119-
/// Construct a `CStr` from a byte slice, up to the first zero byte.
120-
///
121-
/// Return a `CStr` extending from the start of `bytes` up to and
122-
/// including the first zero byte. If there is no zero byte in
123-
/// `bytes`, return `None`.
124-
///
125-
/// This can be removed when `CStr::from_bytes_until_nul` is stabilized.
126-
/// ([#95027](https://github.com/rust-lang/rust/issues/95027))
127-
#[allow(dead_code)]
128-
pub(crate) fn cstr_from_bytes_until_nul(bytes: &[std::os::raw::c_char]) -> Option<&std::ffi::CStr> {
129-
if bytes.contains(&0) {
130-
// Safety for `CStr::from_ptr`:
131-
// - We've ensured that the slice does contain a null terminator.
132-
// - The range is valid to read, because the slice covers it.
133-
// - The memory won't be changed, because the slice borrows it.
134-
unsafe { Some(std::ffi::CStr::from_ptr(bytes.as_ptr())) }
135-
} else {
136-
None
137-
}
138-
}

wgpu-hal/src/vulkan/adapter.rs

Lines changed: 213 additions & 242 deletions
Large diffs are not rendered by default.

wgpu-hal/src/vulkan/command.rs

Lines changed: 42 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use super::conv;
22

33
use arrayvec::ArrayVec;
4-
use ash::{extensions::ext, vk};
4+
use ash::vk;
55

66
use std::{mem, ops::Range, slice};
77

@@ -39,12 +39,6 @@ impl super::Texture {
3939
}
4040
}
4141

42-
impl super::DeviceShared {
43-
fn debug_messenger(&self) -> Option<&ext::DebugUtils> {
44-
Some(&self.instance.debug_utils.as_ref()?.extension)
45-
}
46-
}
47-
4842
impl super::CommandEncoder {
4943
fn write_pass_end_timestamp_if_requested(&mut self) {
5044
if let Some((query_set, index)) = self.end_of_pass_timer_query.take() {
@@ -65,31 +59,23 @@ impl crate::CommandEncoder for super::CommandEncoder {
6559

6660
unsafe fn begin_encoding(&mut self, label: crate::Label) -> Result<(), crate::DeviceError> {
6761
if self.free.is_empty() {
68-
let vk_info = vk::CommandBufferAllocateInfo::builder()
62+
let vk_info = vk::CommandBufferAllocateInfo::default()
6963
.command_pool(self.raw)
70-
.command_buffer_count(ALLOCATION_GRANULARITY)
71-
.build();
64+
.command_buffer_count(ALLOCATION_GRANULARITY);
7265
let cmd_buf_vec = unsafe { self.device.raw.allocate_command_buffers(&vk_info)? };
7366
self.free.extend(cmd_buf_vec);
7467
}
7568
let raw = self.free.pop().unwrap();
7669

7770
// Set the name unconditionally, since there might be a
7871
// previous name assigned to this.
79-
unsafe {
80-
self.device.set_object_name(
81-
vk::ObjectType::COMMAND_BUFFER,
82-
raw,
83-
label.unwrap_or_default(),
84-
)
85-
};
72+
unsafe { self.device.set_object_name(raw, label.unwrap_or_default()) };
8673

8774
// Reset this in case the last renderpass was never ended.
8875
self.rpass_debug_marker_active = false;
8976

90-
let vk_info = vk::CommandBufferBeginInfo::builder()
91-
.flags(vk::CommandBufferUsageFlags::ONE_TIME_SUBMIT)
92-
.build();
77+
let vk_info = vk::CommandBufferBeginInfo::default()
78+
.flags(vk::CommandBufferUsageFlags::ONE_TIME_SUBMIT);
9379
unsafe { self.device.raw.begin_command_buffer(raw, &vk_info) }?;
9480
self.active = raw;
9581

@@ -145,12 +131,11 @@ impl crate::CommandEncoder for super::CommandEncoder {
145131
dst_stages |= dst_stage;
146132

147133
vk_barriers.push(
148-
vk::BufferMemoryBarrier::builder()
134+
vk::BufferMemoryBarrier::default()
149135
.buffer(bar.buffer.raw)
150136
.size(vk::WHOLE_SIZE)
151137
.src_access_mask(src_access)
152-
.dst_access_mask(dst_access)
153-
.build(),
138+
.dst_access_mask(dst_access),
154139
)
155140
}
156141

@@ -192,14 +177,13 @@ impl crate::CommandEncoder for super::CommandEncoder {
192177
dst_stages |= dst_stage;
193178

194179
vk_barriers.push(
195-
vk::ImageMemoryBarrier::builder()
180+
vk::ImageMemoryBarrier::default()
196181
.image(bar.texture.raw)
197182
.subresource_range(range)
198183
.src_access_mask(src_access)
199184
.dst_access_mask(dst_access)
200185
.old_layout(src_layout)
201-
.new_layout(dst_layout)
202-
.build(),
186+
.new_layout(dst_layout),
203187
);
204188
}
205189

@@ -442,7 +426,7 @@ impl crate::CommandEncoder for super::CommandEncoder {
442426
Some(buffer) => ray_tracing_functions
443427
.buffer_device_address
444428
.get_buffer_device_address(
445-
&vk::BufferDeviceAddressInfo::builder().buffer(buffer.raw),
429+
&vk::BufferDeviceAddressInfo::default().buffer(buffer.raw),
446430
),
447431
None => panic!("Buffers are required to build acceleration structures"),
448432
}
@@ -469,23 +453,24 @@ impl crate::CommandEncoder for super::CommandEncoder {
469453
for desc in descriptors {
470454
let (geometries, ranges) = match *desc.entries {
471455
crate::AccelerationStructureEntries::Instances(ref instances) => {
472-
let instance_data = vk::AccelerationStructureGeometryInstancesDataKHR::builder(
456+
let instance_data = vk::AccelerationStructureGeometryInstancesDataKHR::default(
457+
// TODO: Code is so large that rustfmt refuses to treat this... :(
473458
)
474459
.data(vk::DeviceOrHostAddressConstKHR {
475460
device_address: get_device_address(instances.buffer),
476461
});
477462

478-
let geometry = vk::AccelerationStructureGeometryKHR::builder()
463+
let geometry = vk::AccelerationStructureGeometryKHR::default()
479464
.geometry_type(vk::GeometryTypeKHR::INSTANCES)
480465
.geometry(vk::AccelerationStructureGeometryDataKHR {
481-
instances: *instance_data,
466+
instances: instance_data,
482467
});
483468

484-
let range = vk::AccelerationStructureBuildRangeInfoKHR::builder()
469+
let range = vk::AccelerationStructureBuildRangeInfoKHR::default()
485470
.primitive_count(instances.count)
486471
.primitive_offset(instances.offset);
487472

488-
(smallvec::smallvec![*geometry], smallvec::smallvec![*range])
473+
(smallvec::smallvec![geometry], smallvec::smallvec![range])
489474
}
490475
crate::AccelerationStructureEntries::Triangles(ref in_geometries) => {
491476
let mut ranges = smallvec::SmallVec::<
@@ -496,15 +481,15 @@ impl crate::CommandEncoder for super::CommandEncoder {
496481
>::with_capacity(in_geometries.len());
497482
for triangles in in_geometries {
498483
let mut triangle_data =
499-
vk::AccelerationStructureGeometryTrianglesDataKHR::builder()
484+
vk::AccelerationStructureGeometryTrianglesDataKHR::default()
500485
.vertex_data(vk::DeviceOrHostAddressConstKHR {
501486
device_address: get_device_address(triangles.vertex_buffer),
502487
})
503488
.vertex_format(conv::map_vertex_format(triangles.vertex_format))
504489
.max_vertex(triangles.vertex_count)
505490
.vertex_stride(triangles.vertex_stride);
506491

507-
let mut range = vk::AccelerationStructureBuildRangeInfoKHR::builder();
492+
let mut range = vk::AccelerationStructureBuildRangeInfoKHR::default();
508493

509494
if let Some(ref indices) = triangles.indices {
510495
triangle_data = triangle_data
@@ -528,7 +513,7 @@ impl crate::CommandEncoder for super::CommandEncoder {
528513
ray_tracing_functions
529514
.buffer_device_address
530515
.get_buffer_device_address(
531-
&vk::BufferDeviceAddressInfo::builder()
516+
&vk::BufferDeviceAddressInfo::default()
532517
.buffer(transform.buffer.raw),
533518
)
534519
};
@@ -540,17 +525,17 @@ impl crate::CommandEncoder for super::CommandEncoder {
540525
range = range.transform_offset(transform.offset);
541526
}
542527

543-
let geometry = vk::AccelerationStructureGeometryKHR::builder()
528+
let geometry = vk::AccelerationStructureGeometryKHR::default()
544529
.geometry_type(vk::GeometryTypeKHR::TRIANGLES)
545530
.geometry(vk::AccelerationStructureGeometryDataKHR {
546-
triangles: *triangle_data,
531+
triangles: triangle_data,
547532
})
548533
.flags(conv::map_acceleration_structure_geometry_flags(
549534
triangles.flags,
550535
));
551536

552-
geometries.push(*geometry);
553-
ranges.push(*range);
537+
geometries.push(geometry);
538+
ranges.push(range);
554539
}
555540
(geometries, ranges)
556541
}
@@ -562,25 +547,25 @@ impl crate::CommandEncoder for super::CommandEncoder {
562547
[vk::AccelerationStructureGeometryKHR; CAPACITY_INNER],
563548
>::with_capacity(in_geometries.len());
564549
for aabb in in_geometries {
565-
let aabbs_data = vk::AccelerationStructureGeometryAabbsDataKHR::builder()
550+
let aabbs_data = vk::AccelerationStructureGeometryAabbsDataKHR::default()
566551
.data(vk::DeviceOrHostAddressConstKHR {
567552
device_address: get_device_address(aabb.buffer),
568553
})
569554
.stride(aabb.stride);
570555

571-
let range = vk::AccelerationStructureBuildRangeInfoKHR::builder()
556+
let range = vk::AccelerationStructureBuildRangeInfoKHR::default()
572557
.primitive_count(aabb.count)
573558
.primitive_offset(aabb.offset);
574559

575-
let geometry = vk::AccelerationStructureGeometryKHR::builder()
560+
let geometry = vk::AccelerationStructureGeometryKHR::default()
576561
.geometry_type(vk::GeometryTypeKHR::AABBS)
577562
.geometry(vk::AccelerationStructureGeometryDataKHR {
578-
aabbs: *aabbs_data,
563+
aabbs: aabbs_data,
579564
})
580565
.flags(conv::map_acceleration_structure_geometry_flags(aabb.flags));
581566

582-
geometries.push(*geometry);
583-
ranges.push(*range);
567+
geometries.push(geometry);
568+
ranges.push(range);
584569
}
585570
(geometries, ranges)
586571
}
@@ -593,7 +578,7 @@ impl crate::CommandEncoder for super::CommandEncoder {
593578
ray_tracing_functions
594579
.buffer_device_address
595580
.get_buffer_device_address(
596-
&vk::BufferDeviceAddressInfo::builder().buffer(desc.scratch_buffer.raw),
581+
&vk::BufferDeviceAddressInfo::default().buffer(desc.scratch_buffer.raw),
597582
)
598583
};
599584
let ty = match *desc.entries {
@@ -602,7 +587,7 @@ impl crate::CommandEncoder for super::CommandEncoder {
602587
}
603588
_ => vk::AccelerationStructureTypeKHR::BOTTOM_LEVEL,
604589
};
605-
let mut geometry_info = vk::AccelerationStructureBuildGeometryInfoKHR::builder()
590+
let mut geometry_info = vk::AccelerationStructureBuildGeometryInfoKHR::default()
606591
.ty(ty)
607592
.mode(conv::map_acceleration_structure_build_mode(desc.mode))
608593
.flags(conv::map_acceleration_structure_flags(desc.flags))
@@ -618,7 +603,7 @@ impl crate::CommandEncoder for super::CommandEncoder {
618603
.raw;
619604
}
620605

621-
geometry_infos.push(*geometry_info);
606+
geometry_infos.push(geometry_info);
622607
}
623608

624609
for (i, geometry_info) in geometry_infos.iter_mut().enumerate() {
@@ -649,10 +634,9 @@ impl crate::CommandEncoder for super::CommandEncoder {
649634
src_stage | vk::PipelineStageFlags::TOP_OF_PIPE,
650635
dst_stage | vk::PipelineStageFlags::BOTTOM_OF_PIPE,
651636
vk::DependencyFlags::empty(),
652-
&[vk::MemoryBarrier::builder()
637+
&[vk::MemoryBarrier::default()
653638
.src_access_mask(src_access)
654-
.dst_access_mask(dst_access)
655-
.build()],
639+
.dst_access_mask(dst_access)],
656640
&[],
657641
&[],
658642
)
@@ -754,17 +738,13 @@ impl crate::CommandEncoder for super::CommandEncoder {
754738
.make_framebuffer(fb_key, raw_pass, desc.label)
755739
.unwrap();
756740

757-
let mut vk_info = vk::RenderPassBeginInfo::builder()
741+
let mut vk_info = vk::RenderPassBeginInfo::default()
758742
.render_pass(raw_pass)
759743
.render_area(render_area)
760744
.clear_values(&vk_clear_values)
761745
.framebuffer(raw_framebuffer);
762746
let mut vk_attachment_info = if caps.imageless_framebuffers {
763-
Some(
764-
vk::RenderPassAttachmentBeginInfo::builder()
765-
.attachments(&vk_image_views)
766-
.build(),
767-
)
747+
Some(vk::RenderPassAttachmentBeginInfo::default().attachments(&vk_image_views))
768748
} else {
769749
None
770750
};
@@ -859,21 +839,21 @@ impl crate::CommandEncoder for super::CommandEncoder {
859839
}
860840

861841
unsafe fn insert_debug_marker(&mut self, label: &str) {
862-
if let Some(ext) = self.device.debug_messenger() {
842+
if let Some(ext) = self.device.extension_fns.debug_utils.as_ref() {
863843
let cstr = self.temp.make_c_str(label);
864-
let vk_label = vk::DebugUtilsLabelEXT::builder().label_name(cstr).build();
844+
let vk_label = vk::DebugUtilsLabelEXT::default().label_name(cstr);
865845
unsafe { ext.cmd_insert_debug_utils_label(self.active, &vk_label) };
866846
}
867847
}
868848
unsafe fn begin_debug_marker(&mut self, group_label: &str) {
869-
if let Some(ext) = self.device.debug_messenger() {
849+
if let Some(ext) = self.device.extension_fns.debug_utils.as_ref() {
870850
let cstr = self.temp.make_c_str(group_label);
871-
let vk_label = vk::DebugUtilsLabelEXT::builder().label_name(cstr).build();
851+
let vk_label = vk::DebugUtilsLabelEXT::default().label_name(cstr);
872852
unsafe { ext.cmd_begin_debug_utils_label(self.active, &vk_label) };
873853
}
874854
}
875855
unsafe fn end_debug_marker(&mut self) {
876-
if let Some(ext) = self.device.debug_messenger() {
856+
if let Some(ext) = self.device.extension_fns.debug_utils.as_ref() {
877857
unsafe { ext.cmd_end_debug_utils_label(self.active) };
878858
}
879859
}

0 commit comments

Comments
 (0)