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 GrArithmeticFP.fp; do not modify. 10 **************************************************************************************************/ 11#include "GrArithmeticFP.h" 12#if SK_SUPPORT_GPU 13#include "glsl/GrGLSLFragmentProcessor.h" 14#include "glsl/GrGLSLFragmentShaderBuilder.h" 15#include "glsl/GrGLSLProgramBuilder.h" 16#include "GrTexture.h" 17#include "SkSLCPP.h" 18#include "SkSLUtil.h" 19class GrGLSLArithmeticFP : public GrGLSLFragmentProcessor { 20public: 21 GrGLSLArithmeticFP() {} 22 void emitCode(EmitArgs& args) override { 23 GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; 24 const GrArithmeticFP& _outer = args.fFp.cast<GrArithmeticFP>(); 25 (void)_outer; 26 auto k1 = _outer.k1(); 27 (void)k1; 28 auto k2 = _outer.k2(); 29 (void)k2; 30 auto k3 = _outer.k3(); 31 (void)k3; 32 auto k4 = _outer.k4(); 33 (void)k4; 34 auto enforcePMColor = _outer.enforcePMColor(); 35 (void)enforcePMColor; 36 fKVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType, 37 kDefault_GrSLPrecision, "k"); 38 SkString _child0("_child0"); 39 this->emitChild(0, &_child0, args); 40 fragBuilder->codeAppendf( 41 "half4 dst = %s;\n%s = half4(clamp(float4(float4(((%s.x * float4(%s)) * dst + %s.y " 42 "* float4(%s)) + %s.z * float4(dst)) + %s.w), 0.0, 1.0));\nif (%s) {\n %s.xyz = " 43 "half3(min(float3(%s.xyz), float(%s.w)));\n}\n", 44 _child0.c_str(), args.fOutputColor, args.fUniformHandler->getUniformCStr(fKVar), 45 args.fInputColor ? args.fInputColor : "half4(1)", 46 args.fUniformHandler->getUniformCStr(fKVar), 47 args.fInputColor ? args.fInputColor : "half4(1)", 48 args.fUniformHandler->getUniformCStr(fKVar), 49 args.fUniformHandler->getUniformCStr(fKVar), 50 (_outer.enforcePMColor() ? "true" : "false"), args.fOutputColor, args.fOutputColor, 51 args.fOutputColor); 52 } 53 54private: 55 void onSetData(const GrGLSLProgramDataManager& pdman, 56 const GrFragmentProcessor& _proc) override { 57 const GrArithmeticFP& _outer = _proc.cast<GrArithmeticFP>(); 58 auto k1 = _outer.k1(); 59 (void)k1; 60 auto k2 = _outer.k2(); 61 (void)k2; 62 auto k3 = _outer.k3(); 63 (void)k3; 64 auto k4 = _outer.k4(); 65 (void)k4; 66 auto enforcePMColor = _outer.enforcePMColor(); 67 (void)enforcePMColor; 68 UniformHandle& k = fKVar; 69 (void)k; 70 71 pdman.set4f(k, k1, k2, k3, k4); 72 } 73 UniformHandle fKVar; 74}; 75GrGLSLFragmentProcessor* GrArithmeticFP::onCreateGLSLInstance() const { 76 return new GrGLSLArithmeticFP(); 77} 78void GrArithmeticFP::onGetGLSLProcessorKey(const GrShaderCaps& caps, 79 GrProcessorKeyBuilder* b) const { 80 b->add32((int32_t)fEnforcePMColor); 81} 82bool GrArithmeticFP::onIsEqual(const GrFragmentProcessor& other) const { 83 const GrArithmeticFP& that = other.cast<GrArithmeticFP>(); 84 (void)that; 85 if (fK1 != that.fK1) return false; 86 if (fK2 != that.fK2) return false; 87 if (fK3 != that.fK3) return false; 88 if (fK4 != that.fK4) return false; 89 if (fEnforcePMColor != that.fEnforcePMColor) return false; 90 return true; 91} 92GrArithmeticFP::GrArithmeticFP(const GrArithmeticFP& src) 93 : INHERITED(kGrArithmeticFP_ClassID, src.optimizationFlags()) 94 , fK1(src.fK1) 95 , fK2(src.fK2) 96 , fK3(src.fK3) 97 , fK4(src.fK4) 98 , fEnforcePMColor(src.fEnforcePMColor) { 99 this->registerChildProcessor(src.childProcessor(0).clone()); 100} 101std::unique_ptr<GrFragmentProcessor> GrArithmeticFP::clone() const { 102 return std::unique_ptr<GrFragmentProcessor>(new GrArithmeticFP(*this)); 103} 104#endif 105