Transparent global caching for compiled shader/PSO objects for
gl: (gl46 Only) glProgramBinary
d3d11: DXBC artifacts (this makes huge shaders like Mega Bezel load extremely quick after the first load)
vulkan: VkPipelineCache
d3d12: Validated DXIL artifacts
d3d12: D3D12_CACHED_PIPELINE_STATE
Transparent here means that the cache must be completely fallible. If any step in the retrieval of cached objects goes wrong, it must not fail and must re-try with a non-cached instance. Runtimes are not given an opportunity to recover from a cache fail, it will just failover with the non-cached instance.
The cache is implemented via SQLite with WAL2 because we need to be resilient across multiple processes that could have librashader loaded. Cache data is updated on a best effort basis. If cached pipelines become outdated because of driver updates, they are automatically invalidated and replaced with new pipelines.
This is exposed in the C API without an API version bump, making it another breaking ABI change before 0.1.0. Guess the rc.3 promise was a lie. Hopefully this will be the last.
Transparent global caching for compiled shader/PSO objects for
glProgramBinary
VkPipelineCache
DXIL
artifactsD3D12_CACHED_PIPELINE_STATE
Transparent here means that the cache must be completely fallible. If any step in the retrieval of cached objects goes wrong, it must not fail and must re-try with a non-cached instance. Runtimes are not given an opportunity to recover from a cache fail, it will just failover with the non-cached instance.
The cache is implemented via SQLite with WAL2 because we need to be resilient across multiple processes that could have librashader loaded. Cache data is updated on a best effort basis. If cached pipelines become outdated because of driver updates, they are automatically invalidated and replaced with new pipelines.
This is exposed in the C API without an API version bump, making it another breaking ABI change before 0.1.0. Guess the
rc.3
promise was a lie. Hopefully this will be the last.