wgpu v0.14.0 Release Notes
Release Date: 2022-10-05 // almost 2 years ago-
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 toPreMultiplied
orPostMultiplied
, the alpha channel of framebuffer is respected in the compositing process, but which mode is available depends on the different API andDevice
. If don't care about alpha_mode, you can set it toAuto
.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
andraw_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 - β Add way to create gles hal textures from raw gl names to allow externally managed textures. By @i509VCB #3046
- 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]](https://github.com/gfx-rs/wgpu/pull/2971) - β‘οΈ Update to Naga b209d911 (2022-9-1) to avoid generating SPIR-V that
violates Vulkan valid usage rules
VUID-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
WebGPU
- π· When called in a web worker,
Context::init()
now usesweb_sys::WorkerGlobalContext
to create awgpu::Instance
instead of trying to access the unavailableweb_sys::Window
by @JolifantoBambla in #2858
π 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 - β‘οΈ Updated the maximum binding index to match the WebGPU specification by @nical in #2957
Metal
- Extract the generic code into
get_metal_layer
by @jinleili in #2826
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 - π
DropGuard
has been moved to the root of the wgpu-hal crate. By @i509VCB #3046
GLES
- β Add
Rgba16Float
format support for color attachments. By @jinleili in #3045 TEXTURE_COMPRESSION_ASTC_HDR
feature detection by @jinleili in #3042
π Performance
- Made
StagingBelt::write_buffer()
check more thoroughly for reusable memory; by @kpreid in #2906
π 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
andInstance::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
- β‘οΈ Update wasm32 dependencies, set
alpha_mode
on web target by @jinleili in #3040
π 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
andcargo 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
- β Add
Previous changes from v0.13.2
-
π Bug Fixes
General
- Prefer
DeviceType::DiscreteGpu
overDeviceType::Other
forPowerPreference::LowPower
so Vulkan is preferred over OpenGL again by @Craig-Macomber in #2853 - Allow running
get_texture_format_features
on unsupported texture formats (returning no flags) by @cwfitzgerald in #2856 - Allow multi-sampled textures that are supported by the device but not WebGPU if
TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES
is enabled by @cwfitzgerald in #2856 get_texture_format_features
only lists the COPY_* usages if the adapter actually supports that usage by @cwfitzgerald in #2856- π Fix bind group / pipeline deduplication not taking into account RenderBundle execution resetting these values by @shoebe #2867
- π Fix panics that occur when using
as_hal
functions when the hal generic type does not match the hub being looked up in by @i509VCB #2871 - β Add some validation in map_async by @nical in #2876
- π Fix bugs when mapping/unmapping zero-sized buffers and ranges by @nical in #2877
- π Fix out-of-bound write in
map_buffer
with non-zero offset by @nical in #2916 - Validate the number of color attachments in
create_render_pipeline
by @nical in #2913 - Validate against the maximum binding index in
create_bind_group_layout
by @nical in #2892 - Validate that map_async's range is not negative by @nical in #2938
- Fix calculation/validation of layer/mip ranges in create_texture_view by @nical in #2955
- Validate the sample count and mip level in
copy_texture_to_buffer
by @nical in #2958 - π¦ Expose the cause of the error in the
map_async
callback in #2939
DX12
DownlevelCapabilities::default()
now returns theANISOTROPIC_FILTERING
flag set to true so DX12 listsANISOTROPIC_FILTERING
as true again by @cwfitzgerald in #2851- Properly query format features for UAV/SRV usages of depth formats by @cwfitzgerald in #2856
Vulkan
- Vulkan 1.0 drivers that support
VK_KHR_multiview
now properly report theMULTIVIEW
feature as supported by @i509VCB in #2934. - Stop using
VkPhysicalDevice11Features
in Vulkan 1.1 which is confusingly provided in Vulkan 1.2 by @i509VCB in #2934.
GLES
- π Fix depth stencil texture format capability by @jinleili in #2854
get_texture_format_features
now only returns usages for formats it actually supports by @cwfitzgerald in #2856
Hal
- π Allow access to queue family index in Vulkan hal by @i509VCB in #2859
- π Allow access to the EGLDisplay and EGLContext pointer in Gles hal Adapter and Device by @i509VCB in #2860
π Documentation
- β‘οΈ Update present_mode docs as most of them don't automatically fall back to Fifo anymore. by @Elabajaba in #2855
Hal
- Prefer