

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

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


#include "src/gpu/GrFragmentProcessor.h"

class GrNonInlinedInUniform : public GrFragmentProcessor {
public:
    static std::unique_ptr<GrFragmentProcessor> Make(SkPoint point) {
        return std::unique_ptr<GrFragmentProcessor>(new GrNonInlinedInUniform(point));
    }
    GrNonInlinedInUniform(const GrNonInlinedInUniform& src);
    std::unique_ptr<GrFragmentProcessor> clone() const override;
    const char* name() const override { return "NonInlinedInUniform"; }
    SkPoint point;
private:
    GrNonInlinedInUniform(SkPoint point)
    : INHERITED(kGrNonInlinedInUniform_ClassID, kNone_OptimizationFlags)
    , point(point) {
    }
    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
