This class allows saving the current state of an Hlms to disk: both its compiled shaders with source and the generated PSOs.
This allows cutting down stalls by compiling at loading time.
This cache is not meant to be used with HLMS_COMPUTE or HLMS_LOW_LEVEL.
The cache saves several layers:
- The preprocessed shader
- The properties used to generate the shader, in case the template becomes out of date
- The generated PSO pairs.
The layer 1 can only be used for the same platform & RenderSystem it was built for (e.g. a cache built for Windows+D3D11 can only be used there). However the rest of the layers work on any platform on any RenderSystem.
The cache cannot be used if it was generated with a different value of OGRE_DEBUG_STR_SIZE (i.e. see IdString) unless the current value of OGRE_DEBUG_STR_SIZE is 0.
In practice this means caches generated by Debug builds can be used in Release, but caches generated by Release builds cannot be used in Debug, unless OGRE_IDSTRING_ALWAYS_READABLE was set for the Release build.
Decrease loading times further by also enabling the microcode cache. See http://wiki.ogre3d.org/Ogre+2.1+FAQ#Starting_my_app_takes_forever_particularly_Direct3D11_
What's the difference between the Microcode cache and HlmsDiskCache?
A PSO has multiple stages since it's compiled in an Hlms:
|
| HlmsDiskCache::Cache::sourceCode::mergedCache
|
|
for each shader stage.
The produced output
is valid shader code
| debug builds.
| HlmsDiskCache stores this in
| HlmsDiskCache::Cache::sourceCode::sourceFile
|
v
Compiled Microcode The is a binary blob produced by the shader compiler
| (e.g fxc in D3D11). *This is cached by the Microcode cache*.
| If the microcode cache is not active, the HlmsDiskCache will
| rebuild it from scratch to move the performance hit (stalls) from
| realtime into loading time.
|
V
Pipeline State Object This is a huge amalgamation of all the information required to
(PSO) draw a triangle on screen. See HlmsPso for what's in it.
This class allows saving the current state of an Hlms to disk: both its compiled shaders with source ...
Definition OgreHlmsDiskCache.h:132
HLMS stands for "High Level Material System".
Definition OgreHlms.h:81
Property instance with passthrough calls to a given object.
Definition OgreProperty.h:217
Defines the functionality of a 3D API.
Definition OgreRenderSystem.h:99
PsoVec pso
Definition OgreHlmsDiskCache.h:165
Definition OgrePrerequisites.h:655
Definition OgrePrerequisites.h:641