Implement shader caching
* Shader compilation is now cached. Subsequent loads take less than a millisecond. * Improved game, editor and project manager startup time. * Editor uses .godot/shader_cache to store shaders. * Game uses user://shader_cache * Project manager uses $config_dir/shader_cache * Options to tweak shader caching in project settings. * Editor path configuration moved from EditorSettings to new class, EditorPaths, so it can be available early on (before shaders are compiled). * Reworked ShaderCompilerRD to ensure deterministic shader code creation (else shader may change and cache will be invalidated). * Added shader compression with SMOLV: https://github.com/aras-p/smol-v
This commit is contained in:
@ -179,11 +179,18 @@ static Vector<uint8_t> _compile_shader_glsl(RenderingDevice::ShaderStage p_stage
|
||||
return ret;
|
||||
}
|
||||
|
||||
static String _get_cache_key_function_glsl(const RenderingDevice::Capabilities *p_capabilities) {
|
||||
String version;
|
||||
version = "SpirVGen=" + itos(glslang::GetSpirvGeneratorVersion()) + ", major=" + itos(p_capabilities->version_major) + ", minor=" + itos(p_capabilities->version_minor) + " , subgroup_size=" + itos(p_capabilities->subgroup_operations) + " , subgroup_ops=" + itos(p_capabilities->subgroup_operations) + " , subgroup_in_shaders=" + itos(p_capabilities->subgroup_in_shaders);
|
||||
return version;
|
||||
}
|
||||
|
||||
void preregister_glslang_types() {
|
||||
// initialize in case it's not initialized. This is done once per thread
|
||||
// and it's safe to call multiple times
|
||||
glslang::InitializeProcess();
|
||||
RenderingDevice::shader_set_compile_function(_compile_shader_glsl);
|
||||
RenderingDevice::shader_set_get_cache_key_function(_get_cache_key_function_glsl);
|
||||
}
|
||||
|
||||
void register_glslang_types() {
|
||||
|
||||
Reference in New Issue
Block a user