blob: 634590a6ba996f5e8e6773ca8190495fd34d3812 [file] [log] [blame]
/*
* Copyright 2024 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef skgpu_graphite_precompile_PrecompileBaseComplete_DEFINED
#define skgpu_graphite_precompile_PrecompileBaseComplete_DEFINED
#include "include/gpu/graphite/precompile/PrecompileBase.h"
// This file simply provides the missing implementations of SelectOption and AddToKey.
// In practice PrecompileBase.h should never be used internally and this header should be
// used in its place.
namespace skgpu::graphite {
template<typename T>
std::pair<sk_sp<T>, int> PrecompileBase::SelectOption(SkSpan<const sk_sp<T>> options,
int desiredOption) {
for (const sk_sp<T>& option : options) {
if (desiredOption < (option ? option->numCombinations() : 1)) {
return { option, desiredOption };
}
desiredOption -= option ? option->numCombinations() : 1;
}
return { nullptr, 0 };
}
template<typename T>
void PrecompileBase::AddToKey(const KeyContext& keyContext,
SkSpan<const sk_sp<T>> options,
int desiredOption) {
auto [option, childOptions] = SelectOption(options, desiredOption);
if (option) {
option->priv().addToKey(keyContext, childOptions);
}
}
} // namespace skgpu::graphite
#endif // skgpu_graphite_precompile_PrecompileBaseComplete_DEFINED