1
0
Fork 0
forked from suyu/suyu

gl_shader_decompiler: Avoid unnecessary copies of MetaImage

MetaImage contains a std::vector, so copying here could result in
unnecessary reallocations. Given the operation lives throughout the
entire scope, this is safe to do.
This commit is contained in:
Lioncash 2019-10-15 18:14:52 -04:00
parent ba0086e32d
commit 9760795bfb

View file

@ -1235,7 +1235,7 @@ private:
std::string BuildImageValues(Operation operation) { std::string BuildImageValues(Operation operation) {
constexpr std::array constructors{"uint", "uvec2", "uvec3", "uvec4"}; constexpr std::array constructors{"uint", "uvec2", "uvec3", "uvec4"};
const auto meta{std::get<MetaImage>(operation.GetMeta())}; const auto& meta{std::get<MetaImage>(operation.GetMeta())};
const std::size_t values_count{meta.values.size()}; const std::size_t values_count{meta.values.size()};
std::string expr = fmt::format("{}(", constructors.at(values_count - 1)); std::string expr = fmt::format("{}(", constructors.at(values_count - 1));
@ -1780,14 +1780,14 @@ private:
return {"0", Type::Int}; return {"0", Type::Int};
} }
const auto meta{std::get<MetaImage>(operation.GetMeta())}; const auto& meta{std::get<MetaImage>(operation.GetMeta())};
return {fmt::format("imageLoad({}, {}){}", GetImage(meta.image), return {fmt::format("imageLoad({}, {}){}", GetImage(meta.image),
BuildIntegerCoordinates(operation), GetSwizzle(meta.element)), BuildIntegerCoordinates(operation), GetSwizzle(meta.element)),
Type::Uint}; Type::Uint};
} }
Expression ImageStore(Operation operation) { Expression ImageStore(Operation operation) {
const auto meta{std::get<MetaImage>(operation.GetMeta())}; const auto& meta{std::get<MetaImage>(operation.GetMeta())};
code.AddLine("imageStore({}, {}, {});", GetImage(meta.image), code.AddLine("imageStore({}, {}, {});", GetImage(meta.image),
BuildIntegerCoordinates(operation), BuildImageValues(operation)); BuildIntegerCoordinates(operation), BuildImageValues(operation));
return {}; return {};
@ -1795,7 +1795,7 @@ private:
template <const std::string_view& opname> template <const std::string_view& opname>
Expression AtomicImage(Operation operation) { Expression AtomicImage(Operation operation) {
const auto meta{std::get<MetaImage>(operation.GetMeta())}; const auto& meta{std::get<MetaImage>(operation.GetMeta())};
ASSERT(meta.values.size() == 1); ASSERT(meta.values.size() == 1);
return {fmt::format("imageAtomic{}({}, {}, {})", opname, GetImage(meta.image), return {fmt::format("imageAtomic{}({}, {}, {})", opname, GetImage(meta.image),