Skip to content

Introducing a CommandListLifetimeTracker to enable work submission from multiple threads#119

Open
jambuttenshaw wants to merge 1 commit intoNVIDIA-RTX:mainfrom
jambuttenshaw:multithread_submission
Open

Introducing a CommandListLifetimeTracker to enable work submission from multiple threads#119
jambuttenshaw wants to merge 1 commit intoNVIDIA-RTX:mainfrom
jambuttenshaw:multithread_submission

Conversation

@jambuttenshaw
Copy link
Contributor

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 ICommandListLifetimeTracker is 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 call runGarbageCollection on 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant