| /* |
| * 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 |