

/**************************************************************************************************
 *** This file was autogenerated from GrSectionInitializers.fp; do not modify.
 **************************************************************************************************/
#ifndef GrSectionInitializers_DEFINED
#define GrSectionInitializers_DEFINED

#include "include/core/SkM44.h"
#include "include/core/SkTypes.h"


#include "src/gpu/GrFragmentProcessor.h"

class GrSectionInitializers : public GrFragmentProcessor {
public:
    static std::unique_ptr<GrFragmentProcessor> Make() {
        return std::unique_ptr<GrFragmentProcessor>(new GrSectionInitializers());
    }
    GrSectionInitializers(const GrSectionInitializers& src);
    std::unique_ptr<GrFragmentProcessor> clone() const override;
    const char* name() const override { return "SectionInitializers"; }
private:
    GrSectionInitializers()
    : INHERITED(kGrSectionInitializers_ClassID, kNone_OptimizationFlags)
    , initializers section {
    }
    std::unique_ptr<GrGLSLFragmentProcessor> onMakeProgramImpl() const override;
    void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
    bool onIsEqual(const GrFragmentProcessor&) const override;
#if GR_TEST_UTILS
    SkString onDumpInfo() const override;
#endif
    GR_DECLARE_FRAGMENT_PROCESSOR_TEST
    using INHERITED = GrFragmentProcessor;
};
#endif
