fix(deps): update rust crate wgpu to v26 - autoclosed #80
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Note
Mend has cancelled the proposed renaming of the Renovate GitHub app being renamed to
mend[bot].This notice will be removed on 2025-10-07.
This PR contains the following updates:
0.19->26.0Release Notes
gfx-rs/wgpu (wgpu)
v26.0.1Compare Source
Bug Fixes
wgpu::util::initialize_adapter_from_envwhenstdfeature is not enabled. By @kpreid in #7918.profilingdependency is configured to have profiling active. By @kpreid in #7916.v26.0.0Compare Source
Major Features
New method
TextureView::textureYou can now call
texture_view.texture()to get access to the texture thata given texture view points to.
By @cwfitzgerald and @Wumpf in #7907.
as_halcalls now return guards instead of using callbacks.Previously, if you wanted to get access to the wgpu-hal or underlying api types, you would call
as_haland get the hal type as a callback. Now the function returns a guard which dereferences to the hal type.By @cwfitzgerald in #7863.
Enabling Vulkan Features/Extensions
For those who are doing vulkan/wgpu interop or passthrough and need to enable features/extensions that wgpu does not expose, there is a new
wgpu_hal::vulkan::Adapter::open_with_callbackthat allows the user to modify the pnext chains and extension lists populated by wgpu before we create a vulkan device. This should vastly simplify the experience, as previously you needed to create a device yourself.Underlying api interop is a quickly evolving space, so we welcome all feedback!
By @Vecvec in #7829.
naga
no_stdsupport with default features disabled. By @Bushrat011899 in #7585.naga::front::glsl::Frontend::new_with_options. By @Vrixyz in #6364.naga::{front::wgsl::ParseError,WithSpan}::emit_error_to_string_with_path) now accept more types for theirpathargument via a new sealedAsDiagnosticFilePathtrait. By @atlv24, @bushrat011899, and @ErichDonGubler in #7643.SUBGROUPfeature to be enabled). By @dzamkov and @valaphee in #7683.atomicCompareExchangeWeakin HLSL and GLSL backends. By @cryvosh in #7658General
wgpu_hal::dx12::Adapter::as_raw(). By @tronical in ##7852VK_KHR_maintenance1which should be widely available on newer drivers). By @teoxoy in #7596wgpu_types::error::{ErrorType, WebGpuError}for classification of errors according to WebGPU'sGPUError's classification scheme, and implementWebGpuErrorfor existing errors. This allows users ofwgpu-coreto offload error classification onto the wgpu ecosystem, rather than having to do it themselves without sufficient information. By @ErichDonGubler in #6547.Bug Fixes
General
BufferSlice::get_mapped_range_as_array_buffer()on a buffer would prevent you from ever unmapping it. Note that this API has changed and is nowBufferView::as_uint8array().naga
_. By @andyleiserson in #7540.dot4U8Packedanddot4I8Packedfor all backends, using specialized intrinsics on SPIR-V, HSLS, and Metal if available, and polyfills everywhere else. By @robamler in #7494, #7574, and #7653.pack4x{I,U}8Clampedbuilt-ins to all backends and WGSL frontend. By @ErichDonGubler in #7546.valueargument oftextureStore. By @jimblandy in #7567.abs(most negative abstract int). By @jimblandy in #7507.[un]pack4x{I,U}8[Clamp]on SPIR-V and MSL 2.1+. By @robamler in #7664.select, which had issues particularly with a lack of automatic type conversion. By @ErichDonGubler in #7572.distancebuilt-in function. By @bernhl in #7530.f16for pipeline constants, i.e.,overrides in WGSL. By @ErichDonGubler in #7801.DX12
vertex_index&instance_indexbuiltins working for indirect draws. By @teoxoy in #7535Vulkan
wgpu_hal::vulkan::drm. By @ErichDonGubler in #7810.Metal
fn surface_capabilities(). By @jamesordner in #7692WebGPU
on_submitted_work_donefor WebGPU backend. By @drewcrawford in #7864Changes
wgpuanddeno_webgpunow usewgpu-types::error::WebGpuErrorto classify errors. Any changes here are likely to be regressions; please report them if you find them! By @ErichDonGubler in #6547.General
MaintainBasein favor of usingPollType. By @waywardmonkeys in #7508.destroyfunctions for buffers and textures in wgpu-core are now infallible. Previously, they returned an error if called multiple times for the same object. This only affects the wgpu-core API; the wgpu API already allowed multipledestroycalls. By @andyleiserson in #7686 and #7720.CommandEncoder::build_acceleration_structures_unsafe_tlasin favour ofas_haland applysimplifications allowed by this. By @Vecvec in #7513
sizeparameter tocopy_buffer_to_bufferhas changed fromBufferAddresstoimpl Into<Option<BufferAddress>>. This achieves the spec-defined behavior of the value being optional, while still accepting existing calls without changes. By @andyleiserson in #7659.CommandEncoder,RenderPassEncoder,ComputePassEncoder, andRenderBundleEncoderhas changed toEncoderStateErrororPassStateError. These functions will return theEndedvariant of these errors if called on an encoder that is no longer active. Reporting of all other errors is deferred until a call tofinish().CommandEncoderErrorin the error enumsClearError,ComputePassErrorInner,QueryError, andRenderPassErrorInnerhave been replaced with variants holding anEncoderStateError.enum CommandEncoderErrorhas changed significantly, to reflect which errors can be raised byCommandEncoder.finish(). There are also some errors that no longer appear directly inCommandEncoderError, and instead appear nested within theRenderPassorComputePassvariants.CopyErrorhas been removed. Errors that were previously aCopyErrorare now aCommandEncoderErrorreturned byfinish(). (The detailed reasons for copies to fail were and still are described byTransferError, which was previously a variant ofCopyError, and is now a variant ofCommandEncoderError).naga
readonly_and_readwrite_storage_textures&packed_4x8_integer_dot_productlanguage extensions as implemented. By @teoxoy in #7543naga::back::hlsl::Writer::newhas a newpipeline_optionsargument.hlsl::PipelineOptions::default()can be passed as a default. Theshader_stageandentry_pointmembers ofpipeline_optionscan be used to write only a single entry point when using the HLSL and MSL backends (GLSL and SPIR-V already had this functionality). The Metal and DX12 HALs now write only a single entry point when loading shaders. By @andyleiserson in #7626.early_depth_testfor SPIR-V backend, enablingSHADER_EARLY_DEPTH_TESTfor Vulkan. Additionally, fixed conservative depth optimizations when usingearly_depth_test. The syntax for forcing early depth tests is now@early_depth_test(force)instead of@early_depth_test. By @dzamkov in #7676.ImplementedLanguageExtension::VARIANTSis now implemented manually rather than derived usingstrum(allowingstrumto become a dev-only dependency) so it is no longer a member of thestrum::VARIANTStrait. Unless you are using this trait as a bound this should have no effect.process_overridesnow compacts the module to remove unused items. It is no longer necessary to supply values for overrides that are not used by the active entry point.compactCargo feature has been removed. It is no longer possible to exclude compaction support from the build.compactnow has an additional argument that specifies whether to remove unused functions, globals, and named types and overrides. For the previous behavior, passKeepUnused::Yes.D3D12
IDXGIFactory4fromInstance. By @MendyBerger in #7827Vulkan
HAL
no_stdsupport towgpu-hal. By @bushrat011899 in #7599Documentation
General
Adapter::request_device. By @tesselode in #7768v25.0.2Compare Source
Bug Fixes
General
Queue::write_buffer. By @RedMindZ in #7582raw-window-handledependency being too lenient. By @kpreid in #7526WebGPU
v25.0.0Compare Source
Major Features
Hashmaps Removed from APIs
Both
PipelineCompilationOptions::constantsandShaderSource::Glsl::definesnow takeslices of key-value pairs instead of
hashmaps. This is to prepare forno_stdsupport and allow us to keep which
hashmaphasher and such as implementation details. Italso allows more easily creating these structures inline.
By @cwfitzgerald in #7133
All Backends Now Have Features
Previously, the
vulkanandglesbackends were non-optional on windows, linux, and android and there was no way to disable them. We have now figured out how to properly make them disablable! Additionally, if you turn on thewebglfeature, you will only get the GLES backend on WebAssembly, it won't leak into native builds, like previously it might have.By @cwfitzgerald in #7076.
device.pollApi ReworkedThis release reworked the poll api significantly to allow polling to return errors when polling hits internal timeout limits.
Maintainwas renamedPollType. Additionally,pollnow returns a result containing information about what happened during the poll.By @cwfitzgerald in #6942 and #7030.
wgpu::Device::start_capturerenamed, documented, and made unsafeThere is now documentation to describe how this maps to the various debuggers' apis.
By @cwfitzgerald in #7470
Ensure loops generated by SPIR-V and HLSL naga backends are bounded
Make sure that all loops in shaders generated by these naga backends are bounded
to avoid undefined behaviour due to infinite loops. Note that this may have a
performance cost. As with the existing implementation for the MSL backend this
can be disabled by using
Device::create_shader_module_trusted().By @jamienicol in #6929 and #7080.
Split up
FeaturesinternallyInternally split up the
Featuresstruct and recombine them internally using a macro. There should be no breakingchanges from this. This means there are also namespaces (as well as the old
Features::*) for all wgpu specificfeatures and webgpu feature (
FeaturesWGPUandFeaturesWebGPUrespectively) andFeatures::from_internal_flagswhichallow you to be explicit about whether features you need are available on the web too.
By @Vecvec in #6905, #7086
WebGPU compliant dual source blending feature
Previously, dual source blending was implemented with a
wgpunative only feature flag and used a custom syntax in wgpu.By now, dual source blending was added to the WebGPU spec as an extension.
We're now following suite and implement the official syntax.
Existing shaders using dual source blending need to be updated:
struct FragmentOutput{ - @​location(0) source0: vec4<f32>, - @​location(0) @​second_blend_source source1: vec4<f32>, + @​location(0) @​blend_src(0) source0: vec4<f32>, + @​location(0) @​blend_src(1) source1: vec4<f32>, }With that
wgpu::Features::DUAL_SOURCE_BLENDINGis now available on WebGPU.Furthermore, GLSL shaders now support dual source blending as well via the
indexlayout qualifier:By @wumpf in #7144
Unify interface for SpirV shader passthrough
Replace device
create_shader_module_spirvfunction with a genericcreate_shader_module_passthroughfunctiontaking a
ShaderModuleDescriptorPassthroughenum as parameter.Update your calls to
create_shader_module_spirvand usecreate_shader_module_passthroughinstead:By @syl20bnr in #7326.
Noop Backend
It is now possible to create a dummy
wgpudevice even when no GPU is available. This may be useful for testing of code which manages graphics resources. Currently, it supports reading and writing buffers, and other resource types can be created but do nothing.To use it, enable the
noopfeature ofwgpu, and either callDevice::noop(), or addNoopBackendOptions { enable: true }to the backend options of yourInstance(this is an additional safeguard beyond theBackendsbits).By @kpreid in #7063 and #7342.
SHADER_F16feature is now available with naga shadersPreviously this feature only allowed you to use
f16on SPIR-V passthrough shaders. Now you can use it on all shaders, including WGSL, SPIR-V, and GLSL!By @FL33TW00D, @ErichDonGubler, and @cwfitzgerald in #5701
Bindless support improved and validation rules changed.
Metal support for bindless has significantly improved and the limits for binding arrays have been increased.
Previously, all resources inside binding arrays contributed towards the standard limit of their type (
texture_2darrays for example would contribute tomax_sampled_textures_per_shader_stage). Now these resources will only contribute towards binding-array specific limits:max_binding_array_elements_per_shader_stagefor all non-sampler resourcesmax_binding_array_sampler_elements_per_shader_stagefor sampler resources.This change has allowed the metal binding array limits to go from between 32 and 128 resources, all the way 500,000 sampled textures. Additionally binding arrays are now bound more efficiently on Metal.
This change also enabled legacy Intel GPUs to support 1M bindless resources, instead of the previous 1800.
To facilitate this change, there was an additional validation rule put in place: if there is a binding array in a bind group, you may not use dynamic offset buffers or uniform buffers in that bind group. This requirement comes from vulkan rules on
UpdateAfterBinddescriptors.By @cwfitzgerald in #6811, #6815, and #6952.
New Features
General
Buffermethods corresponding toBufferSlicemethods, so you can skip creating aBufferSlicewhen it offers no benefit, andBufferSlice::slice()for sub-slicing a slice. By @kpreid in #7123.BufferSlice::buffer(),BufferSlice::offset()andBufferSlice::size(). By @kpreid in #7148.impl From<BufferSlice> for BufferBindingandimpl From<BufferSlice> for BindingResource, allowingBufferSlices to be easily used in creating bind groups. By @kpreid in #7148.util::StagingBelt::allocate()so the staging belt can be used to write textures. By @kpreid in #6900.CommandEncoder::transition_resources()for native API interop, and allowing users to slightly optimize barriers. By @JMS55 in #6678.wgpu_hal::vulkan::Adapter::texture_format_as_rawfor native API interop. By @JMS55 in #7228.as_halfor both acceleration structures. By @Vecvec in #7303.create_shader_module_passthroughon device. By @syl20bnr in #7326.Features::MSL_SHADER_PASSTHROUGHrun-time feature allows providing pass-through MSL Metal shaders. By @syl20bnr in #7326.wgpu_hal. By @SupaMaggie70Incorporated in #7089naga
unpackSnorm4x8,unpackUnorm4x8,unpackSnorm2x16,unpackUnorm2x16for GLSL versions they aren't supported in. By @DJMcNab in #7408.Examples
GPUBufferby distributing it across many buffers, and then having the shader receive them as abinding_arrayof storage buffers. By @alphastrata in #6138Changes
General
wgpu::Instance::request_adapter()now returnsResultinstead ofOption; the error provides information about why no suitable adapter was returned. By @kpreid in #7330.hashbrownto simplify no-std support. By Brody in #6938 & #6925.instance_idandinstance_custom_indextoinstance_indexandinstance_custom_databy @Vecvec in#6780
naga
naga::ir(e.g.naga::ir::Module).The original names (e.g.
naga::Module) remain present for compatibility.By @kpreid in #7365.
usestatements to simplify futureno_stdsupport. By @bushrat011899 in #7256&operator to take the address of a component of a vector,which is not permitted by the WGSL specification. By @andyleiserson in #7284
termcolorandstderrare now optional behind features of the same names. By @bushrat011899 in #7482Vulkan
HAL queue callback support
Queue::submit()to Vulkan'svk::Semaphoreallocated outside of wgpu. By @sotaroikeda in #6813.Bug Fixes
naga
letdeclarations, and acceptvecN()as a constructor for vectors (in any context). By @andyleiserson in #7367.&&and||operators are no longer allowed on vectors. By @andyleiserson in #7368.MathFunctionbuiltins. By @jimblandy in #6833.General
structures. By @Vecvec in #7486.
max_color_attachmentslimit from 8 to 4 for better GLES compatibility. By @adrian17 in #6994.#7062.
Device::last_acceleration_structure_build_command_indexinto queue submit. By @Vecvec in #7462.Vulkan
Gles
gles. By @richerfu in #7085Dx12
WebGPU
Performance
naga
unicode-xidwithunicode-ident. By @CrazyboyQCD in #7135Documentation
Improved documentation around pipeline caches and
TextureBlitter. By @DJMcNab in #6978 and #7003.Improved documentation of
PresentMode, buffer mapping functions, memory alignment requirements, texture formats’ automatic conversions, and various types and constants. By @kpreid in #7211 and #7283.Added a hello window example. By @laycookie in #6992.
Examples
pre_present_notify()before presenting. By @kjarosh in #7074.v24.0.5Compare Source
Bug Fixes
General
Queue::write_buffer. By @RedMindZ in #7582WebGPU
v24.0.3Compare Source
Bug Fixes
Surface, solving segfaults on exit on some systems. By @ed-2100 in #6997v24.0.1Compare Source
Bug Fixes
wgpunot building with--no-default-featureson when targetingwasm32-unknown-unknown. By @wumpf in #6946.CloneonShaderModule. By @a1phyr in #6937.CopyExternalImageDestInfonot exported onwgpu. By @wumpf in #6962.v24.0.0Compare Source
Major changes
Refactored Dispatch Between
wgpu-coreandwebgpuThe crate
wgpuhas two different "backends", one which targets webgpu in the browser, one which targetswgpu_coreon native platforms and webgl. This was previously very difficult to traverse and add new features to. The entire system was refactored to make it simpler. Additionally the new system has zero overhead if there is only one "backend" in use. You can see the new system in action by using go-to-definition on any wgpu functions in your IDE.By @cwfitzgerald in #6619.
Most objects in
wgpuare nowCloneAll types in the
wgpuAPI are nowClone.This is implemented with internal reference counting, so cloning for instance a
Bufferdoes copies only the "handle" of the GPU buffer, not the underlying resource.Previously, libraries using
wgpuobjects likeDevice,BufferorTextureetc. often had to manually wrap them in aArcto allow passing between libraries.This caused a lot of friction since if one library wanted to use a
Bufferby value, calling code had to give up ownership of the resource which may interfere with other subsystems.Note that this also mimics how the WebGPU javascript API works where objects can be cloned and moved around freely.
By @cwfitzgerald in #6665.
Render and Compute Passes Now Properly Enforce Their Lifetime
A regression introduced in 23.0.0 caused lifetimes of render and compute passes to be incorrectly enforced. While this is not
a soundness issue, the intent is to move an error from runtime to compile time. This issue has been fixed and restored to the 22.0.0 behavior.
Bindless (
binding_array) Grew More CapabilitiesPARTIALLY_BOUND_BINDING_ARRAYon Resource Binding Tier 3 Hardware. This is most D3D12 hardware D3D12 Feature Table for more information on what hardware supports this feature. By @cwfitzgerald in #6734.Device::create_shader_module_uncheckedRenamed and Now Has Configuration Optionscreate_shader_module_uncheckedbecamecreate_shader_module_trusted.This allows you to customize which exact checks are omitted so that you can get the correct balance of performance and safety for your use case. Calling the function is still unsafe, but now can be used to skip certain checks only on certain builds.
This also allows users to disable the workarounds in the
msl-outbackend to prevent the compiler from optimizing infinite loops. This can have a big impact on performance, but is not recommended for untrusted shaders.By @cwfitzgerald and @rudderbucky in #6662.
wgpu::Instance::newnow takesInstanceDescriptorby referencePreviously
wgpu::Instance::newtookInstanceDescriptorby value (which is overall fairly uncommon in wgpu).Furthermore,
InstanceDescriptoris now cloneable.By @wumpf in #6849.
Environment Variable Handling Overhaul
Previously how various bits of code handled reading settings from environment variables was inconsistent and unideomatic.
We have unified it to (
Type::from_env()orType::from_env_or_default()) andType::with_envfor all types.By @cwfitzgerald in #6895
Backend-specific instance options are now in separate structs
In order to better facilitate growing more interesting backend options, we have put them into individual structs. This allows users to more easily understand what options can be defaulted and which they care about. All of these new structs implement
from_env()and delegate to their respectivefrom_env()methods.If you do not need any of these options, or only need one backend's info use the
default()impl to fill out the remaining feelds.By @cwfitzgerald in #6895
The
diagnostic(…);directive is now supported in WGSLnaga now parses
diagnostic(…);directives according to the WGSL spec. This allows users to control certain lints, similar to Rust'sallow,warn, anddenyattributes. For example, in standard WGSL (but, notably, not naga yet—see #4369) this snippet would emit a uniformity error:…but we can now silence it with the
offseverity level, like so:There are some limitations to keep in mind with this new functionality:
@diagnostic(…)rules asfnattributes, but prioritization for rules in statement positions (i.e.,if (…) @​diagnostic(…) { … }is unclear. If you are blocked by not being able to parsediagnostic(…)rules in statement positions, please let us know in #5320, so we can determine how to prioritize it!error,warning,info, andoffseverity levels. These are all technically usable now! A caveat, though: warning- and info-level are only emitted tostderrvia thelogfaçade, rather than being reported through aResult::Errin naga or theCompilationInfointerface inwgpu{,-core}. This will require breaking changes in naga to fix, and is being tracked by #6458.diagnostic(…)rules. In fact, only thederivative_uniformitytriggering rule exists in the WGSL standard. That said, naga contributors are excited to see how this level of control unlocks a new ecosystem of configurable diagnostics.diagnostic(…)rules are not yet emitted in WGSL output. This means thatwgsl-in→wgsl-outis currently a lossy process. We felt that it was important to unblock users who neededdiagnostic(…)rules (i.e., #3135) before we took significant effort to fix this (tracked in #6496).By @ErichDonGubler in #6456, #6148, #6533, #6353, #6537.
New Features
naga
nagaCLI would incorrectly skConfiguration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.