blob: 4fccb84acc9ba4279c15bda883c97dd0ef119b88 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/ui/lib/escher/vk/shader_variant_args.h"
#include <set>
#include "src/ui/lib/escher/util/hasher.h"
namespace escher {
// static
std::vector<std::pair<std::string, std::string>> ShaderVariantArgs::Canonicalize(
const std::vector<std::pair<std::string, std::string>>& defs) {
auto result = defs;
std::sort(result.begin(), result.end());
typedef std::pair<std::string, std::string> Def;
result.erase(std::unique(result.begin(), result.end(),
[](const Def& lhs, const Def& rhs) { return lhs.first == rhs.first; }),
result.end());
FX_DCHECK(result.size() == defs.size()) << "shader args have duplicate definitions";
return result;
}
Hash ShaderVariantArgs::GenerateHash() const {
Hasher h;
for (auto& def : definitions_) {
h.string(def.first);
h.string(def.second);
}
return h.value();
}
} // namespace escher