Files
test/source/blender/gpu/intern/gpu_init_exit.cc
Clément Foucault 4c655f076c GPU: Shader: Parallel warmup of builtin shaders
This reduces the time needed to get to the first pixel
on screen by multithreading the builtin shader compilation.

We avoid doing this if subprocess compilation is on as
the overhead of potentially partially starting all subprocess
is far greater than the benefit of paralllel compilation.

For some reasons, the compilation is much slower when
done async for these shaders (on Metal ~200ms > ~1.2ms),
so the saving might not be substantial.

Mac M1: First frame 6s > 5s.

Pull Request: https://projects.blender.org/blender/blender/pulls/139627
2025-06-11 14:08:38 +02:00

66 lines
1.2 KiB
C++

/* SPDX-FileCopyrightText: 2013 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup gpu
*/
#include "BKE_material.hh"
#include "GPU_batch.hh"
#include "GPU_init_exit.hh" /* interface */
#include "GPU_pass.hh"
#include "intern/gpu_private.hh"
#include "intern/gpu_shader_create_info_private.hh"
#include "intern/gpu_shader_dependency_private.hh"
/**
* although the order of initialization and shutdown should not matter
* (except for the extensions), I chose alphabetical and reverse alphabetical order
*/
static bool initialized = false;
void GPU_init()
{
/* can't avoid calling this multiple times, see wm_window_ghostwindow_add */
if (initialized) {
return;
}
initialized = true;
gpu_backend_init_resources();
gpu_shader_dependency_init();
gpu_shader_create_info_init();
GPU_shader_builtin_warm_up();
GPU_pass_cache_init();
gpu_batch_init();
}
void GPU_exit()
{
gpu_batch_exit();
GPU_pass_cache_free();
BKE_material_defaults_free_gpu();
GPU_shader_free_builtin_shaders();
gpu_backend_delete_resources();
gpu_shader_dependency_exit();
gpu_shader_create_info_exit();
initialized = false;
}
bool GPU_is_init()
{
return initialized;
}