Introducing a CommandListLifetimeTracker to enable work submission from multiple threads#119
Open
jambuttenshaw wants to merge 1 commit intoNVIDIA-RTX:mainfrom
Open
Introducing a CommandListLifetimeTracker to enable work submission from multiple threads#119jambuttenshaw wants to merge 1 commit intoNVIDIA-RTX:mainfrom
jambuttenshaw wants to merge 1 commit intoNVIDIA-RTX:mainfrom
Conversation
…k submission from multiple threads
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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 is an implementation of the solution described in #113
This introduces zero breaking API changes for existing code and identical behaviour for existing applications. All new behaviour to enable thread-safe work submission is entirely opt-in. A
ICommandListLifetimeTrackeris specified when creating a command list. Work is submitted as before. The details of lifetime tracking is handled by the backend; applications are required only to regularly callrunGarbageCollectionon the lifetime tracker (as is also required with the device). Command lists that do not specify a lifetime tracker will have their lifetimes managed by the Device, as before.I have only implemented this interface in D3D12 - I am not familiar with Vulkan to implement it myself currently but I believe this interface should be achievable to implement. This interface will not be implementable in D3D11 - but NVRHI does not allow for the creation of multiple command lists in D3D11 anyway, so there is no use for it there regardless.
I have implemented an async compute example in my fork of Donut-Samples to demonstrate this interface in action.