

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

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


#include "src/gpu/GrFragmentProcessor.h"

class GrConditionalInUniform : public GrFragmentProcessor {
public:
    static std::unique_ptr<GrFragmentProcessor> Make(bool test, SkPMColor4f color) {
        return std::unique_ptr<GrFragmentProcessor>(new GrConditionalInUniform(test, color));
    }
    GrConditionalInUniform(const GrConditionalInUniform& src);
    std::unique_ptr<GrFragmentProcessor> clone() const override;
    const char* name() const override { return "ConditionalInUniform"; }
    bool test;
    SkPMColor4f color;
private:
    GrConditionalInUniform(bool test, SkPMColor4f color)
    : INHERITED(kGrConditionalInUniform_ClassID, kNone_OptimizationFlags)
    , test(test)
    , color(color) {
    }
    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
