[metal] explicitly retain resources used by command buffers #8694
+74
−9
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.
Description
Both revert #7842 and propose a proper fix by explicitly retaining resources used by command buffers.
When
retain_command_buffer_referencesis false (the new default after the revert), Metal's command buffers don't automatically retain the resources they reference.Previously, this was "fixed" by setting
retain_command_buffer_referencesto true, but since command buffers are pooled and reused, this caused unbounded memory growth - every resource ever touched by a command buffer stayed alive indefinitely.This commit implements proper resource lifetime tracking:
Testing
Manually
Checklist
cargo fmt.Runtaplo format.cargo clippy --tests. If applicable, add:--target wasm32-unknown-unknowncargo xtask testto run tests.If this contains user-facing changes, add aCHANGELOG.mdentry.