Problem:
Current implementation of descriptors allocation is fine for small and static scenes but on large scenes where there are large amounts of shader permutations, data streaming etc it can quickly become a problem.
It's possible to optimize this externally by reducing binding sets and samplers respectively but still not enough to overcome the problem - even in bindless. Allocation fragmentation is an issue there too in current implementation.
Potential improvements:
I have tried to address allocation fragmentation by utilizing OffsetAllocator which also helped with descriptor limit at some extent but still hitting descriptor allocation error.
Other rendering libraries provide solutions like explained here in Diligent engine or like WebGPU Dawn's ShaderVisibleDescriptorAllocator which use descriptor pools for allocating more and copying only needed descriptors to shader-visible heap for command list execution
Problem:
Current implementation of descriptors allocation is fine for small and static scenes but on large scenes where there are large amounts of shader permutations, data streaming etc it can quickly become a problem.
It's possible to optimize this externally by reducing binding sets and samplers respectively but still not enough to overcome the problem - even in bindless. Allocation fragmentation is an issue there too in current implementation.
Potential improvements:
I have tried to address allocation fragmentation by utilizing OffsetAllocator which also helped with descriptor limit at some extent but still hitting descriptor allocation error.
Other rendering libraries provide solutions like explained here in Diligent engine or like WebGPU Dawn's ShaderVisibleDescriptorAllocator which use descriptor pools for allocating more and copying only needed descriptors to shader-visible heap for command list execution