v0.14.0
Major Changes
@invariant Warning
When using CompareFunction::Equal or CompareFunction::NotEqual on a pipeline, there is now a warning logged if the vertex
shader does not have a @invariant tag on it. On some machines, rendering the same triangles multiple times without an
@invariant tag will result in slightly different depths for every pixel. Because the *Equal functions rely on depth being
the same every time it is rendered, we now warn if it is missing.
-@vertex
-fn vert_main(v_in: VertexInput) -> @builtin(position) vec4<f32> {...}
+@vertex
+fn vert_main(v_in: VertexInput) -> @builtin(position) @invariant vec4<f32> {...}
Surface Alpha and PresentModes
Surface supports alpha_mode
now. When alpha_mode is equal to PreMultiplied
or PostMultiplied
,
the alpha channel of framebuffer is respected in the compositing process, but which mode is available depends on
the different API and Device
. If don't care about alpha_mode, you can set it to Auto
.
SurfaceConfiguration {
// ...
+ alpha_mode: surface.get_supported_alpha_modes(&adapter)[0],
}
The function to enumerate supported presentation modes changed:
- pub fn wgpu::Surface::get_supported_modes(&self, adapter: &wgpu::Adapter) -> Vec<PresentMode>
+ pub fn wgpu::Surface::get_supported_present_modes(&self, adapter: &wgpu::Adapter) -> Vec<PresentMode>
Updated raw-window-handle to 0.5
This will allow use of the latest version of winit. As such the bound on create_surface is now RWH 0.5 and requires
both raw_window_handle::HasRawWindowHandle
and raw_window_handle::HasRawDisplayHandle
.
Added/New Features
- Add
Buffer::size()
andBuffer::usage()
; by @kpreid in #2923 - Split Blendability and Filterability into Two Different TextureFormatFeatureFlags; by @stakka in #3012
- Expose
alpha_mode
on SurfaceConfiguration, by @jinleili in #2836 - Introduce fields for driver name and info in
AdapterInfo
, by @i509VCB in #3037 - Implemented
copy_external_image_to_texture
on WebGPU, by @ybiletskyi in #2781
Bug Fixes
General
- Free
StagingBuffers
even when an error occurs in the operation that consumes them. By @jimblandy in #2961 - Avoid overflow when checking that texture copies fall within bounds. By @jimblandy in #2963
- Improve the validation and error reporting of buffer mappings by @nical in #2848
- Fix compilation errors when using wgpu-core in isolation while targetting
wasm32-unknown-unknown
by @Seamooo in #2922 - Fixed opening of RenderDoc library by @ABuffSeagull in #2930
- Added missing validation for
BufferUsages
mismatches whenFeatures::MAPPABLE_PRIMARY_BUFFERS
is not
enabled. By @Imberflur in #3023 - Fixed
CommandEncoder
not beingSend
andSync
on web by @i509VCB in #3025 - Document meaning of
vendor
inAdapterInfo
if the vendor has no PCI id. - Fix missing resource labels from some Errors by @scoopr in #3066
Metal
- Add the missing
msg_send![view, retain]
call withinfrom_view
by @jinleili in #2976 - Fix
max_buffer
max_texture
andmax_vertex_buffers
limits by @jinleili in #2978 - Remove PrivateCapabilities's
format_rgb10a2_unorm_surface
field by @jinleili in #2981 - Fix validation error when copying into a subset of a single-layer texture by @nical in #3063
- Fix
_buffer_sizes
encoding by @dtiselice in #3047
Vulkan
- Fix
astc_hdr
formats support by @jinleili in [#2971]](#2971) - Update to Naga b209d91 (2022-9-1) to avoid generating SPIR-V that
violates Vulkan valid usage rulesVUID-StandaloneSpirv-Flat-06202
andVUID-StandaloneSpirv-Flat-04744
. By @jimblandy in
#3008 - Fix bug where the Vulkan backend would panic when using a supported window and display handle but the
dependent extensions are not available by @i509VCB in #3054.
GLES
- Report vendor id for Mesa and Apple GPUs. By @i509VCB #3036
- Report Apple M2 gpu as integrated. By @i509VCB #3036
Changes
General
- Changed wgpu-hal and wgpu-core implementation to pass RawDisplayHandle and RawWindowHandle as separate
parameters instead of passing an impl trait over both HasRawDisplayHandle and HasRawWindowHandle. By @i509VCB in #3022 - Changed
Instance::as_hal<A>
to just return anOption<&A::Instance>
rather than taking a callback. By @jimb in #2991 - Added downlevel restriction error message for
InvalidFormatUsages
error by @Seamooo in #2886 - Add warning when using CompareFunction::*Equal with vertex shader that is missing @invariant tag by @cwfitzgerald in #2887
- Update Winit to version 0.27 and raw-window-handle to 0.5 by @wyatt-herkamp in #2918
- Address Clippy 0.1.63 complaints. By @jimblandy in #2977
- Don't use
PhantomData
forIdentityManager
'sInput
type. By @jimblandy in #2972 - Changed Naga variant in ShaderSource to
Cow<'static, Module>
, to allow loading global variables by @daxpedda in #2903
Metal
Vulkan
- Remove use of Vulkan12Features/Properties types. By @i509VCB in #2936
- Provide a means for
wgpu
users to accessvk::Queue
and the queue index. By @anlumo in #2950 - Use the use effective api version for determining device features instead of wrongly assuming
VkPhysicalDeviceProperties.apiVersion
is the actual version of the device. By @i509VCB in #3011
GLES
- Add
Rgba16Float
format support for color attachments. By @jinleili in #3045 TEXTURE_COMPRESSION_ASTC_HDR
feature detection by @jinleili in #3042
Performance
Documentation
- Add WGSL examples to complement existing examples written in GLSL by @norepimorphism in #2888
- Document
wgpu_core
resource allocation. @jimblandy in #2973 - Expanded
StagingBelt
documentation by @kpreid in #2905 - Fixed documentation for
Instance::create_surface_from_canvas
and
Instance::create_surface_from_offscreen_canvas
regarding their
safety contract. These functions are not unsafe. By @jimblandy #2990 - Document that
write_buffer_with()
is sound but unwise to read from by @kpreid in #3006 - Explain why
Adapter::as_hal
andDevice::as_hal
have to take callback functions. By @jimblandy in #2992
Dependency Updates
WebGPU
Build Configuration
- Add the
"strict_asserts"
feature, to enable additional internal
run-time validation inwgpu-core
. By @jimblandy in
#2872.
Full API Diff
Manual concatination of cargo public-api --diff-git-checkouts v0.13.2 v0.14.0 -p wgpu
and cargo public-api --diff-git-checkouts v0.13.2 v0.14.0 -p wgpu-types
Removed items from the public API
=================================
-pub fn wgpu::Surface::get_supported_modes(&self, adapter: &wgpu::Adapter) -> Vec<PresentMode>
-pub const wgpu::Features::DEPTH24UNORM_STENCIL8: Self
-pub enum variant wgpu::TextureFormat::Depth24UnormStencil8
Changed items in the public API
===============================
-pub unsafe fn wgpu::Instance::as_hal<A: wgc::hub::HalApi, F: FnOnce(Option<&<A as >::Instance>) -> R, R>(&self, hal_instance_callback: F) -> R
+pub unsafe fn wgpu::Instance::as_hal<A: wgc::hub::HalApi>(&self) -> Option<&<A as >::Instance>
-pub unsafe fn wgpu::Instance::create_surface<W: raw_window_handle::HasRawWindowHandle>(&self, window: &W) -> wgpu::Surface
+pub unsafe fn wgpu::Instance::create_surface<W: raw_window_handle::HasRawWindowHandle + raw_window_handle::HasRawDisplayHandle>(&self, window: &W) -> wgpu::Surface
Added items to the public API
=============================
+pub fn wgpu::Buffer::size(&self) -> wgt::BufferAddress
+pub fn wgpu::Buffer::usage(&self) -> BufferUsages
+pub fn wgpu::Surface::get_supported_alpha_modes(&self, adapter: &wgpu::Adapter) -> Vec<CompositeAlphaMode>
+pub fn wgpu::Surface::get_supported_present_modes(&self, adapter: &wgpu::Adapter) -> Vec<PresentMode>
+#[repr(C)] pub enum wgpu::CompositeAlphaMode
+impl RefUnwindSafe for wgpu::CompositeAlphaMode
+impl Send for wgpu::CompositeAlphaMode
+impl Sync for wgpu::CompositeAlphaMode
+impl Unpin for wgpu::CompositeAlphaMode
+impl UnwindSafe for wgpu::CompositeAlphaMode
+pub const wgpu::Features::DEPTH24PLUS_STENCIL8: Self
+pub const wgpu::TextureFormatFeatureFlags::BLENDABLE: Self
+pub enum variant wgpu::CompositeAlphaMode::Auto = 0
+pub enum variant wgpu::CompositeAlphaMode::Inherit = 4
+pub enum variant wgpu::CompositeAlphaMode::Opaque = 1
+pub enum variant wgpu::CompositeAlphaMode::PostMultiplied = 3
+pub enum variant wgpu::CompositeAlphaMode::PreMultiplied = 2
+pub enum variant wgpu::TextureFormat::Depth16Unorm
+pub fn wgpu::CompositeAlphaMode::clone(&self) -> wgpu::CompositeAlphaMode
+pub fn wgpu::CompositeAlphaMode::eq(&self, other: &wgpu::CompositeAlphaMode) -> bool
+pub fn wgpu::CompositeAlphaMode::fmt(&self, f: &mut $crate::fmt::Formatter<'_>) -> $crate::fmt::Result
+pub fn wgpu::CompositeAlphaMode::hash<__H: $crate::hash::Hasher>(&self, state: &mut __H) -> ()
+pub struct field wgpu::AdapterInfo::driver: String
+pub struct field wgpu::AdapterInfo::driver_info: String
+pub struct field wgpu::SurfaceConfiguration::alpha_mode: wgpu_types::CompositeAlphaMode