A cross-platform, safe, pure-Rust graphics API.
Wgpu supports now pipeline-overridable constants
This allows you to define constants in wgsl like this:
override some_factor: f32 = 42.1337; // Specifies a default of 42.1337 if it's not set.
And then set them at runtime like so on your pipeline consuming this shader:
// ...
fragment: Some(wgpu::FragmentState {
compilation_options: wgpu::PipelineCompilationOptions {
constants: &[("some_factor".to_owned(), 0.1234)].into(), // Sets `some_factor` to 0.1234.
..Default::default()
},
// ...
}),
// ...
By @teoxoy & @jimblandy in #5500
Due to a specification change write_timestamp
is no longer supported on WebGPU.
wgpu::CommandEncoder::write_timestamp
requires now the new wgpu::Features::TIMESTAMP_QUERY_INSIDE_ENCODERS
feature which is available on all native backends but not on WebGPU.
By @wumpf in #5188
Many numeric built-ins have had a constant evaluation implementation added for them, which allows them to be used in a const
context:
abs
, acos
, acosh
, asin
, asinh
, atan
, atanh
, cos
, cosh
, round
, saturate
, sin
, sinh
, sqrt
, step
, tan
, tanh
, ceil
, countLeadingZeros
, countOneBits
, countTrailingZeros
, degrees
, exp
, exp2
, floor
, fract
, fma
, inverseSqrt
, log
, log2
, max
, min
, radians
, reverseBits
, sign
, trunc
By @ErichDonGubler in #4879, #5098
The following subgroup operations are available in wgsl now:
subgroupBallot
, subgroupAll
, subgroupAny
, subgroupAdd
, subgroupMul
, subgroupMin
, subgroupMax
, subgroupAnd
, subgroupOr
, subgroupXor
, subgroupExclusiveAdd
, subgroupExclusiveMul
, subgroupInclusiveAdd
, subgroupInclusiveMul
, subgroupBroadcastFirst
, subgroupBroadcast
, subgroupShuffle
, subgroupShuffleDown
, subgroupShuffleUp
, subgroupShuffleXor
Availability is governed by the following feature flags:
wgpu::Features::SUBGROUP
for all operations except subgroupBarrier
in fragment & compute, supported on Vulkan, DX12 and Metal.wgpu::Features::SUBGROUP_VERTEX
, for all operations except subgroupBarrier
general operations in vertex shaders, supported on Vulkanwgpu::Features::SUBGROUP_BARRIER
, for support of the subgroupBarrier
operation, supported on Vulkan & MetalNote that there currently some differences between wgpu's native-only implementation and the open WebGPU proposal.
By @exrook and @lichtso in #5301
wgpu::Features::SHADER_INT64
enables 64 bit integer signed and unsigned integer variables in wgsl (i64
and u64
respectively).
Supported on Vulkan, DX12 (requires DXC) and Metal (with MSL 2.3+ support).
By @atlv24 and @cwfitzgerald in #5154
Unorm10_10_10_2
VertexFormat by @McMackety in #5477
wgpu-types
's trace
and replay
features have been replaced by the serde
feature. By @KirmesBude in #5149
wgpu-core
's serial-pass
feature has been removed. Use serde
instead. By @KirmesBude in #5149
InstanceFlags::GPU_BASED_VALIDATION
, which enables GPU-based validation for shaders. This is currently only supported on the DX12 and Vulkan backends; other platforms ignore this flag, for now. By @ErichDonGubler in #5146, #5046.
InstanceFlags::VALIDATION
.InstanceFlags::advanced_debugging
. Since the overhead is potentially very large, the flag is not enabled by default in debug builds when using InstanceFlags::from_build_config
.InstanceFlags::with_env
with the new WGPU_GPU_BASED_VALIDATION
environment variable.wgpu::Instance
can now report which wgpu::Backends
are available based on the build configuration. By @wumpf #5167
-wgpu::Instance::any_backend_feature_enabled()
+!wgpu::Instance::enabled_backend_features().is_empty()
wgpu_core::pipeline::ProgrammableStageDescriptor
is now optional. By @ErichDonGubler in #5305.Features::downlevel{_webgl2,}_features
was made const by @MultisampledNight in #5343
wgpu::CommandEncoder::as_hal_mut
wgpu::TextureView::as_hal
wgpu::Texture::as_hal
now returns a user-defined type to match the other as_hal functions--metal-version
with Naga CLI. By @pcleavelin in #5392
arrayLength
for runtime-sized arrays inside binding arrays (for WGSL input and SPIR-V output). By @kvark in #5428
--shader-stage
and --input-kind
options to naga-cli for specifying vertex/fragment/compute shaders, and frontend. by @ratmice in #5411
create_validator
function to wgpu_core Device
to create naga Validator
s. By @atlv24 #5606
device_set_device_lost_callback
method for ContextWebGpu
. By @suti in #5438
ReadOnly
and ReadWrite
. By @JolifantoBambla in #5434
get_texture_format_features
cheap. By @Dinnerbone in #5346
DEPTH32FLOAT_STENCIL8
as supported in GLES. By @Dinnerbone in #5370
TEXTURE_COMPRESSION_ETC2
. By @Valaphee in #5568
driver
and driver_info
, with the OpenGL flavor and version, similar to Vulkan. By @valaphee in #5482
wgpu_hal
documentation. By @jimblandy in #5516, #5524, #5562, #5563, #5566, #5617, #5618
PrimitiveState::strip_index_format
. By @cpsdqs in #5350
SourceLocation
. By @stefnotch in #5386
push_constant
syntax. By @waywardmonkeys in #5393
Limits::max_compute_workgroup_storage_size
default value. By @atlv24 in #5601
serde
feature not compiling for wgpu-types
. By @KirmesBude in #5149
storage
and uniform
vars. By @jimblandy #5222
extern "C"
+ [no_mangle]) from RenderPass & ComputePass recording. By @wumpf in #5409.Expression::ZeroValue
. By @Imberflur in #5587.extractBits
and insertBits
when offset + count
overflows the bit width. By @cwfitzgerald in #5305
clamp
when min
argument > max
argument. By @cwfitzgerald in #5300.TypeInner::scalar_width
to be consistent with the rest of the codebase and return values in bytes not bits. By @atlv24 in #5532.first_instance
getting ignored in draw indexed when ARB_shader_draw_parameters
feature is present and base_vertex
is 0. By @valaphee in #5482
wgpu_hal::vulkan::CommandEncoder
to make sure discard_encoding
is not called in the closed state. By @villuna in #5557
LocalType
caching. By @atlv24 in #5590
multithreaded_compute
test. By @jimblandy in #5129.This release includes wgpu
, wgpu-core
, and wgpu-hal
. All other crates are unchanged.
wgpu-profiler
. By @cwfitzgerald in #5517
This release includes wgpu
, wgpu-core
, and wgpu-hal
. All other crates are unchanged.
web_sys
--cfg=web_sys_unstable_apis
is no longer needed in your RUSTFLAGS
to compile for WebGPU!!!
While WebGPU's javascript api is stable in the browsers, the web_sys
bindings for WebGPU are still improving. As such they are hidden behind the special cfg --cfg=web_sys_unstable_apis
and are not available by default. Everyone who wanted to use our WebGPU backend needed to enable this cfg in their RUSTFLAGS
. This was very inconvenient and made it hard to use WebGPU, especially when WebGPU is enabled by default. Additionally, the unstable APIs don't adhere to semver, so there were repeated breakages.
To combat this problem we have decided to vendor the web_sys
bindings for WebGPU within the crate. Notably we are not forking the bindings, merely vendoring, so any improvements we make to the bindings will be contributed directly to upstream web_sys
.
By @cwfitzgerald in #5325.
winit
. By @ashdnazg in #5326.This release includes wgpu
, wgpu-core
, wgpu-hal
, wgpu-types
, and naga
. All other crates are unchanged.
wgpu::Id
now implements PartialOrd
/Ord
allowing it to be put in BTreeMap
s. By @cwfitzgerald and @9291Sam in #5176
wgsl-out
wgpu::Instance::create_surface
documentation. By @HexoKnight in #5280.wgpu::CommandEncoder::clear_buffer
documentation. By @PWhiddy in #5281.Surface
configuration incorrectly claimed that wgpu::Instance::create_surface
was unsafe. By @hackaugusto in #5265.clone
during GLSL shader injestion. By @a1phyr in #5118.Device::clear_buffer
where offset + size > buffer.size
was not checked when size
was omitted. By @ErichDonGubler in #5282.panic!
when dropping Instance
without InstanceFlags::VALIDATION
. By @hakolao in #5134
Etc2Rgba8Unorm
format. By @andristarr in #5178
libX11.so.6
in addition to libX11.so
on linux. #5307
GL_EXT_texture_shadow_lod
to support sampling a cube depth texture with an explicit LOD. By @cmrschwarz in #5171.glsl-in
This release includes wgpu
and wgpu-hal
. The rest of the crates are unchanged since 0.19.0.
web_sys_unstable_apis
set. By @rukai in #5104
SurfaceTexture::present
. By @i509VCB in #5093.This release includes:
wgpu
wgpu-core
wgpu-hal
wgpu-types
wgpu-info
naga
(skipped from 0.14 to 0.19)naga-cli
(skipped from 0.14 to 0.19)d3d12
(skipped from 0.7 to 0.19)Large refactoring of wgpu’s internals aiming at reducing lock contention, and providing better performance when using wgpu on multiple threads.
By @gents83 in #3626 and thanks also to @jimblandy, @nical, @Wumpf, @Elabajaba & @cwfitzgerald
All of wgpu's public dependencies are now re-exported at the top level so that users don't need to take their own dependencies. This includes:
Enabling webgl
no longer removes the webgpu
backend.
Instead, there's a new (default enabled) webgpu
feature that allows to explicitly opt-out of webgpu
if so desired.
If both webgl
& webgpu
are enabled, wgpu::Instance
decides upon creation whether to target wgpu-core/WebGL or WebGPU.
This means that adapter selection is not handled as with regular adapters, but still allows to decide at runtime whether
webgpu
or the webgl
backend should be used using a single wasm binary.
By @wumpf in #5044
naga-ir
Dedicated FeatureThe naga-ir
feature has been added to allow you to add naga module shaders without guessing about what other features needed to be enabled to get access to it.
By @cwfitzgerald in #5063.
expose-ids
Feature available unconditionallyThis feature allowed you to call global_id
on any wgpu opaque handle to get a unique hashable identity for the given resource. This is now available without the feature flag.
By @cwfitzgerald in #4841.
dx12
and metal
Backend Crate Featureswgpu now exposes backend feature for the Direct3D 12 (dx12
) and Metal (metal
) backend. These are enabled by default, but don't do anything when not targeting the corresponding OS.
By @daxpedda in #4815.
This backend had no functionality, and with the recent support for GL on Desktop, which allows wgpu to run on older devices, there was no need to keep this backend. By @valaphee in #4828.
WGPU_ALLOW_UNDERLYING_NONCOMPLIANT_ADAPTER
Environment VariableThis adds a way to allow a Vulkan driver which is non-compliant per VK_KHR_driver_properties
to be enumerated. This is intended for testing new Vulkan drivers which are not Vulkan compliant yet.
By @i509VCB in #4754.
DeviceExt::create_texture_with_data
allows Mip-Major DataPreviously, DeviceExt::create_texture_with_data
only allowed data to be provided in layer major order. There is now a order
parameter which allows you to specify if the data is in layer major or mip major order.
let tex = ctx.device.create_texture_with_data(
&queue,
&descriptor,
+ wgpu::util::TextureDataOrder::LayerMajor,
src_data,
);
By @cwfitzgerald in #4780.
It is now possible to safely create a wgpu::Surface
with wgpu::Instance::create_surface()
by letting wgpu::Surface
hold a lifetime to window
.
Passing an owned value window
to Surface
will return a wgpu::Surface<'static>
.
All possible safe variants (owned windows and web canvases) are grouped using wgpu::SurfaceTarget
.
Conversion to wgpu::SurfaceTarget
is automatic for any type implementing raw-window-handle
's HasWindowHandle
& HasDisplayHandle
traits, i.e. most window types.
For web canvas types this has to be done explicitly:
let surface: wgpu::Surface<'static> = instance.create_surface(wgpu::SurfaceTarget::Canvas(my_canvas))?;
All unsafe variants are now grouped under wgpu::Instance::create_surface_unsafe
which takes the
wgpu::SurfaceTargetUnsafe
enum and always returns wgpu::Surface<'static>
.
In order to create a wgpu::Surface<'static>
without passing ownership of the window use
wgpu::SurfaceTargetUnsafe::from_window
:
let surface = unsafe {
instance.create_surface_unsafe(wgpu::SurfaceTargetUnsafe::from_window(&my_window))?
};
The easiest way to make this code safe is to use shared ownership:
let window: Arc<winit::Window>;
// ...
let surface = instance.create_surface(my_window.clone())?;
All platform specific surface creation using points have moved into SurfaceTargetUnsafe
as well.
For example:
Safety by @daxpedda in #4597 Unification by @wumpf in #4984
Abstract types make numeric literals easier to use, by automatically converting literals and other constant expressions from abstract numeric types to concrete types when safe and necessary. For example, to build a vector of floating-point numbers, Naga previously made you write:
vec3<f32>(1.0, 2.0, 3.0)
With this change, you can now simply write:
vec3<f32>(1, 2, 3)
Even though the literals are abstract integers, Naga recognizes
that it is safe and necessary to convert them to f32
values in
order to build the vector. You can also use abstract values as
initializers for global constants and global and local variables,
like this:
var unit_x: vec2<f32> = vec2(1, 0);
The literals 1
and 0
are abstract integers, and the expression
vec2(1, 0)
is an abstract vector. However, Naga recognizes that
it can convert that to the concrete type vec2<f32>
to satisfy
the given type of unit_x
.
The WGSL specification permits abstract integers and
floating-point values in almost all contexts, but Naga's support
for this is still incomplete. Many WGSL operators and builtin
functions are specified to produce abstract results when applied
to abstract inputs, but for now Naga simply concretizes them all
before applying the operation. We will expand Naga's abstract type
support in subsequent pull requests.
As part of this work, the public types naga::ScalarKind
and
naga::Literal
now have new variants, AbstractInt
and AbstractFloat
.
By @jimblandy in #4743, #4755.
Instance::enumerate_adapters
now returns Vec<Adapter>
instead of an ExactSizeIterator
This allows us to support WebGPU and WebGL in the same binary.
- let adapters: Vec<Adapter> = instance.enumerate_adapters(wgpu::Backends::all()).collect();
+ let adapters: Vec<Adapter> = instance.enumerate_adapters(wgpu::Backends::all());
By @wumpf in #5044
device.poll()
now returns a MaintainResult
instead of a bool
This is a forward looking change, as we plan to add more information to the MaintainResult
in the future.
This enum has the same data as the boolean, but with some useful helper functions.
- let queue_finished: bool = device.poll(wgpu::Maintain::Wait);
+ let queue_finished: bool = device.poll(wgpu::Maintain::Wait).is_queue_empty();
By @cwfitzgerald in #5053
DownlevelFlags::VERTEX_AND_INSTANCE_INDEX_RESPECTS_RESPECTIVE_FIRST_VALUE_IN_INDIRECT_DRAW
to know if @builtin(vertex_index)
and @builtin(instance_index)
will respect the first_vertex
/ first_instance
in indirect calls. If this is not present, both will always start counting from 0. Currently enabled on all backends except DX12. By @cwfitzgerald in #4722.FLOAT32_FILTERABLE
feature (web and native, corresponds to WebGPU's float32-filterable
). By @almarklein in #4759.TextureFormat::block_size
is deprecated, use TextureFormat::block_copy_size
instead: By @wumpf in #4647.DispatchIndirect
, DrawIndexedIndirect
, and DrawIndirect
types in the wgpu::util
module to DispatchIndirectArgs
, DrawIndexedIndirectArgs
, and DrawIndirectArgs
. By @cwfitzgerald in #4723.encoder.clear_buffer
an Option<u64>
instead of Option<NonZero<u64>>
. By @nical in #4737.info
log level noise. By @nical in #4769, #4711 and #4772
features
& limits
fields of DeviceDescriptor
to required_features
& required_limits
. By @teoxoy in #4803.SurfaceConfiguration
now exposes desired_maximum_frame_latency
which was previously hard-coded to 2. By setting it to 1 you can reduce latency under the risk of making GPU & CPU work sequential. Currently, on DX12 this affects the MaximumFrameLatency
, on all other backends except OpenGL the size of the swapchain (on OpenGL this has no effect). By @emilk & @wumpf in #4899
@builtin(instance_index)
now properly reflects the range provided in the draw call instead of always counting from 0. By @cwfitzgerald in #4722.POLYGON_MODE_LINE
and POLYGON_MODE_POINT
. By @valaphee in #4836.1.0lf
denotes an f64
value. There has been experimental support for an f64
type for a while, but until now there was no syntax for writing literals with that type. As before, Naga module validation rejects f64
values unless naga::valid::Capabilities::FLOAT64
is requested. By @jimblandy in #4747.--bulk-validate
option to Naga CLI. By @jimblandy in #4871.cargo xtask validate
now runs validation jobs in parallel, using the jobserver protocol to limit concurrency, and offers a validate all
subcommand, which runs all available validation types. By @jimblandy in #4902.span
and validate
features. Always fully validate shader modules, and always track source positions for use in error messages. By @teoxoy in #4706.Scalar
struct type for use in Naga's IR, and update all frontend, middle, and backend code appropriately. By @jimblandy in #4673.naga::Literal
variant, I64
, for signed 64-bit literals. #4711.struct
member padding always. By @ErichDonGubler in #4701.i
suffix on i32
literals. By @jimblandy in #4863.f
suffix on f32
literals. By @jimblandy in #4869.BufferMappedRange
trait is now WasmNotSendSync
, i.e. it is Send
/Sync
if not on wasm or fragile-send-sync-non-atomic-wasm
is enabled. By @wumpf in #4818.wgpu_types::CompositeAlphaMode
serde serialization to spec. By @littledivy in #4940.ConfigureSurfaceError::TooLarge
. By @Dinnerbone in #4960.DeviceLostCallbackC
params. By @bradwerth in #5032.Queue::write_texture
on DX12. By @DTZxPorter in #4990.VK_EXT_robustness2
only when not using an outdated intel iGPU driver. By @TheoDulka in #4602.BufferSlice::get_mapped_range
multiple times on the same buffer slice (instead of throwing a Javascript exception). By @DouglasDwyer in #4726.wgpu::Instance
instead of sharing a global one. By @Zoxc in #4603
dot
, reflect
, distance
, and ldexp
builtin functions. Correct the WGSL generated for constructing 64-bit floating-point matrices. Add tests for all the above. By @jimblandy in #4684.alias
declarations in Naga IR Type
s. By @jimblandy in #4733.COPY_SRC
usage flag in surface configuration. By @Toqozz in #4852.This release includes naga
version 0.14.2. The crates wgpu-core
, wgpu-hal
are still at 0.18.1
and the crates wgpu
and wgpu-types
are still at 0.18.0
.
Compose
expressions whose operands are Splat
expressions. Such expressions are created and marked as constant by the constant evaluator. By @jimblandy in #4695.This release includes the crates wgpu-core
and wgpu-hal
at 0.18.1, and naga
at 0.14.1. The crates wgpu
and wgpu-types
are still at 0.18.0
.
Surface::configure
in debug builds. By @cwfitzgerald in #4635
Device::create_shader_module
.InstanceFlags::DEBUG
is enabled.We now support OpenGL on Windows! This brings support for a vast majority of the hardware that used to be covered by our DX11 backend. As of this writing we support OpenGL 3.3+, though there are efforts to reduce that further.
This allows us to cover the last 12 years of Intel GPUs (starting with Ivy Bridge; aka 3xxx), and the last 16 years of AMD (starting with Terascale; aka HD 2000) / NVidia GPUs (starting with Tesla; aka GeForce 8xxx).
By @Zoxc in #4248
Timestamp queries are now supported on both Metal and Desktop OpenGL. On Apple chips on Metal, they only support timestamp queries in command buffers or in the renderpass descriptor, they do not support them inside a pass.
Metal: By @Wumpf in #4008
OpenGL: By @Zoxc in #4267
Addition of the TimestampWrites
type to compute and render pass descriptors to allow profiling on tilers which do not support timestamps inside passes.
Added an example to demonstrate the various kinds of timestamps.
Additionally, metal now supports timestamp queries!
By @FL33TW00D & @wumpf in #3636.
We now support binary occlusion queries! This allows you to determine if any of the draw calls within the query drew any pixels.
Use the new occlusion_query_set
field on RenderPassDescriptor
to give a query set that occlusion queries will write to.
let mut rpass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
// ...
+ occlusion_query_set: Some(&my_occlusion_query_set),
});
Within the renderpass do the following to write the occlusion query results to the query set at the given index:
rpass.begin_occlusion_query(index);
rpass.draw(...);
rpass.draw(...);
rpass.end_occlusion_query();
These are binary occlusion queries, so the result will be either 0 or an unspecified non-zero value.
By @Valaphee in #3402
// WGSL constant expressions are now supported!
const BLAH: u32 = 1u + 1u;
// `rgb10a2uint` and `bgra8unorm` can now be used as a storage image format.
var image: texture_storage_2d<rgb10a2uint, write>;
var image: texture_storage_2d<bgra8unorm, write>;
// You can now use dual source blending!
struct FragmentOutput{
@location(0) source1: vec4<f32>,
@location(0) @second_blend_source source2: vec4<f32>,
}
// `modf`/`frexp` now return structures
let result = modf(1.5);
result.fract == 0.5;
result.whole == 1.0;
let result = frexp(1.5);
result.fract == 0.75;
result.exponent == 2i;
// `modf`/`frexp` are currently disabled on GLSL and SPIR-V input.
// Cannot get pointer to a workgroup variable
fn func(p: ptr<workgroup, u32>); // ERROR
// Cannot create Inf/NaN through constant expressions
const INF: f32 = 3.40282347e+38 + 1.0; // ERROR
const NAN: f32 = 0.0 / 0.0; // ERROR
// `outerProduct` function removed
// Error on repeated or missing `@workgroup_size()`
@workgroup_size(1) @workgroup_size(2) // ERROR
fn compute_main() {}
// Error on repeated attributes.
fn fragment_main(@location(0) @location(0) location_0: f32) // ERROR
StoreOp
is now Enumerationwgpu::Operations::store
used to be an underdocumented boolean value,
causing misunderstandings of the effect of setting it to false
.
The API now more closely resembles WebGPU which distinguishes between store
and discard
,
see WebGPU spec on GPUStoreOp.
// ...
depth_ops: Some(wgpu::Operations {
load: wgpu::LoadOp::Clear(1.0),
- store: false,
+ store: wgpu::StoreOp::Discard,
}),
// ...
By @wumpf in #4147
The instance descriptor grew two more fields: flags
and gles_minor_version
.
flags
allow you to toggle the underlying api validation layers, debug information about shaders and objects in capture programs, and the ability to discard lables
gles_minor_version
is a rather niche feature that allows you to force the GLES backend to use a specific minor version, this is useful to get ANGLE to enable more than GLES 3.0.
let instance = wgpu::Instance::new(InstanceDescriptor {
...
+ flags: wgpu::InstanceFlags::default()
+ gles_minor_version: wgpu::Gles3MinorVersion::Automatic,
});
gles_minor_version
: By @PJB3005 in #3998
flags
: By @nical in #4230
Our testing harness was completely revamped and now automatically runs against all gpus in the system, shows the expected status of every test, and is tolerant to flakes.
Additionally, we have filled out our CI to now run the latest versions of WARP and Mesa. This means we can test even more features on CI than before.
By @cwfitzgerald in #3873
The angle
feature flag has to be set for the GLES backend to be enabled on Windows & macOS.
By @teoxoy in #4185
DownlevelFlags::READ_ONLY_DEPTH_STENCIL
. By @teoxoy in #4031
setViewport
valid usage for x
, y
and this.[[attachment_size]]
. By @James2022-rgb in #4058
wgpu::CreateSurfaceError
and wgpu::RequestDeviceError
now give details of the failure, but no longer implement PartialEq
and cannot be constructed. By @kpreid in #4066 and #4145
WGPU_POWER_PREF=none
a valid value. By @fornwall in 4076
Rgb10a2Uint
format. By @teoxoy in 4199
DeviceError::Lost
instead of DeviceError::Invalid
. By @bradwerth in #4238
"strict_asserts"
feature enable check that wgpu-core's lock-ordering tokens are unique per thread. By @jimblandy in #4258
wgpu_hal::vulkan::Instance::required_extensions
to desired_extensions
. By @jimblandy in #4115
vkFreeCommandBuffers
when vkDestroyCommandPool
will take care of that for us. By @jimblandy in #4059
gpu-allocator
to 0.23. By @Elabajaba in #4198
Features::TEXTURE_COMPRESSION_ASTC_HDR
in #4157
naga::StorageAccess
instead of naga::GlobalUse
. By @teoxoy in #3985.Queue::on_submitted_work_done
callbacks will now always be called after all previous BufferSlice::map_async
callbacks, even when there are no active submissions. By @cwfitzgerald in #4036.clear
texture views being leaked when wgpu::SurfaceTexture
is dropped before it is presented. By @rajveermalviya in #4057.Feature::SHADER_UNUSED_VERTEX_OUTPUT
to allow unused vertex shader outputs. By @Aaron1011 in #4116.surface_configure
. By @nical in #4220 and #4227
wgpu::Features::PARTIALLY_BOUND_BINDING_ARRAY
not being actually enabled in vulkan backend. By @39ali in#3772.vk::InstanceCreateFlags::ENUMERATE_PORTABILITY_KHR
unless the VK_KHR_portability_enumeration
extension is available. By @jimblandy in#4038.Features::VERTEX_WRITABLE_STORAGE
based on the right feature level. By @teoxoy in #4033.RenderPass
and how render state works. By @kpreid in #4055
wgpu-example::utils
module to contain misc functions and such that are common code but aren't part of the example framework. Add to it the functions output_image_wasm
and output_image_native
, both for outputting Vec<u8>
RGBA images either to the disc or the web page. By @JustAnotherCodemonkey in #3885.capture
example as it had issues (did not run on wasm) and has been replaced by render-to-texture
(see above). By @JustAnotherCodemonkey in #3885.This release includes the crate wgpu
and wgpu-hal
only. The crates wgpu-core
, and wgpu-types
are still at 0.17.1
.