A cross-platform, safe, pure-Rust graphics API.
This release includes the crate wgpu
and wgpu-hal
only. The crates wgpu-core
, and wgpu-types
are still at 0.17.1
.
This release includes the crate wgpu
, wgpu-core
, and wgpu-hal
. The crate wgpu-types
is still at 0.17.0
.
get_mapped_range_as_array_buffer
for faster buffer read-backs in wasm builds. By @ryankaplan in #4042.This is the first release that featured wgpu-info
as a binary crate for getting information about what devices wgpu sees in your system. It can dump the information in both human readable format and json.
This release was fairly minor as breaking changes go.
wgpu
types now !Send
!Sync
on wasmUp until this point, wgpu has made the assumption that threads do not exist on wasm. With the rise of libraries like wasm_thread
making it easier and easier to do wasm multithreading this assumption is no longer sound. As all wgpu objects contain references into the JS heap, they cannot leave the thread they started on.
As we understand that this change might be very inconvenient for users who don't care about wasm threading, there is a crate feature which re-enables the old behavior: fragile-send-sync-non-atomic-wasm
. So long as you don't compile your code with -Ctarget-feature=+atomics
, Send
and Sync
will be implemented again on wgpu types on wasm. As the name implies, especially for libraries, this is very fragile, as you don't know if a user will want to compile with atomics (and therefore threads) or not.
By @daxpedda in #3691
The power_preference
field of RequestAdapterOptions
is now optional. If it is PowerPreference::None
, we will choose the first available adapter, preferring GPU adapters over CPU adapters.
By @Aaron1011 in #3903
initialize_adapter_from_env
argument changesRemoved the backend_bits parameter from initialize_adapter_from_env
and initialize_adapter_from_env_or_default
. If you want to limit the backends used by this function, only enable the watned backends in the instance.
Added a compatible surface parameter, to ensure the given device is able to be presented onto the given surface.
- wgpu::util::initialize_adapter_from_env(instance, backend_bits);
+ wgpu::util::initialize_adapter_from_env(instance, Some(&compatible_surface));
By @fornwall in #3904 and #3905
AdapterInfo::{device,vendor}
to be u32
instead of usize
. By @ameknite in #3760
buffer_from_raw
(Dx12, Metal, Vulkan) and create_buffer_from_hal
. By @AdrianEddy in #3355
TextureFormat
s. By @teoxoy in #3843.GPUVertexBufferLayout
. By @fornwall in #3906
DEPTH32FLOAT_STENCIL8
by @ErichDonGubler in #3734.AdapterInfo::{device,vendor}
by @ErichDonGubler in #3763.descriptor.usage
is not empty in create_buffer
by @nical in #3928
max_bindings_per_bind_group
limit to reflect spec changes by @ErichDonGubler and @nical in #3943 #3942
SurfaceConfiguration
. by @liquidev in #3817
get_preferred_canvas_format()
to fill formats
of SurfaceCapabilities
. By @jinleili in #3744
This release includes the crate wgpu
. The crate wgpu-core
is still at 0.16.1
, wgpu-types
and wgpu-hal
are still at 0.16.2
.
Id
type that is exposed when using the expose-ids
feature implement Send
and Sync
again. This was unintentionally changed by the v0.16.0 release and is now fixed.This release includes wgpu
, wgpu-hal
, and wgpu-types
. The crate wgpu-core
are still at 0.16.1
.
max_storage_buffers_per_shader_stage
and max_storage_textures_per_shader_stage
limits based on what the hardware supports. by @Elabajaba in [#3798]https://github.com/gfx-rs/wgpu/pull/3798This release includes wgpu
, wgpu-core
, and wgpu-hal
. The crate wgpu-types
are still at 0.16.0
.
wgpu::CommandBuffer
. By @wumpf in #3726.u32
s internally for bind group indices, rather than u8
. By @ErichDonGubler in #3743.create_surface_from_canvas
. By @grovesNL in #3718
type
has been replaced with alias
to match with upstream WebGPU.
- type MyType = vec4<u32>;
+ alias MyType = vec4<u32>;
The TextureFormat::describe
function was removed in favor of separate functions: block_dimensions
, is_compressed
, is_srgb
, required_features
, guaranteed_format_features
, sample_type
and block_size
.
- let block_dimensions = format.describe().block_dimensions;
+ let block_dimensions = format.block_dimensions();
- let is_compressed = format.describe().is_compressed();
+ let is_compressed = format.is_compressed();
- let is_srgb = format.describe().srgb;
+ let is_srgb = format.is_srgb();
- let required_features = format.describe().required_features;
+ let required_features = format.required_features();
Additionally guaranteed_format_features
now takes a set of features to assume are enabled.
- let guaranteed_format_features = format.describe().guaranteed_format_features;
+ let guaranteed_format_features = format.guaranteed_format_features(device.features());
Additionally sample_type
and block_size
now take an optional TextureAspect
and return Option
s.
- let sample_type = format.describe().sample_type;
+ let sample_type = format.sample_type(None).expect("combined depth-stencil format requires specifying a TextureAspect");
- let block_size = format.describe().block_size;
+ let block_size = format.block_size(None).expect("combined depth-stencil format requires specifying a TextureAspect");
By @teoxoy in #3436
Buffers used as the destination
argument of CommandEncoder::resolve_query_set
now have to contain the QUERY_RESOLVE
usage instead of the COPY_DST
usage.
let destination = device.create_buffer(&wgpu::BufferDescriptor {
// ...
- usage: wgpu::BufferUsages::COPY_DST | wgpu::BufferUsages::MAP_READ,
+ usage: wgpu::BufferUsages::QUERY_RESOLVE | wgpu::BufferUsages::MAP_READ,
mapped_at_creation: false,
});
command_encoder.resolve_query_set(&query_set, query_range, &destination, destination_offset);
By @JolifantoBambla in #3489
The following Features
have been renamed.
SHADER_FLOAT16
-> SHADER_F16
SHADER_FLOAT64
-> SHADER_F64
SHADER_INT16
-> SHADER_I16
TEXTURE_COMPRESSION_ASTC_LDR
-> TEXTURE_COMPRESSION_ASTC
WRITE_TIMESTAMP_INSIDE_PASSES
-> TIMESTAMP_QUERY_INSIDE_PASSES
By @teoxoy in #3534
Anisotropic filtering has been brought in line with the spec. The anisotropic clamp is now a u16
(was a Option<u8>
) which must be at least 1.
If the anisotropy clamp is not 1, all the filters in a sampler must be Linear
.
SamplerDescriptor {
- anisotropic_clamp: None,
+ anisotropic_clamp: 1,
}
By @cwfitzgerald in #3610.
Some texture format names have changed to get back in line with the spec.
- TextureFormat::Bc6hRgbSfloat
+ TextureFormat::Bc6hRgbFloat
By @cwfitzgerald in #3671.
mip_level_count
and array_layer_count
(members of TextureViewDescriptor
and ImageSubresourceRange
) from Option<NonZeroU32>
to Option<u32>
. By @teoxoy in #3445
bytes_per_row
and rows_per_image
(members of ImageDataLayout
) from Option<NonZeroU32>
to Option<u32>
. By @teoxoy in #3529
Instance::create_surface_from_canvas()
and create_surface_from_offscreen_canvas()
now take the canvas by value. By @daxpedda in #3690
TextureFormatFeatureFlags::MULTISAMPLE_X16
. By @Dinnerbone in #3454
BufferUsages::QUERY_RESOLVE
. By @JolifantoBambla in #3489
Features::SHADER_EARLY_DEPTH_TEST
. By @teoxoy in #3494
fxhash
dependencies have been replaced with rustc-hash
. By @james7132 in #3502
TextureSampleType::Float
on a multisample BindingType::Texture
. By @mockersf in #3686
Surface::configure()
. If the canvas was given an explicit size (via CSS), this will not affect the visual size of the canvas. By @daxpedda in #3690
adapter|device_features
. By @jinleili in #3428
command_encoder_resolve_query_set
. By @JolifantoBambla in #3489
Features::RG11B10UFLOAT_RENDERABLE
. By @mockersf in #3689
max_memory_allocation_size
via PhysicalDeviceMaintenance3Properties
. By @jinleili in #3567
copyTextureToTexture
src/dst aspects must both refer to all aspects of src/dst format. By @teoxoy in #3431
None
values for depth_ops
and stencil_ops
in RenderPassDescriptor::depth_stencil_attachment
. By @niklaskorz in #3660
WasmAbi
functions for WebGPU backend. By @grovesNL in #3657
surface.configure
. By @cwfitzgerald in #3585
copy_external_image_to_texture
, copy_texture_to_texture
and copy_buffer_to_texture
not taking the specified index into account if the target texture is a cube map, 2D texture array or cube map array. By @daxpedda #3641
array_stride
of 0. By @teoxoy in #3538
create_texture
returns an error if new_texture
returns NULL. By @jinleili in #3554
VK_SUBOPTIMAL_KHR
as VK_SUCCESS
on Android due to rotation issues. By @James2022-rgb in #3525
BufferUsages::QUERY_RESOLVE
instead of BufferUsages::COPY_DST
for buffers used in CommandEncoder::resolve_query_set
calls in mipmap
example. By @JolifantoBambla in #3489
This was released as wgpu-hal
version 0.15.4
due to a previous publishing issue. All other crates remain unbumped
MinLod <= 0.0
and MaxLod >= 32.0
or when the fragment shader samples different Lods in the same quad. By @cwfitzgerald in #3610.Vertex buffer is not big enough for the draw call.
for ANGLE/Web when rendering with instance attributes on a single instance. By @wumpf in #3596
SAMPLE_ALPHA_TO_COVERAGE
on queue reset. By @jleibs #3589
CommandEncoder::clear_buffer
. By @raphlinus in #3426
dxil_path
. By @Elabajaba in #3434
{adapter|device}_features
. By @jinleili in #3428