• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2018 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 /**************************************************************************************************
9  *** This file was autogenerated from GrConstColorProcessor.fp; do not modify.
10  **************************************************************************************************/
11 #include "GrConstColorProcessor.h"
12 
13 #include "include/gpu/GrTexture.h"
14 #include "src/gpu/glsl/GrGLSLFragmentProcessor.h"
15 #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
16 #include "src/gpu/glsl/GrGLSLProgramBuilder.h"
17 #include "src/sksl/SkSLCPP.h"
18 #include "src/sksl/SkSLUtil.h"
19 class GrGLSLConstColorProcessor : public GrGLSLFragmentProcessor {
20 public:
GrGLSLConstColorProcessor()21     GrGLSLConstColorProcessor() {}
emitCode(EmitArgs & args)22     void emitCode(EmitArgs& args) override {
23         GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
24         const GrConstColorProcessor& _outer = args.fFp.cast<GrConstColorProcessor>();
25         (void)_outer;
26         auto color = _outer.color;
27         (void)color;
28         auto mode = _outer.mode;
29         (void)mode;
30         colorVar =
31                 args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType, "color");
32         fragBuilder->codeAppendf(
33                 "@switch (%d) {\n    case 0:\n        %s = %s;\n        break;\n    case 1:\n      "
34                 "  %s = %s * %s;\n        break;\n    case 2:\n        %s = %s.w * %s;\n        "
35                 "break;\n}\n",
36                 (int)_outer.mode, args.fOutputColor, args.fUniformHandler->getUniformCStr(colorVar),
37                 args.fOutputColor, args.fInputColor, args.fUniformHandler->getUniformCStr(colorVar),
38                 args.fOutputColor, args.fInputColor,
39                 args.fUniformHandler->getUniformCStr(colorVar));
40     }
41 
42 private:
onSetData(const GrGLSLProgramDataManager & pdman,const GrFragmentProcessor & _proc)43     void onSetData(const GrGLSLProgramDataManager& pdman,
44                    const GrFragmentProcessor& _proc) override {
45         const GrConstColorProcessor& _outer = _proc.cast<GrConstColorProcessor>();
46         {
47             const SkPMColor4f& colorValue = _outer.color;
48             if (colorPrev != colorValue) {
49                 colorPrev = colorValue;
50                 pdman.set4fv(colorVar, 1, colorValue.vec());
51             }
52         }
53     }
54     SkPMColor4f colorPrev = {SK_FloatNaN, SK_FloatNaN, SK_FloatNaN, SK_FloatNaN};
55     UniformHandle colorVar;
56 };
onCreateGLSLInstance() const57 GrGLSLFragmentProcessor* GrConstColorProcessor::onCreateGLSLInstance() const {
58     return new GrGLSLConstColorProcessor();
59 }
onGetGLSLProcessorKey(const GrShaderCaps & caps,GrProcessorKeyBuilder * b) const60 void GrConstColorProcessor::onGetGLSLProcessorKey(const GrShaderCaps& caps,
61                                                   GrProcessorKeyBuilder* b) const {
62     b->add32((int32_t)mode);
63 }
onIsEqual(const GrFragmentProcessor & other) const64 bool GrConstColorProcessor::onIsEqual(const GrFragmentProcessor& other) const {
65     const GrConstColorProcessor& that = other.cast<GrConstColorProcessor>();
66     (void)that;
67     if (color != that.color) return false;
68     if (mode != that.mode) return false;
69     return true;
70 }
GrConstColorProcessor(const GrConstColorProcessor & src)71 GrConstColorProcessor::GrConstColorProcessor(const GrConstColorProcessor& src)
72         : INHERITED(kGrConstColorProcessor_ClassID, src.optimizationFlags())
73         , color(src.color)
74         , mode(src.mode) {}
clone() const75 std::unique_ptr<GrFragmentProcessor> GrConstColorProcessor::clone() const {
76     return std::unique_ptr<GrFragmentProcessor>(new GrConstColorProcessor(*this));
77 }
78 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrConstColorProcessor);
79 #if GR_TEST_UTILS
TestCreate(GrProcessorTestData * d)80 std::unique_ptr<GrFragmentProcessor> GrConstColorProcessor::TestCreate(GrProcessorTestData* d) {
81     SkPMColor4f color;
82     int colorPicker = d->fRandom->nextULessThan(3);
83     switch (colorPicker) {
84         case 0: {
85             uint32_t a = d->fRandom->nextULessThan(0x100);
86             uint32_t r = d->fRandom->nextULessThan(a + 1);
87             uint32_t g = d->fRandom->nextULessThan(a + 1);
88             uint32_t b = d->fRandom->nextULessThan(a + 1);
89             color = SkPMColor4f::FromBytes_RGBA(GrColorPackRGBA(r, g, b, a));
90             break;
91         }
92         case 1:
93             color = SK_PMColor4fTRANSPARENT;
94             break;
95         case 2:
96             uint32_t c = d->fRandom->nextULessThan(0x100);
97             color = SkPMColor4f::FromBytes_RGBA(c | (c << 8) | (c << 16) | (c << 24));
98             break;
99     }
100     InputMode mode = static_cast<InputMode>(d->fRandom->nextULessThan(kInputModeCnt));
101     return GrConstColorProcessor::Make(color, mode);
102 }
103 #endif
104