/*
 * Copyright 2022 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_BuiltInCodeSnippetID_DEFINED
#define skgpu_graphite_BuiltInCodeSnippetID_DEFINED

#include "include/core/SkTypes.h"

namespace skgpu::graphite {

// TODO: this needs to be expanded into a more flexible dictionary (esp. for user-supplied SkSL)
enum class BuiltInCodeSnippetID : int32_t {
    // This isn't just a signal for a failure during paintparams key creation. It also actually
    // implements the default behavior for an erroneous draw. Currently it just draws solid
    // magenta.
    kError,

    // SkShader code snippets
    kPassthroughShader,
    kSolidColorShader,
    kLinearGradientShader4,
    kLinearGradientShader8,
    kRadialGradientShader4,
    kRadialGradientShader8,
    kSweepGradientShader4,
    kSweepGradientShader8,
    kConicalGradientShader4,
    kConicalGradientShader8,

    kLocalMatrixShader,
    kImageShader,
    kCoordClampShader,
    kPerlinNoiseShader,
    kPorterDuffBlendShader,     // ComposeShader (lightweight, only supports Porter-Duff blends)
    kBlendShader,               // ComposeShader (more code, but supports every SkBlendMode)
    kColorFilterShader,
    kRuntimeShader,

    // SkColorFilter code snippets
    kMatrixColorFilter,
    kBlendColorFilter,
    kComposeColorFilter,
    kTableColorFilter,
    kGaussianColorFilter,
    kColorSpaceXformColorFilter,

    // SkBlender code snippets (evaluating a blend as part of the shader graph)
    kPassthroughBlender,

    // BlendMode code snippets (applying a blend to a destination)
    kFixedFunctionBlender,
    kShaderBasedBlender,
    kPrimitiveColorShaderBasedBlender, // Blend dst: primitiveColor variable emitted by RenderStep

    kLast = kPrimitiveColorShaderBasedBlender
};
static constexpr int kBuiltInCodeSnippetIDCount = static_cast<int>(BuiltInCodeSnippetID::kLast)+1;

} // skgpu::graphite

#endif // skgpu_graphite_BuiltInCodeSnippetID_DEFINED
