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 GrConstColorProcessor.fp; do not modify. 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot **************************************************************************************************/ 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrConstColorProcessor.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 GrGLSLConstColorProcessor : public GrGLSLFragmentProcessor { 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrGLSLConstColorProcessor() {} 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void emitCode(EmitArgs& args) override { 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrConstColorProcessor& _outer = args.fFp.cast<GrConstColorProcessor>(); 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (void)_outer; 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot auto color = _outer.color(); 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (void)color; 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot auto mode = _outer.mode(); 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (void)mode; 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fColorUniformVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType, 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kDefault_GrSLPrecision, "colorUniform"); 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fragBuilder->codeAppendf( 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "half4 prevColor;\n@switch (%d) {\n case 0:\n %s = %s;\n break;\n " 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot " case 1:\n %s = %s * %s;\n break;\n case 2:\n %s = %s.w " 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "* %s;\n break;\n}\n", 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (int)_outer.mode(), args.fOutputColor, 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot args.fUniformHandler->getUniformCStr(fColorUniformVar), args.fOutputColor, 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot args.fInputColor ? args.fInputColor : "half4(1)", 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot args.fUniformHandler->getUniformCStr(fColorUniformVar), args.fOutputColor, 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot args.fInputColor ? args.fInputColor : "half4(1)", 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot args.fUniformHandler->getUniformCStr(fColorUniformVar)); 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onSetData(const GrGLSLProgramDataManager& pdman, 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrFragmentProcessor& _proc) override { 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrConstColorProcessor& _outer = _proc.cast<GrConstColorProcessor>(); 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot auto color = _outer.color(); 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (void)color; 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot UniformHandle& colorUniform = fColorUniformVar; 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (void)colorUniform; 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot auto mode = _outer.mode(); 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (void)mode; 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // We use the "illegal" color value as an uninit sentinel. With GrColor4f, the "illegal" 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // color is *really* illegal (not just unpremultiplied), so this check is simple. 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (prevColor != color) { 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot pdman.set4fv(colorUniform, 1, color.fRGBA); 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot prevColor = color; 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrColor4f prevColor = GrColor4f::kIllegalConstructor; 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot UniformHandle fColorUniformVar; 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotGrGLSLFragmentProcessor* GrConstColorProcessor::onCreateGLSLInstance() const { 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return new GrGLSLConstColorProcessor(); 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotvoid GrConstColorProcessor::onGetGLSLProcessorKey(const GrShaderCaps& caps, 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrProcessorKeyBuilder* b) const { 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot b->add32((int32_t)fMode); 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotbool GrConstColorProcessor::onIsEqual(const GrFragmentProcessor& other) const { 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrConstColorProcessor& that = other.cast<GrConstColorProcessor>(); 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (void)that; 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (fColor != that.fColor) return false; 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (fMode != that.fMode) return false; 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return true; 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotGrConstColorProcessor::GrConstColorProcessor(const GrConstColorProcessor& src) 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot : INHERITED(kGrConstColorProcessor_ClassID, src.optimizationFlags()) 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fColor(src.fColor) 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fMode(src.fMode) {} 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstd::unique_ptr<GrFragmentProcessor> GrConstColorProcessor::clone() const { 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return std::unique_ptr<GrFragmentProcessor>(new GrConstColorProcessor(*this)); 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotGR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrConstColorProcessor); 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if GR_TEST_UTILS 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstd::unique_ptr<GrFragmentProcessor> GrConstColorProcessor::TestCreate(GrProcessorTestData* d) { 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrColor4f color; 90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int colorPicker = d->fRandom->nextULessThan(3); 91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot switch (colorPicker) { 92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot case 0: { 93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint32_t a = d->fRandom->nextULessThan(0x100); 94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint32_t r = d->fRandom->nextULessThan(a + 1); 95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint32_t g = d->fRandom->nextULessThan(a + 1); 96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint32_t b = d->fRandom->nextULessThan(a + 1); 97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot color = GrColor4f::FromGrColor(GrColorPackRGBA(r, g, b, a)); 98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot break; 99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot case 1: 101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot color = GrColor4f::TransparentBlack(); 102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot break; 103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot case 2: 104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint32_t c = d->fRandom->nextULessThan(0x100); 105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot color = GrColor4f::FromGrColor(c | (c << 8) | (c << 16) | (c << 24)); 106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot break; 107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot InputMode mode = static_cast<InputMode>(d->fRandom->nextULessThan(kInputModeCnt)); 109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return GrConstColorProcessor::Make(color, mode); 110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 113