1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2018 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/************************************************************************************************** 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *** This file was autogenerated from GrAARectEffect.fp; do not modify. 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot **************************************************************************************************/ 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrAARectEffect.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if SK_SUPPORT_GPU 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "glsl/GrGLSLFragmentProcessor.h" 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "glsl/GrGLSLFragmentShaderBuilder.h" 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "glsl/GrGLSLProgramBuilder.h" 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrTexture.h" 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkSLCPP.h" 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkSLUtil.h" 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrGLSLAARectEffect : public GrGLSLFragmentProcessor { 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrGLSLAARectEffect() {} 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void emitCode(EmitArgs& args) override { 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrAARectEffect& _outer = args.fFp.cast<GrAARectEffect>(); 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (void)_outer; 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot auto edgeType = _outer.edgeType(); 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (void)edgeType; 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot auto rect = _outer.rect(); 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (void)rect; 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot prevRect = float4(-1.0); 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fRectUniformVar = args.fUniformHandler->addUniform( 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "rectUniform"); 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fragBuilder->codeAppendf( 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "float4 prevRect = float4(%f, %f, %f, %f);\nhalf alpha;\n@switch (%d) {\n case " 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "0:\n case 2:\n alpha = half(all(greaterThan(float4(sk_FragCoord.xy, " 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "%s.zw), float4(%s.xy, sk_FragCoord.xy))) ? 1 : 0);\n break;\n " 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "default:\n half xSub, ySub;\n xSub = half(min(sk_FragCoord.x - " 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "%s.x, 0.0));\n xSub += half(min(%s.z - sk_FragCoord.x, 0.0));\n " 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "ySub = half(min(sk_FragCoord.y - %s.y, 0.0));\n ySub += half(min(%s.w - " 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "sk_FragCoord.y, 0.0));\n alpha = half((1", 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot prevRect.left(), 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot prevRect.top(), 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot prevRect.right(), 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot prevRect.bottom(), 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (int)_outer.edgeType(), 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot args.fUniformHandler->getUniformCStr(fRectUniformVar), 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot args.fUniformHandler->getUniformCStr(fRectUniformVar), 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot args.fUniformHandler->getUniformCStr(fRectUniformVar), 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot args.fUniformHandler->getUniformCStr(fRectUniformVar), 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot args.fUniformHandler->getUniformCStr(fRectUniformVar), 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot args.fUniformHandler->getUniformCStr(fRectUniformVar)); 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fragBuilder->codeAppendf( 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ".0 + max(float(xSub), -1.0)) * (1.0 + max(float(ySub), -1.0)));\n}\n@if (%d == 2 " 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "|| %d == 3) {\n alpha = half(1.0 - float(alpha));\n}\n%s = %s * alpha;\n", 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (int)_outer.edgeType(), 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (int)_outer.edgeType(), 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot args.fOutputColor, 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot args.fInputColor ? args.fInputColor : "half4(1)"); 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onSetData(const GrGLSLProgramDataManager& pdman, 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrFragmentProcessor& _proc) override { 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrAARectEffect& _outer = _proc.cast<GrAARectEffect>(); 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot auto edgeType = _outer.edgeType(); 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (void)edgeType; 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot auto rect = _outer.rect(); 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (void)rect; 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot UniformHandle& rectUniform = fRectUniformVar; 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (void)rectUniform; 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkRect& newRect = GrProcessorEdgeTypeIsAA(edgeType) ? rect.makeInset(.5f, .5f) : rect; 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (newRect != prevRect) { 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot pdman.set4f(rectUniform, newRect.fLeft, newRect.fTop, newRect.fRight, newRect.fBottom); 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot prevRect = newRect; 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect prevRect = float4(0); 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot UniformHandle fRectUniformVar; 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotGrGLSLFragmentProcessor* GrAARectEffect::onCreateGLSLInstance() const { 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return new GrGLSLAARectEffect(); 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotvoid GrAARectEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps, 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrProcessorKeyBuilder* b) const { 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot b->add32((int32_t)fEdgeType); 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotbool GrAARectEffect::onIsEqual(const GrFragmentProcessor& other) const { 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrAARectEffect& that = other.cast<GrAARectEffect>(); 90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (void)that; 91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (fEdgeType != that.fEdgeType) return false; 92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (fRect != that.fRect) return false; 93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return true; 94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotGrAARectEffect::GrAARectEffect(const GrAARectEffect& src) 96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot : INHERITED(kGrAARectEffect_ClassID, src.optimizationFlags()) 97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fEdgeType(src.fEdgeType) 98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fRect(src.fRect) {} 99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstd::unique_ptr<GrFragmentProcessor> GrAARectEffect::clone() const { 100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return std::unique_ptr<GrFragmentProcessor>(new GrAARectEffect(*this)); 101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotGR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrAARectEffect); 103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if GR_TEST_UTILS 104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstd::unique_ptr<GrFragmentProcessor> GrAARectEffect::TestCreate(GrProcessorTestData* d) { 105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect rect = SkRect::MakeLTRB(d->fRandom->nextSScalar1(), 106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot d->fRandom->nextSScalar1(), 107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot d->fRandom->nextSScalar1(), 108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot d->fRandom->nextSScalar1()); 109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot std::unique_ptr<GrFragmentProcessor> fp; 110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot do { 111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrClipEdgeType edgeType = 112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static_cast<GrClipEdgeType>(d->fRandom->nextULessThan(kGrClipEdgeTypeCnt)); 113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 114fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fp = GrAARectEffect::Make(edgeType, rect); 115fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } while (nullptr == fp); 116fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return fp; 117fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 118fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 119fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 120