- API:
MULTIVIEW
featureDEPTH_CLIP_CONTROL
feature to replace the oldDEPTH_CLAMP
TEXTURE_FORMAT_16BIT_NORM
feature- push/pop error scopes on the device
- more limits for compute shaders
SamplerBindingType
instead of booleans- sampler arrays are supported by
TEXTURE_BINDING_ARRAY
feature - "glsl" cargo feature for accepting GLSL shader code
- enforced MSRV-1.53
- correctness:
- textures are zero-initialized
- lots and lots of fixes
- validation:
- match texture-sampler pairs
- check
min_binding_size
late at draw - check formats to match in
copy_texture_to_texture
- allow
strip_index_format
to be none if unused - check workgroup sizes and counts
- shaders:
- please refer to naga-0.8 changelog
- nice error messages
- Core:
- validate device descriptor before actually creating it
- fix validation of texture-sampler pairs
- Vulkan:
- fix running on Vulkan-1.1 instance
- improve detection of workaround for Intel+Nvidia on Linux
- fix resource limits on Vulkan-1.2
- fix the check for storage buffer requirement
- change internal semaphore logic to work around Linux+Intel bugs
- fix enabling extension-provided features
- GLES:
- fix running on old and bogus drivers
- fix stale samplers on bindings change
- fix integer textures
- fix querying work group parameters
- fix stale PBO bindings caused by resource copies
- fix rendering to cubemap faces
- fix
Rgba16Float
format - fix stale vertex attributes when changing the pipeline
- Metal:
- fix window resizing for running in multiple processes
- Web:
- fix
set_index_buffer
andset_vertex_buffer
to have optional sizes
- fix
- fix buffer transition barriers
- Metal:
- disable RW buffers on macOS 10.11
- fix memory leaks in render pass descriptor
- WebGL:
- fix surface reconfiguration
- GLES:
- fix mapping when persistent mapping isn't supported
- allow presentation in Android emulator
- fix sRGB attributes on EGL-1.4 contexts
- GL:
- fix mapping flags and buffer initialization
- fix context creation when sRGB is available
- fix bind group layout lifetime with regard to bind groups
- GL/WebGL: fix vertex buffer bindings with non-zero first instance
- DX12: fix cube array view construction
- Vulkan: fix NV optimus detection on Linux
- GL:
- fix indirect dispatch buffers
- WebGL:
- fix querying storage-related limits
- work around a browser bug in the clear shader
- Infrastructure:
- Deno WebGPU plugin is a part of the repository
- WebGPU CTS is ran on CI via Deno
- API:
- initial WebGL support
SwapchainFrame
is removed.SurfaceTexture::present()
needs to be called instead of dropping.- better SPIR-V control flow processing
- ability to request a software (fallback) adapter
- new limits for
min_uniform_buffer_offset_alignment
andmin_storage_buffer_offset_alignment
- features:
- new
PARTIALLY_BOUND_BINDING_ARRAY
NON_FILL_POLYGON_MODE
is split intoPOLYGON_MODE_LINE
andPOLYGON_MODE_POINT
- new
- fixes:
- many shader-related fixes in Naga-0.7
- fix a panic in resource cleanup happening when they are dropped on another thread
- Vulkan:
- create SPIR-V per entry point to work around driver bugs
- expose higher descriptor limits based on descriptor indexing capabilities
- GL and Vulkan:
- Fix renderdoc device pointers
- optimization:
- on Vulkan, bounds checks are omitted if the platform can do them natively
- fix
write_texture
for array textures - fix closing an encoder on validation error
- expose Metal surface creation
- panic with an actual error message in the default handler
- Metal:
- fix stencil back-face state
- fix the limit on command buffer count
- Metal:
- fix stencil operations
- fix memory leak on M1 when out of focus
- fix depth clamping checks
- fix unsized storage buffers beyond the first
- Vulkan:
- fix read access barriers for writable storage buffers
- fix shaders using cube array textures
- work around Linux Intel+Nvidia driver conflicts
- work around Adreno bug with
OpName
- DX12:
- fix storage binding offsets
- Metal:
- fix compressed texture copies
- All:
- fix querying the size of storage textures
- Vulkan:
- use render pass labels
- Metal:
- fix moving the surface between displays
- DX12:
- enable BC compressed textures
- GL:
- fix vertex-buffer and storage related limits
- All:
- expose more formats via adapter-specific feature
- fix creation of depth+stencil views
- validate cube textures to not be used as storage
- fix mip level count check for storage textures
- Metal:
- fix usage of work group memory
- DX12:
- critical fix of pipeline layout
- Infrastructure:
gfx-hal
is replaced by the in-house graphics abstractionwgpu-hal
. Backends: Vulkan, Metal, D3D-12, and OpenGL ES-3.- examples are tested automatically for image snapshots.
- API:
cross
feature is removed entirely. Only Rust code from now on.- processing SPIR-V inputs for later translation now requires
spirv
compile feature enabled - new
Features::SPIRV_SHADER_PASSTHROUGH
run-time feature allows providing pass-through SPIR-V (orthogonal to the compile feature) - several bitflag names are renamed to plural:
TextureUsage
,BufferUsage
,ColorWrite
. - the
SwapChain
is merged intoSurface
. Returned frames areTexture
instead ofTextureView
. - renamed
TextureUsage
bits:SAMPLED
->TEXTURE_BINDING
,STORAGE
->STORAGE_BINDING
. - renamed
InputStepMode
toVertexStepMode
. - readable storage textures are no longer a part of the base API. Only exposed via format-specific features, non-portably.
- implemented
Rgb9e5Ufloat
format. - added limits for binding sizes, vertex data, per-stage bindings, and others.
- reworked downlevel flags, added downlevel limits.
resolver = "2"
is now required in top-level cargo manifests
- Fixed:
Device::create_query_set
would return an error when creating exactlyQUERY_SET_MAX_QUERIES
(8192) queries. Now it only returns an error when trying to create more thanQUERY_SET_MAX_QUERIES
queries.
- fix
Features::TEXTURE_SPECIFIC_FORMAT_FEATURES
not being supported for rendertargets
- fix buffer inits delayed by a frame
- fix query resolves to initialize buffers
- fix pipeline statistics stride
- fix the check for maximum query count
- Updated:
- naga to
v0.5
.
- naga to
- Added:
Features::VERTEX_WRITABLE_STORAGE
.Features::CLEAR_COMMANDS
which allows you to usecmd_buf.clear_texture
andcmd_buf.clear_buffer
.
- Changed:
- Updated default storage buffer/image limit to
8
from4
.
- Updated default storage buffer/image limit to
- Fixed:
Buffer::get_mapped_range
can now have a range of zero.- Fixed output spirv requiring the "kernal" capability.
- Fixed segfault due to improper drop order.
- Fixed incorrect dynamic stencil reference for Replace ops.
- Fixed tracking of temporary resources.
- Stopped unconditionally adding cubemap flags when the backend doesn't support cubemaps.
- Validation:
- Ensure that if resources are viewed from the vertex stage, they are read only unless
Features::VERTEX_WRITABLE_STORAGE
is true. - Ensure storage class (i.e. storage vs uniform) is consistent between the shader and the pipeline layout.
- Error when a color texture is used as a depth/stencil texture.
- Check that pipeline output formats are logical
- Added shader label to log messages if validation fails.
- Ensure that if resources are viewed from the vertex stage, they are read only unless
- Tracing:
- Make renderpasses show up in the trace before they are run.
- Docs:
- Fix typo in
PowerPreference::LowPower
description.
- Fix typo in
- Player:
- Automatically start and stop RenderDoc captures.
- Examples:
- Handle winit's unconditional exception.
- Internal:
- Merged wgpu-rs and wgpu back into a single repository.
- The tracker was split into two different stateful/stateless trackers to reduce overhead.
- Added code coverage testing
- CI can now test on lavapipe
- Add missing extern "C" in wgpu-core on
wgpu_render_pass_execute_bundles
- Fix incorrect function name
wgpu_render_pass_bundle_indexed_indirect
towgpu_render_bundle_draw_indexed_indirect
.
- fix dynamic stencil reference for Replace ops
- fix SPIR-V generation from WGSL, which was broken due to "Kernel" capability
- validate buffer storage classes
- Added support for storage texture arrays for Vulkan and Metal.
- Naga is used by default to translate shaders, SPIRV-Cross is optional behind
cross
feature - Features:
- buffers are zero-initialized
- downlevel limits for DX11/OpenGL support
- conservative rasterization (native-only)
- buffer resource indexing (native-only)
- API adjustments to the spec:
- Renamed
RenderPassColorAttachmentDescriptor
toRenderPassColorAttachment
:- Renamed the
attachment
member toview
- Renamed the
- Renamed
RenderPassDepthStencilAttachmentDescriptor
toRenderPassDepthStencilAttachment
:- Renamed the
attachment
member toview
- Renamed the
- Renamed
VertexFormat
values- Examples:
Float3
->Float32x3
,Ushort2
->Uint16x2
- Examples:
- Renamed the
depth
value ofExtent3d
todepth_or_array_layers
- Updated blending options in
ColorTargetState
:- Renamed
BlendState
toBlendComponent
- Added
BlendState
struct to hold color and alpha blend state - Moved
color_blend
andalpha_blend
members intoblend
member
- Renamed
- Moved
clamp_depth
fromRastizerState
toPrimitiveState
- Updated
PrimitiveState
:- Added
conservative
member for enabling conservative rasterization
- Added
- Updated copy view structs:
- Renamed
TextureCopyView
toImageCopyTexture
- Renamed
TextureDataLayout
toImageDataLayout
- Changed
bytes_per_row
androws_per_image
members ofImageDataLayout
fromu32
toOption<NonZeroU32>
- Renamed
- Changed
BindingResource::Binding
from containing fields directly to containing aBufferBinding
- Added
BindingResource::BufferArray
- Renamed
- Infrastructure:
- switch from
tracing
toprofiling
- more concrete and detailed errors
- API traces include the command that crashed/panicked
- Vulkan Portability support is removed from Apple platforms
- switch from
- Validation:
- texture bindings
- filtering of textures by samplers
- interpolation qualifiers
- allow vertex components to be underspecified
- expose
wgc::device::queue
sub-module in public - fix the indexed buffer check
- fix command allocator race condition
- Major API changes:
RenderPipelineDescriptor
BindingType
- new
ShaderModuleDescriptor
- new
RenderEncoder
- Features:
- (beta) WGSL support, including the ability to bypass SPIR-V entirely
- (beta) implicit bind group layout support
- better error messages
- timestamp and pipeline statistics queries
- ETC2 and ASTC compressed textures
- (beta) targeting WASM with WebGL backend
- reduced dependencies
- Native-only:
- clamp-to-border addressing
- polygon fill modes
- query a format for extra capabilities
f64
support in shaders
- Validation:
- shader interface
- render pipeline descriptor
- vertex buffers
- don't panic in the staging belt if the channel is dropped
- Crates:
- C API is moved to another repository
player
: standalone API replayer and tester
- Features:
- Proper error handling with all functions returning
Result
- Graceful handling of "error" objects
- API tracing infrastructure
- uploading data with
write_buffer
/write_texture
queue operations - reusable render bundles
- read-only depth/stencil attachments
- bind group layout deduplication
- Cows, cows everywhere
- Web+Native features:
- Depth clamping (feature)
- BC texture compression
- Native-only features:
- mappable primary buffers
- texture array bindings
- push constants
- multi-draw indirect
- Proper error handling with all functions returning
- Validation:
- all transfer operations
- all resource creation
- bind group matching to the layout
- experimental shader interface matching with Naga
- add debug markers support
- fix destruction of adapters, swap chains, and bind group layouts
- fix command pool leak with temporary threads
- improve assertion messages
- implement
From<TextureFormat>
forTextureComponentType
- fix memory management of staging buffers
- fix reading access to storage textures
- another fix to layout transitions for swapchain images
- fix read-only storage flags
- fix pipeline layout life time
- improve various assert messages
- fix tracking of swapchain images that are used multiple times in a command buffer
- fix tracking of initial usage of a resource across a command buffer
- Crates:
wgpu-types
: common types between native and web targetswgpu-core
: internal API for the native and remote wrappers
- Features:
- based on gfx-hal-0.5
- moved from Rendy to the new
gfx-memory
andgfx-descriptor
crates - passes are now recorded on the client side. The user is also responsible to keep all resources referenced in the pass up until it ends recording.
- coordinate system is changed to have Y up in the rendering space
- revised GPU lifetime tracking of all resources
- revised usage tracking logic
- all IDs are now non-zero
- Mailbox present mode
- Validation:
- active pipeline
- Fixes:
- lots of small API changes to closely match upstream WebGPU
- true read-only storage bindings
- unmapping dropped buffers
- better error messages on misused swapchain frames
- improved swap chain error handling
- fixed render pass transitions
- fixed depth/stencil transitions
- fixed dynamic offset iteration
- Platforms: removed OpenGL/WebGL support temporarily
- Features:
- based on gfx-hal-0.4 with the new swapchain model
- exposing adapters from all available backends on a system
- tracking of samplers
- cube map support with an example
- Validation:
- buffer and texture usage
- fixed instance creation on Windows
- fixed pipeline barriers that aren't transitions
- Platforms: experimental OpenGL/WebGL
- Crates:
- Rust API is moved out to another repository
- Features:
- based on gfx-hal-0.3 with help of
rendy-memory
andrendy-descriptor
- type-system-assisted deadlock prevention (for locking internal structures)
- texture sub-resource tracking
raw-window-handle
integration instead ofwinit
- multisampling with an example
- indirect draws and dispatches
- stencil masks and reference values
- native "compute" example
- everything implements
Debug
- based on gfx-hal-0.3 with help of
- Validation
- vertex/index/instance ranges at draw calls
- bing groups vs their expected layouts
- bind group buffer ranges
- required stencil reference, blend color
- fixed frame acquisition GPU waits
- fixed submission tracking
- added support for blend colors
- fixed bind group compatibility at the gfx-hal level
- validating the bind groups and blend colors
- fixed vertex format mapping
- fixed building with "empty" backend on Windows
- bumped the default descriptor pool size
- fixed host mapping alignments
- validating the uniform buffer offset
- Platforms: iOS/Metal, D3D11
- Crates:
wgpu-remote
: remoting layer for the cross-process boundarygfx-examples
: selected gfx pre-ll examples ported over
- Features:
- native example for compute
- "gfx-cube" and "gfx-shadow" examples
- copies between buffers and textures
- separate object identity for the remote client
- texture view tracking
- native swapchain resize support
- buffer mapping
- object index epochs
- comprehensive list of vertex and texture formats
- validation of pipeline compatibility with the pass
- Fixes
- fixed resource destruction
- Platforms: Linux/Vulkan, Windows/Vulkan, D3D12, macOS/Metal
- Crates:
wgpu-native
: C API implementation of WebGPU, based on gfx-halwgpu-bindings
: auto-generated C headerswgpu
: idiomatic Rust wrapperexamples
: native C examples
- Features: - native examples for triangle rendering - basic native swapchain integration - concept of the storage hub - basic recording of passes and command buffers - submission-based lifetime tracking and command buffer recycling - automatic resource transitions