Skip to content
Snippets Groups Projects
Commit 91ec251c authored by Lioncash's avatar Lioncash
Browse files

gl_shader_decompiler: Add AddLine() overload that forwards to fmt

In a lot of places throughout the decompiler, string concatenation via
operator+ is used quite heavily. This is usually fine, when not heavily
used, but when used extensively, can be a problem. operator+ creates an
entirely new heap allocated temporary string and given we perform
expressions like:

std::string thing = a + b + c + d;

this ends up with a lot of unnecessary temporary strings being created
and discarded, which kind of thrashes the heap more than we need to.
Given we utilize fmt in some AddLine calls, we can make this a part of
the ShaderWriter's API. We can make an overload that simply acts as a
passthrough to fmt.

This way, whenever things need to be appended to a string, the operation
can be done via a single string formatting operation instead of
discarding numerous temporary strings. This also has the benefit of
making the strings themselves look nicer and makes it easier to spot
errors in them.
parent d49efbfb
No related branches found
No related tags found
No related merge requests found
...@@ -69,6 +69,17 @@ public: ...@@ -69,6 +69,17 @@ public:
AddNewLine(); AddNewLine();
} }
// Overload the forwards all arguments directly to libfmt.
// Note that all formatting requirements for fmt must be
// obeyed when using this function. (e.g. {{ must be used
// printing the character '{' is desirable. Ditto for }} and '}',
// etc).
template <typename... Args>
void AddLine(std::string_view text, Args&&... args) {
AddExpression(fmt::format(text, std::forward<Args>(args)...));
AddNewLine();
}
void AddNewLine() { void AddNewLine() {
DEBUG_ASSERT(scope >= 0); DEBUG_ASSERT(scope >= 0);
shader_source += '\n'; shader_source += '\n';
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment