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