Reuse cached fences Vec to reduce allocations in draw call to zero #2057
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.
This reduces heap allocations to zero (at least in my use case). Related to #2056.
The idea here is that
Context
andCommandContext
can only be used in a single thread, and fences Vec's used to be created and collected in the scope of a function call. Meaning we can pre-allocate a single Vec for fences, and then just "take" it on every call and "return it back" when the call ends.There are a couple of caveats though:
CommandContext
without refactoring Fences andsync
stuff, simply becauseInserters.insert
call takes a mut ref toCommandContext
as an argument. So in this implementation, I made apub(crate) fn
that "takes" fences Vec from theContext
instead.