⬆️🦀 Update Rust crate wgpu to v27 #226
Open
+3
−3
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:
25
->27
Release Notes
gfx-rs/wgpu (wgpu)
v27.0.1
Compare Source
This release includes
wgpu
,wgpu-core
,wgpu-hal
, andwgpu-types
version27.0.1
. All other crates remain at their previous versions.Bug Fixes
v27.0.0
Compare Source
Major Changes
Deferred command buffer actions:
map_buffer_on_submit
andon_submitted_work_done
You may schedule buffer mapping and a submission-complete callback to run automatically after you submit, directly from encoders, command buffers, and passes.
Available on
CommandEncoder
,CommandBuffer
,RenderPass
, andComputePass
.By @cwfitzgerald in #8125.
Builtin Support for DXGI swapchains on top of of DirectComposition Visuals in DX12
By enabling DirectComposition support, the dx12 backend can now support transparent windows.
This creates a single
IDCompositionVisual
over the entire window that is used by the mfSurface
. If a user wants to manage the composition tree themselves, they should create their own device and composition, and pass the relevant visual down intowgpu
viaSurfaceTargetUnsafe::CompositionVisual
.By @n1ght-hunter in #7550.
EXPERIMENTAL_RAY_TRACING_ACCELERATION_STRUCTURE
has been merged intoEXPERIMENTAL_RAY_QUERY
We have merged the acceleration structure feature into the
RayQuery
feature. This is to help work around an AMD driver bug and reduce the feature complexity of ray tracing. In the future when ray tracing pipelines are implemented, if either feature is enabled, acceleration structures will be available.By @Vecvec in #7913.
New
EXPERIMENTAL_PRECOMPILED_SHADERS
APIWe have added
Features::EXPERIMENTAL_PRECOMPILED_SHADERS
, replacing existing passthrough types with a unifiedCreateShaderModuleDescriptorPassthrough
which allows passing multiple shader codes for different backends. By @SupaMaggie70Incorporated in #7834Difference for SPIR-V passthrough:
This allows using precompiled shaders without manually checking which backend's code to pass, for example if you have shaders precompiled for both DXIL and SPIR-V.
Buffer mapping apis no longer have lifetimes
Buffer::get_mapped_range()
,Buffer::get_mapped_range_mut()
, andQueue::write_buffer_with()
now return guard objects without any lifetimes. Thismakes it significantly easier to store these types in structs, which is useful for building utilities that build the contents of a buffer over time.
By @sagudev in #8046 and @cwfitzgerald in #8070.
EXPERIMENTAL_*
features now require unsafe code to enableWe want to be able to expose potentially experimental features to our users before we have ensured that they are fully sound to use.
As such, we now require any feature that is prefixed with
EXPERIMENTAL
to have a special unsafe token enabled in the device descriptoracknowledging that the features may still have bugs in them and to report any they find.
By @cwfitzgerald in #8163.
Multi-draw indirect is now unconditionally supported when indirect draws are supported
We have removed
Features::MULTI_DRAW_INDIRECT
as it was unconditionally available on all platforms.RenderPass::multi_draw_indirect
is now available if the device supports downlevel flagDownlevelFlags::INDIRECT_EXECUTION
.If you are using spirv-passthrough with multi-draw indirect and
gl_DrawID
, you can know ifMULTI_DRAW_INDIRECT
is being emulatedby if the
Feature::MULTI_DRAW_INDIRECT_COUNT
feature is available on the device, this feature cannot be emulated efficicently.By @cwfitzgerald in #8162.
wgpu::PollType::Wait
has now an optional timeoutWe removed
wgpu::PollType::WaitForSubmissionIndex
and added fields towgpu::PollType::Wait
in order to express timeouts.Before/after for
wgpu::PollType::Wait
:Before/after for
wgpu::PollType::WaitForSubmissionIndex
:wgpu::PollType::WaitForSubmissionIndex
andwgpu::PollType::Wait
had a hard-coded timeout of 60 seconds.To wait indefinitely on the latest submission, you can also use the
wait_indefinitely
convenience function:By @wumpf in #8282, #8285
New Features
General
wgpu
, with examples. Requires passthrough. By @SupaMaggie70Incorporated in #7345.GPUExternalTexture
. These allow shaders to transparently operate on potentially multiplanar source texture data in either RGB or YCbCr formats via WGSL'stexture_external
type. This is gated behind theFeatures::EXTERNAL_TEXTURE
feature, which is currently only supported on DX12. By @jamienicol in #4386.wgpu::Device::poll
can now specify a timeout viawgpu::PollType::Wait
. By @wumpf in #8282 & #8285naga
naga::front::wgsl::UnimplementedEnableExtension
. By @ErichDonGubler in #8237.Changes
General
CommandEncoder::finish
is called, not when the individual operations are requested. This does not affect the API, but may affect performance characteristics. By @andyleiserson in #8220.push_debug_group
pairs with exactly onepop_debug_group
. By @andyleiserson in #8048.set_viewport
now requires that the supplied minimum depth value is less than the maximum depth value. By @andyleiserson in #8040.copy_texture_to_buffer
,copy_buffer_to_texture
, andcopy_texture_to_texture
operations more closely follows the WebGPU specification. By @andyleiserson in various PRs.bytes_per_row
on the buffer side must be 256B-aligned, even if the transfer is a single row.set_vertex_buffer
andset_index_buffer
must be 4B aligned. By @andyleiserson in #7929.Device::on_uncaptured_error()
must now implementSync
in addition toSend
, and be wrapped inArc
instead ofBox
.In exchange for this, it is no longer possible for calling
wgpu
functions while in that callback to cause a deadlock (not that we encourage you to actually do that).By @kpreid in #8011.
min_subgroup_size <= max_subgroup_size
. By @andyleiserson in #8085.BufferViews
]. By @cwfitzgerald in #8150.F16_IN_F32
downlevel flag forquantizeToF16
,pack2x16float
, andunpack2x16float
in WGSL input. By @aleiserson in #8130.copy_texture_to_buffer
skips over padding space between rows or layers, or when the start/end of a texture-buffer transfer is not 4B aligned. By @andyleiserson in #8099.include_spirv!
andinclude_spirv_raw!
macros to be used in constants and statics. By @clarfonthey in #8250.naga
storageInputOutput16
. By @cryvosh in #7884.naga::proc::Namer
now accepts reserved keywords using two new dedicated types,proc::{KeywordSet, CaseInsensitiveKeywordSet}
. By @kpreid in #8136.rg11b10float
was incorrectly accepted and generated by naga, but now only accepts the the correct namerg11b10ufloat
instead. By @ErikWDev in #8219.source()
method ofShaderError
no longer reports the error as its own source. By @andyleiserson in #8258.DX12
Bug Fixes
General
DX12
EGL
Vulkan
create_swapchain()
. By @MarijnS95 in #8226.naga
@blend_src(…)
attributes. By @ErichDonGubler in #8137.case
values inside aswitch
. By @reima in #8165.Documentation
General
SUBGROUP
andSUBGROUP_BARRIER
features / capabilities. By @andyleiserson in #8203.v26.0.1
Compare Source
Bug Fixes
wgpu::util::initialize_adapter_from_env
whenstd
feature is not enabled. By @kpreid in #7918.profiling
dependency is configured to have profiling active. By @kpreid in #7916.v26.0.0
Compare Source
Major Features
New method
TextureView::texture
You 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_hal
calls 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_hal
and 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_callback
that 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_std
support 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 theirpath
argument via a new sealedAsDiagnosticFilePath
trait. By @atlv24, @bushrat011899, and @ErichDonGubler in #7643.SUBGROUP
feature to be enabled). By @dzamkov and @valaphee in #7683.atomicCompareExchangeWeak
in HLSL and GLSL backends. By @cryvosh in #7658General
wgpu_hal::dx12::Adapter::as_raw()
. By @tronical in ##7852VK_KHR_maintenance1
which 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 implementWebGpuError
for existing errors. This allows users ofwgpu-core
to 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.dot4U8Packed
anddot4I8Packed
for 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}8Clamped
built-ins to all backends and WGSL frontend. By @ErichDonGubler in #7546.value
argument 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.distance
built-in function. By @bernhl in #7530.f16
for pipeline constants, i.e.,override
s in WGSL. By @ErichDonGubler in #7801.DX12
vertex_index
&instance_index
builtins 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_done
for WebGPU backend. By @drewcrawford in #7864Changes
wgpu
anddeno_webgpu
now usewgpu-types::error::WebGpuError
to classify errors. Any changes here are likely to be regressions; please report them if you find them! By @ErichDonGubler in #6547.General
MaintainBase
in favor of usingPollType
. By @waywardmonkeys in #7508.destroy
functions 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 multipledestroy
calls. By @andyleiserson in #7686 and #7720.CommandEncoder::build_acceleration_structures_unsafe_tlas
in favour ofas_hal
and applysimplifications allowed by this. By @Vecvec in #7513
size
parameter tocopy_buffer_to_buffer
has changed fromBufferAddress
toimpl 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
, andRenderBundleEncoder
has changed toEncoderStateError
orPassStateError
. These functions will return theEnded
variant of these errors if called on an encoder that is no longer active. Reporting of all other errors is deferred until a call tofinish()
.CommandEncoderError
in the error enumsClearError
,ComputePassErrorInner
,QueryError
, andRenderPassErrorInner
have been replaced with variants holding anEncoderStateError
.enum CommandEncoderError
has 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 theRenderPass
orComputePass
variants.CopyError
has been removed. Errors that were previously aCopyError
are now aCommandEncoderError
returned 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_product
language extensions as implemented. By @teoxoy in #7543naga::back::hlsl::Writer::new
has a newpipeline_options
argument.hlsl::PipelineOptions::default()
can be passed as a default. Theshader_stage
andentry_point
members ofpipeline_options
can 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_test
for SPIR-V backend, enablingSHADER_EARLY_DEPTH_TEST
for 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::VARIANTS
is now implemented manually rather than derived usingstrum
(allowingstrum
to become a dev-only dependency) so it is no longer a member of thestrum::VARIANTS
trait. Unless you are using this trait as a bound this should have no effect.process_overrides
now 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.compact
Cargo feature has been removed. It is no longer possible to exclude compaction support from the build.compact
now has an additional argument that specifies whether to remove unused functions, globals, and named types and overrides. For the previous behavior, passKeepUnused::Yes
.D3D12
IDXGIFactory4
fromInstance
. By @MendyBerger in #7827Vulkan
HAL
no_std
support towgpu-hal
. By @bushrat011899 in #7599Documentation
General
Adapter::request_device
. By @tesselode in #7768Configuration
📅 Schedule: Branch creation - "every weekend" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, 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.