1 
2 
3 /**************************************************************************************************
4  *** This file was autogenerated from GrConditionalInUniform.fp; do not modify.
5  **************************************************************************************************/
6 #include "GrConditionalInUniform.h"
7 
8 #include "src/core/SkUtils.h"
9 #include "src/gpu/GrTexture.h"
10 #include "src/gpu/glsl/GrGLSLFragmentProcessor.h"
11 #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
12 #include "src/gpu/glsl/GrGLSLProgramBuilder.h"
13 #include "src/sksl/SkSLCPP.h"
14 #include "src/sksl/SkSLUtil.h"
15 class GrGLSLConditionalInUniform : public GrGLSLFragmentProcessor {
16 public:
GrGLSLConditionalInUniform()17     GrGLSLConditionalInUniform() {}
emitCode(EmitArgs & args)18     void emitCode(EmitArgs& args) override {
19         GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
20         const GrConditionalInUniform& _outer = args.fFp.cast<GrConditionalInUniform>();
21         (void) _outer;
22         auto test = _outer.test;
23         (void) test;
24         auto color = _outer.color;
25         (void) color;
26         if (test) {
27             colorVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kHalf4_GrSLType, "color");
28         }
29         fragBuilder->codeAppendf(
30 R"SkSL(if (%s) {
31     return %s;
32 } else {
33     return half4(1.0);
34 }
35 )SkSL"
36 , (_outer.test ? "true" : "false"), colorVar.isValid() ? args.fUniformHandler->getUniformCStr(colorVar) : "half4(0)");
37     }
38 private:
onSetData(const GrGLSLProgramDataManager & pdman,const GrFragmentProcessor & _proc)39     void onSetData(const GrGLSLProgramDataManager& pdman, const GrFragmentProcessor& _proc) override {
40         const GrConditionalInUniform& _outer = _proc.cast<GrConditionalInUniform>();
41         {
42         if (colorVar.isValid()) {
43             const SkPMColor4f& colorValue = _outer.color;
44             if (colorPrev != colorValue) {
45                 colorPrev = colorValue;
46                 pdman.set4fv(colorVar, 1, colorValue.vec());
47             }
48         }
49         }
50     }
51 SkPMColor4f colorPrev = {SK_FloatNaN, SK_FloatNaN, SK_FloatNaN, SK_FloatNaN};
52     UniformHandle colorVar;
53 };
onMakeProgramImpl() const54 std::unique_ptr<GrGLSLFragmentProcessor> GrConditionalInUniform::onMakeProgramImpl() const {
55     return std::make_unique<GrGLSLConditionalInUniform>();
56 }
onGetGLSLProcessorKey(const GrShaderCaps & caps,GrProcessorKeyBuilder * b) const57 void GrConditionalInUniform::onGetGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const {
58     b->addBool(test, "test");
59 }
onIsEqual(const GrFragmentProcessor & other) const60 bool GrConditionalInUniform::onIsEqual(const GrFragmentProcessor& other) const {
61     const GrConditionalInUniform& that = other.cast<GrConditionalInUniform>();
62     (void) that;
63     if (test != that.test) return false;
64     if (color != that.color) return false;
65     return true;
66 }
GrConditionalInUniform(const GrConditionalInUniform & src)67 GrConditionalInUniform::GrConditionalInUniform(const GrConditionalInUniform& src)
68 : INHERITED(kGrConditionalInUniform_ClassID, src.optimizationFlags())
69 , test(src.test)
70 , color(src.color) {
71         this->cloneAndRegisterAllChildProcessors(src);
72 }
clone() const73 std::unique_ptr<GrFragmentProcessor> GrConditionalInUniform::clone() const {
74     return std::make_unique<GrConditionalInUniform>(*this);
75 }
76 #if GR_TEST_UTILS
onDumpInfo() const77 SkString GrConditionalInUniform::onDumpInfo() const {
78     return SkStringPrintf("(test=%s, color=half4(%f, %f, %f, %f))", (test ? "true" : "false"), color.fR, color.fG, color.fB, color.fA);
79 }
80 #endif
81