GPU: Avoid ShaderCreateInfo object directly inside Map

This avoid uneeded big internal allocation for the map.
This commit is contained in:
Clément Foucault
2024-10-26 13:51:29 +02:00
parent af4974dfaa
commit e9298dced4

View File

@@ -32,11 +32,10 @@
namespace blender::gpu::shader {
using CreateInfoDictionnary = Map<StringRef, ShaderCreateInfo *>;
using CreateInfoValueDictionnary = Map<StringRef, ShaderCreateInfo>;
using InterfaceDictionnary = Map<StringRef, StageInterfaceInfo *>;
static CreateInfoDictionnary *g_create_infos = nullptr;
static CreateInfoValueDictionnary *g_create_infos_unfinalized = nullptr;
static CreateInfoDictionnary *g_create_infos_unfinalized = nullptr;
static InterfaceDictionnary *g_interfaces = nullptr;
/* -------------------------------------------------------------------- */
@@ -452,7 +451,7 @@ using namespace blender::gpu::shader;
void gpu_shader_create_info_init()
{
g_create_infos = new CreateInfoDictionnary();
g_create_infos_unfinalized = new CreateInfoValueDictionnary();
g_create_infos_unfinalized = new CreateInfoDictionnary();
g_interfaces = new InterfaceDictionnary();
#define GPU_SHADER_NAMED_INTERFACE_INFO(_interface, _inst_name) \
@@ -574,7 +573,7 @@ void gpu_shader_create_info_init()
}
for (auto [key, info] : g_create_infos->items()) {
g_create_infos_unfinalized->add_new(key, *info);
g_create_infos_unfinalized->add_new(key, new ShaderCreateInfo(*info));
}
for (ShaderCreateInfo *info : g_create_infos->values()) {
@@ -595,6 +594,9 @@ void gpu_shader_create_info_exit()
}
delete g_create_infos;
for (auto *value : g_create_infos_unfinalized->values()) {
delete value;
}
delete g_create_infos_unfinalized;
for (auto *value : g_interfaces->values()) {
@@ -710,7 +712,7 @@ void gpu_shader_create_info_get_unfinalized_copy(const char *info_name,
}
else {
ShaderCreateInfo &info = reinterpret_cast<ShaderCreateInfo &>(r_info);
info = g_create_infos_unfinalized->lookup(info_name);
info = *g_create_infos_unfinalized->lookup(info_name);
BLI_assert(!info.finalized_);
}
}