168b58c95384dd6c2fd389a5b4bbf8fc468819454bsalomon@google.com/*
268990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas * Copyright 2017 Google Inc.
368b58c95384dd6c2fd389a5b4bbf8fc468819454bsalomon@google.com *
468b58c95384dd6c2fd389a5b4bbf8fc468819454bsalomon@google.com * Use of this source code is governed by a BSD-style license that can be
568b58c95384dd6c2fd389a5b4bbf8fc468819454bsalomon@google.com * found in the LICENSE file.
668b58c95384dd6c2fd389a5b4bbf8fc468819454bsalomon@google.com */
768b58c95384dd6c2fd389a5b4bbf8fc468819454bsalomon@google.com
8130fb3f7aac19e40eddfc8fa85a9b39e7c99a7e8Ethan Nicholas/**************************************************************************************************
9130fb3f7aac19e40eddfc8fa85a9b39e7c99a7e8Ethan Nicholas *** This file was autogenerated from GrSimpleTextureEffect.fp; do not modify.
10130fb3f7aac19e40eddfc8fa85a9b39e7c99a7e8Ethan Nicholas **************************************************************************************************/
1168b58c95384dd6c2fd389a5b4bbf8fc468819454bsalomon@google.com#include "GrSimpleTextureEffect.h"
1268990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas#if SK_SUPPORT_GPU
1364c4728c70001ed074fecf5c4e083781987b12e9egdaniel#include "glsl/GrGLSLFragmentProcessor.h"
142d721d33aad192cc8a7a1321504b39bdca2a57ceegdaniel#include "glsl/GrGLSLFragmentShaderBuilder.h"
1568990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas#include "glsl/GrGLSLProgramBuilder.h"
162d5f9b3d58e07ac8a8df17f4c0321cb65f255e69Ethan Nicholas#include "GrTexture.h"
1768990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas#include "SkSLCPP.h"
1868990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas#include "SkSLUtil.h"
1968990be759f663bafdb7c1b746adce15557cda7fEthan Nicholasclass GrGLSLSimpleTextureEffect : public GrGLSLFragmentProcessor {
2068b58c95384dd6c2fd389a5b4bbf8fc468819454bsalomon@google.compublic:
2168990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas    GrGLSLSimpleTextureEffect() {}
229cdb9920fcad286ecf7875ea19902022b644fbdcrobertphillips    void emitCode(EmitArgs& args) override {
238528541dd7f09f5bd76f3f1ce5f45d08ac7347c7cdalton        GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
2468990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas        const GrSimpleTextureEffect& _outer = args.fFp.cast<GrSimpleTextureEffect>();
25b7e8c3b52a306357ecd08d00170062137ec641d4Ethan Nicholas        (void)_outer;
26823994624aa5e805e16833ecd3d748fc769a164dEthan Nicholas        auto matrix = _outer.matrix();
27823994624aa5e805e16833ecd3d748fc769a164dEthan Nicholas        (void)matrix;
2872a37bed66c90ff2acb930dc4493dc633f265488Brian Osman        SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D(args.fTransformedCoords[0]);
29b7e8c3b52a306357ecd08d00170062137ec641d4Ethan Nicholas        fragBuilder->codeAppendf(
302240be96d97b5ac0886381d74a21f1e2a0928f55Brian Osman                "%s = %s * texture(%s, %s).%s;\n", args.fOutputColor,
31f7b8820dc813d1eb0b6b43fe4581dded0da38cafEthan Nicholas                args.fInputColor ? args.fInputColor : "half4(1)",
32b7e8c3b52a306357ecd08d00170062137ec641d4Ethan Nicholas                fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]).c_str(),
33b7e8c3b52a306357ecd08d00170062137ec641d4Ethan Nicholas                sk_TransformedCoords2D_0.c_str(),
342240be96d97b5ac0886381d74a21f1e2a0928f55Brian Osman                fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str());
35baf981f71614e7a2fbe6af2726e65126d431ed8eEthan Nicholas    }
36b7e8c3b52a306357ecd08d00170062137ec641d4Ethan Nicholas
3768990be759f663bafdb7c1b746adce15557cda7fEthan Nicholasprivate:
38b7e8c3b52a306357ecd08d00170062137ec641d4Ethan Nicholas    void onSetData(const GrGLSLProgramDataManager& pdman,
392240be96d97b5ac0886381d74a21f1e2a0928f55Brian Osman                   const GrFragmentProcessor& _proc) override {}
4068b58c95384dd6c2fd389a5b4bbf8fc468819454bsalomon@google.com};
4168990be759f663bafdb7c1b746adce15557cda7fEthan NicholasGrGLSLFragmentProcessor* GrSimpleTextureEffect::onCreateGLSLInstance() const {
4268990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas    return new GrGLSLSimpleTextureEffect();
4346b654df9e70bbfacf6dc45d3a2a7ceb13a61edbEthan Nicholas}
44b7e8c3b52a306357ecd08d00170062137ec641d4Ethan Nicholasvoid GrSimpleTextureEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps,
452240be96d97b5ac0886381d74a21f1e2a0928f55Brian Osman                                                  GrProcessorKeyBuilder* b) const {}
4668990be759f663bafdb7c1b746adce15557cda7fEthan Nicholasbool GrSimpleTextureEffect::onIsEqual(const GrFragmentProcessor& other) const {
4768990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas    const GrSimpleTextureEffect& that = other.cast<GrSimpleTextureEffect>();
48b7e8c3b52a306357ecd08d00170062137ec641d4Ethan Nicholas    (void)that;
4968990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas    if (fImage != that.fImage) return false;
5068990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas    if (fMatrix != that.fMatrix) return false;
5168990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas    return true;
5268b58c95384dd6c2fd389a5b4bbf8fc468819454bsalomon@google.com}
53f57c0d67611186ba74179b53b421e64b63a579c7Ethan NicholasGrSimpleTextureEffect::GrSimpleTextureEffect(const GrSimpleTextureEffect& src)
54abff956455637b12eab374fd44b99e1338799113Ethan Nicholas        : INHERITED(kGrSimpleTextureEffect_ClassID, src.optimizationFlags())
55f57c0d67611186ba74179b53b421e64b63a579c7Ethan Nicholas        , fImage(src.fImage)
56f57c0d67611186ba74179b53b421e64b63a579c7Ethan Nicholas        , fMatrix(src.fMatrix)
57f57c0d67611186ba74179b53b421e64b63a579c7Ethan Nicholas        , fImageCoordTransform(src.fImageCoordTransform) {
58f57c0d67611186ba74179b53b421e64b63a579c7Ethan Nicholas    this->addTextureSampler(&fImage);
59f57c0d67611186ba74179b53b421e64b63a579c7Ethan Nicholas    this->addCoordTransform(&fImageCoordTransform);
60f57c0d67611186ba74179b53b421e64b63a579c7Ethan Nicholas}
61aff329b8e9b239bca1d93b13a914fbef45ccf7feBrian Salomonstd::unique_ptr<GrFragmentProcessor> GrSimpleTextureEffect::clone() const {
62aff329b8e9b239bca1d93b13a914fbef45ccf7feBrian Salomon    return std::unique_ptr<GrFragmentProcessor>(new GrSimpleTextureEffect(*this));
63f57c0d67611186ba74179b53b421e64b63a579c7Ethan Nicholas}
64b0a8a377f832c59cee939ad721e1f87d378b7142joshualittGR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSimpleTextureEffect);
65baf981f71614e7a2fbe6af2726e65126d431ed8eEthan Nicholas#if GR_TEST_UTILS
66aff329b8e9b239bca1d93b13a914fbef45ccf7feBrian Salomonstd::unique_ptr<GrFragmentProcessor> GrSimpleTextureEffect::TestCreate(
67aff329b8e9b239bca1d93b13a914fbef45ccf7feBrian Salomon        GrProcessorTestData* testData) {
6868990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas    int texIdx = testData->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
6968990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas                                               : GrProcessorUnitTest::kAlphaTextureIdx;
702bbdcc44c63974f29f3743bb58d929601a3f65c6Brian Salomon    GrSamplerState::WrapMode wrapModes[2];
712bbdcc44c63974f29f3743bb58d929601a3f65c6Brian Salomon    GrTest::TestWrapModes(testData->fRandom, wrapModes);
72b350f1c075a35915f30a69300d263aeb1a9ed4f0Robert Phillips    if (!testData->caps()->npotTextureTileSupport()) {
73b350f1c075a35915f30a69300d263aeb1a9ed4f0Robert Phillips        // Performing repeat sampling on npot textures will cause asserts on HW
74b350f1c075a35915f30a69300d263aeb1a9ed4f0Robert Phillips        // that lacks support.
75b350f1c075a35915f30a69300d263aeb1a9ed4f0Robert Phillips        wrapModes[0] = GrSamplerState::WrapMode::kClamp;
76b350f1c075a35915f30a69300d263aeb1a9ed4f0Robert Phillips        wrapModes[1] = GrSamplerState::WrapMode::kClamp;
77b350f1c075a35915f30a69300d263aeb1a9ed4f0Robert Phillips    }
78b350f1c075a35915f30a69300d263aeb1a9ed4f0Robert Phillips
792bbdcc44c63974f29f3743bb58d929601a3f65c6Brian Salomon    GrSamplerState params(wrapModes, testData->fRandom->nextBool()
802bbdcc44c63974f29f3743bb58d929601a3f65c6Brian Salomon                                             ? GrSamplerState::Filter::kBilerp
812bbdcc44c63974f29f3743bb58d929601a3f65c6Brian Salomon                                             : GrSamplerState::Filter::kNearest);
8268990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas
8368990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas    const SkMatrix& matrix = GrTest::TestMatrix(testData->fRandom);
842b2936e75c79c61ff04082f5ae7a9738c439caacRobert Phillips    return GrSimpleTextureEffect::Make(testData->textureProxy(texIdx), matrix, params);
8568b58c95384dd6c2fd389a5b4bbf8fc468819454bsalomon@google.com}
866f6961ebad65c582318564b3688e78e5c99f3935Hal Canary#endif
8768990be759f663bafdb7c1b746adce15557cda7fEthan Nicholas#endif
88