Open vertver opened 9 months ago
Seems useful. Hope VK has this functionality too (sorry, I'm out of topic for now). Regarding priorities:
enhanced barriers
== VK_KHR_synchronization2
(#35)Then we can adjust further steps. And of course, there are other higher priority than NRI tasks I have to work on.
I did some research about pipeline library, and here is what I found:
Pipeline library in D3D12 and in Vulkan are absolutely different things. In D3D12 ID3D12PipelineLibrary
was created for storing and loading multiple pipelines into/from one file/chunk. However, in Vulkan, pipeline library was created for building multiple parts of pipeline (rasteriser state, output merger, etc) and combining them into one big pipeline.
However, AFAIK, you can use PSO cache on both APIs. So, I think that maybe we can drop Vulkan behaviour and use D3D12 description of pipeline library. Also, it might be possible to emulate this behaviour on D3D11 and use this functionality in core.
References:
D3D12 (see CachedPSO
for more info)
Vulkan sample
Hi! Since you are interested and I'm busy with other stuff, I don't mind if you add ext (or core?) functionality, even focusing more on D3D12. I would suggest starting with the API to ensure quality, the implementation is less important because it can be improved later. I promise (fingers crossed ^_^) to accept these changes.
Thanks for the links! Despite that VK solution is different, it seems to solve the same problem. I hope there is an API covering both GAPIs. For D3D11, I think, pipeline cache API can be made NOP (i.e. do nothing) because there is no such functionality on D3D11 (only implicit shader cache).
Most likely PSO caching will go into Core because:
At the moment I'm busy with work on my project, so this month and possibly next month I won't be able to contribute to the NRI (only minor things, bugfixes). But closer to April-May I will upload something for pipelines and other changes.
Sounds good! Good luck with your work. I'm always happy to see NRI changes and feature requests from you. As I promised, the streamer interface will be implemented soon.
Related: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_pipeline_creation_cache_control.html https://registry.khronos.org/vulkan/specs/1.3/html/vkspec.html#VkPipelineCache https://microsoft.github.io/DirectX-Specs/d3d/ShaderCache.html https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ns-d3d12-d3d12_cached_pipeline_state
On D3D12 and Vulkan there is a problem with the PSO build process. Sometimes the game can hang, and not only that - you, as a developer, cannot directly predict the pipeline build time. Also, on GDK you can't build PSO at runtime, only pre-compile. So I think this feature is most needed in NRI as an extension because it affects a lot of things. What do you think? Maybe we need some priorities for our tasks to manage them properly?