GPU: Avoid ShaderCreateInfo object directly inside Map
This avoid uneeded big internal allocation for the map.
This commit is contained in:
@@ -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_);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user