Fix window resize on software renderers #22242
Open
+58
−14
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.
Objective
On systems without a GPU (like VMs using Microsoft Basic Render Driver), resizing windows or switching to fullscreen crashes with a "surface is in use" error.
Fixes #22225
Solution
The issue was introduced in #21866 which removed cleanup code that hardware GPUs don't need, but software renderers require.
This fix restores that cleanup behavior specifically for software renderers (CPU device type), ensuring texture views are released before the window surface is reconfigured.
Changes
clear_view_attachments: Dropswap_chain_texture_viewfor windows with pending size/mode changes on CPU device types (runs beforecreate_surfaces)render_system: RemoveViewTargetcomponents on CPU device types to release cloned texture viewsTesting
Tested on Windows 11 VM with Microsoft Basic Render Driver (DX12 backend, CPU device type):
AdapterInfo { name: "Microsoft Basic Render Driver", vendor: 5140, device: 140, device_type: Cpu, driver: "10.0.26100.7309", driver_info: "", backend: Dx12 }
Test cases:
App::new().add_plugins(DefaultPlugins).run()Platforms tested:
Known limitation: The
tests/window/resizing.rsexample (which resizes every frame down to 1x1) still crashes on software renderers, but this is a pre-existing issue that occurred in 0.17.3 as well.Happy to do additional testing if needed!