diff --git a/gfx/drivers_shader/slang_process.cpp b/gfx/drivers_shader/slang_process.cpp index b629a8d2d1..7ac67ab2de 100644 --- a/gfx/drivers_shader/slang_process.cpp +++ b/gfx/drivers_shader/slang_process.cpp @@ -51,18 +51,18 @@ static bool set_unique_map(unordered_map& m, } template -static string get_semantic_name(const unordered_map* map, +static const char *get_semantic_name(const unordered_map* map, S semantic, unsigned index) { for (const pair& m : *map) { if (m.second.semantic == semantic && m.second.index == index) - return m.first; + return m.first.c_str(); } - return string(); + return ""; } -static string +static const char * get_semantic_name(slang_reflection& reflection, slang_semantic semantic, unsigned index) { @@ -74,37 +74,53 @@ get_semantic_name(slang_reflection& reflection, "FrameDirection", }; if ((int)semantic < sizeof(names) / sizeof(*names)) - return std::string(names[semantic]); + return names[semantic]; return get_semantic_name(reflection.semantic_map, semantic, index); } -static string +static const char * get_semantic_name(slang_reflection& reflection, slang_texture_semantic semantic, unsigned index) { static const char* names[] = { - "Original", "Source", "OriginalHistory", "PassOutput", "PassFeedback", + "Original", + "Source", + "OriginalHistory", + "PassOutput", + "PassFeedback", }; if ((int)semantic < (int)SLANG_TEXTURE_SEMANTIC_ORIGINAL_HISTORY) - return std::string(names[semantic]); - else if ((int)semantic < sizeof(names) / sizeof(*names)) - return std::string(names[semantic]) + to_string(index); + return names[semantic]; + if ((int)semantic < sizeof(names) / sizeof(*names)) + { + static char buf[32] = {0}; + snprintf(buf, sizeof(buf), "%s%u", names[semantic], index); + return buf; + } return get_semantic_name(reflection.texture_semantic_map, semantic, index); } -static string get_size_semantic_name( +static const char *get_size_semantic_name( slang_reflection& reflection, slang_texture_semantic semantic, unsigned index) { static const char* names[] = { - "OriginalSize", "SourceSize", "OriginalHistorySize", "PassOutputSize", "PassFeedbackSize", + "OriginalSize", + "SourceSize", + "OriginalHistorySize", + "PassOutputSize", + "PassFeedbackSize", }; if ((int)semantic < (int)SLANG_TEXTURE_SEMANTIC_ORIGINAL_HISTORY) - return std::string(names[semantic]); + return names[semantic]; if ((int)semantic < sizeof(names) / sizeof(*names)) - return std::string(names[semantic]) + to_string(index); + { + static char buf[32] = {0}; + snprintf(buf, sizeof(buf), "%s%u", names[semantic], index); + return buf; + } return get_semantic_name(reflection.texture_semantic_uniform_map, semantic, index); } @@ -214,10 +230,10 @@ static bool slang_process_reflection( uniform_sem_t uniform = { map->uniforms[semantic], src.num_components * (unsigned)sizeof(float) }; - string uniform_id = get_semantic_name( + const char *uniform_id = get_semantic_name( sl_reflection, (slang_semantic)semantic, 0); - strlcpy(uniform.id, uniform_id.c_str(), sizeof(uniform.id)); + strlcpy(uniform.id, uniform_id, sizeof(uniform.id)); if (src.push_constant) { @@ -241,9 +257,9 @@ static bool slang_process_reflection( uniform_sem_t uniform = { &shader_info->parameters[i].current, sizeof(float) }; - string uniform_id = get_semantic_name( + const char *uniform_id = get_semantic_name( sl_reflection, SLANG_SEMANTIC_FLOAT_PARAMETER, i); - strlcpy(uniform.id, uniform_id.c_str(), sizeof(uniform.id)); + strlcpy(uniform.id, uniform_id, sizeof(uniform.id)); if (src.push_constant) { @@ -286,10 +302,10 @@ static bool slang_process_reflection( } texture.stage_mask = src.stage_mask; texture.binding = src.binding; - string id = get_semantic_name( + const char *id = get_semantic_name( sl_reflection, (slang_texture_semantic)semantic, index); - strlcpy(texture.id, id.c_str(), sizeof(texture.id)); + strlcpy(texture.id, id, sizeof(texture.id)); textures.push_back(texture); @@ -309,12 +325,12 @@ static bool slang_process_reflection( 4 * sizeof(float) }; - string uniform_id = + const char *uniform_id = get_size_semantic_name( sl_reflection, (slang_texture_semantic)semantic, index); - strlcpy(uniform.id, uniform_id.c_str(), sizeof(uniform.id)); + strlcpy(uniform.id, uniform_id, sizeof(uniform.id)); if (src.push_constant) {