13390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org/*
23390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org * Copyright 2013 Google Inc.
33390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org *
43390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be
53390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org * found in the LICENSE file.
63390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org */
73390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org
83390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org#include "GrGLProgramEffects.h"
9b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt#include "gl/GrGLProcessor.h"
10ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen#include "gl/GrGLPathRendering.h"
11408d6125b32c86e1f81ce60465e3bf4491e755fcjoshualitt#include "gl/builders/GrGLFullProgramBuilder.h"
12408d6125b32c86e1f81ce60465e3bf4491e755fcjoshualitt#include "gl/builders/GrGLFragmentOnlyProgramBuilder.h"
13249af15fb82833d2274850c589812b6e69df0033joshualitt#include "gl/GrGLGeometryProcessor.h"
143390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org#include "gl/GrGpuGL.h"
153390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org
16b0a8a377f832c59cee939ad721e1f87d378b7142joshualitttypedef GrGLProcessor::TransformedCoords TransformedCoords;
17b0a8a377f832c59cee939ad721e1f87d378b7142joshualitttypedef GrGLProcessor::TransformedCoordsArray TransformedCoordsArray;
18b0a8a377f832c59cee939ad721e1f87d378b7142joshualitttypedef GrGLProcessor::TextureSampler TextureSampler;
19b0a8a377f832c59cee939ad721e1f87d378b7142joshualitttypedef GrGLProcessor::TextureSamplerArray TextureSamplerArray;
203390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org
213390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.orgnamespace {
226b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org/**
236b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org * Retrieves the final matrix that a transform needs to apply to its source coords.
246b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org */
25b0a8a377f832c59cee939ad721e1f87d378b7142joshualittSkMatrix get_transform_matrix(const GrProcessorStage& effectStage,
2649586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt                              bool useExplicitLocalCoords,
2749586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt                              int transformIdx) {
28b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    const GrCoordTransform& coordTransform = effectStage.getProcessor()->coordTransform(transformIdx);
296b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    SkMatrix combined;
300673676854da8051eb97515b601eb425b079e103bsalomon
310673676854da8051eb97515b601eb425b079e103bsalomon    if (kLocal_GrCoordSet == coordTransform.sourceCoords()) {
320673676854da8051eb97515b601eb425b079e103bsalomon        // If we have explicit local coords then we shouldn't need a coord change.
3349586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt        const SkMatrix& ccm =
3449586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt                useExplicitLocalCoords ? SkMatrix::I() : effectStage.getCoordChangeMatrix();
3549586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt        combined.setConcat(coordTransform.getMatrix(), ccm);
366b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    } else {
376b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org        combined = coordTransform.getMatrix();
386b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    }
396b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    if (coordTransform.reverseY()) {
406b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org        // combined.postScale(1,-1);
416b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org        // combined.postTranslate(0,1);
426b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org        combined.set(SkMatrix::kMSkewY,
436b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org            combined[SkMatrix::kMPersp0] - combined[SkMatrix::kMSkewY]);
446b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org        combined.set(SkMatrix::kMScaleY,
456b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org            combined[SkMatrix::kMPersp1] - combined[SkMatrix::kMScaleY]);
466b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org        combined.set(SkMatrix::kMTransY,
476b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org            combined[SkMatrix::kMPersp2] - combined[SkMatrix::kMTransY]);
486b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    }
496b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    return combined;
506b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org}
516b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org}
526b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org
536b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org////////////////////////////////////////////////////////////////////////////////
546b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org
553390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.orgGrGLProgramEffects::~GrGLProgramEffects() {
56b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    int numEffects = fGLProcessors.count();
573390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org    for (int e = 0; e < numEffects; ++e) {
58b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt        SkDELETE(fGLProcessors[e]);
593390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org    }
603390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org}
613390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org
627510b224e52b9518a8ddf7418db0e9c258f79539kkinnunenvoid GrGLProgramEffects::initSamplers(const GrGLProgramDataManager& programResourceManager, int* texUnitIdx) {
63b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    int numEffects = fGLProcessors.count();
643390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org    SkASSERT(numEffects == fSamplers.count());
653390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org    for (int e = 0; e < numEffects; ++e) {
663390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org        SkTArray<Sampler, true>& samplers = fSamplers[e];
673390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org        int numSamplers = samplers.count();
683390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org        for (int s = 0; s < numSamplers; ++s) {
693390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org            SkASSERT(samplers[s].fUniform.isValid());
707510b224e52b9518a8ddf7418db0e9c258f79539kkinnunen            programResourceManager.setSampler(samplers[s].fUniform, *texUnitIdx);
713390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org            samplers[s].fTextureUnit = (*texUnitIdx)++;
723390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org        }
733390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org    }
743390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org}
753390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org
76b0a8a377f832c59cee939ad721e1f87d378b7142joshualittvoid GrGLProgramEffects::bindTextures(GrGpuGL* gpu, const GrProcessor& effect, int effectIdx) {
773390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org    const SkTArray<Sampler, true>& samplers = fSamplers[effectIdx];
783390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org    int numSamplers = samplers.count();
7949586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt    SkASSERT(numSamplers == effect.numTextures());
803390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org    for (int s = 0; s < numSamplers; ++s) {
813390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org        SkASSERT(samplers[s].fTextureUnit >= 0);
8249586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt        const GrTextureAccess& textureAccess = effect.textureAccess(s);
833390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org        gpu->bindTexture(samplers[s].fTextureUnit,
843390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org                         textureAccess.getParams(),
853390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org                         static_cast<GrGLTexture*>(textureAccess.getTexture()));
863390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org    }
873390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org}
883390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org
893390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org////////////////////////////////////////////////////////////////////////////////
903390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org
916b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.orgvoid GrGLVertexProgramEffects::setData(GrGpuGL* gpu,
92ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen                                       GrGpu::DrawType drawType,
93ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen                                       const GrGLProgramDataManager& programDataManager,
94b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt                                       const GrGeometryStage* effectStages) {
95b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    SkASSERT(1 == fGLProcessors.count());
96b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    SkASSERT(1 == fTransforms.count());
97b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    SkASSERT(1 == fSamplers.count());
98b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    this->setDataInternal(gpu, drawType, programDataManager, *effectStages, 0);
99b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt}
100b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt
101b0a8a377f832c59cee939ad721e1f87d378b7142joshualittvoid GrGLVertexProgramEffects::setData(GrGpuGL* gpu,
102b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt                                       GrGpu::DrawType drawType,
103b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt                                       const GrGLProgramDataManager& programDataManager,
104b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt                                       const GrFragmentStage* effectStages[]) {
105b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    int numEffects = fGLProcessors.count();
1066b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    SkASSERT(numEffects == fTransforms.count());
1076b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    SkASSERT(numEffects == fSamplers.count());
1086b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    for (int e = 0; e < numEffects; ++e) {
109b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt        this->setDataInternal(gpu, drawType, programDataManager, *effectStages[e], e);
110b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    }
111b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt}
112ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen
113b0a8a377f832c59cee939ad721e1f87d378b7142joshualittvoid GrGLVertexProgramEffects::setDataInternal(GrGpuGL* gpu,
114b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt                                               GrGpu::DrawType drawType,
115b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt                                               const GrGLProgramDataManager& programDataManager,
116b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt                                               const GrProcessorStage& effectStage,
117b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt                                               int index) {
118b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    const GrProcessor& effect = *effectStage.getProcessor();
119b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    fGLProcessors[index]->setData(programDataManager, effect);
120b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    if (GrGpu::IsPathRenderingDrawType(drawType)) {
121b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt        this->setPathTransformData(gpu, programDataManager, effectStage, index);
122b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    } else {
123b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt        this->setTransformData(gpu, programDataManager, effectStage, index);
1246b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    }
125b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    this->bindTextures(gpu, effect, index);
1266b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org}
1276b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org
128ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunenvoid GrGLVertexProgramEffects::setTransformData(GrGpuGL* gpu,
129ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen                                                const GrGLProgramDataManager& pdman,
130b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt                                                const GrProcessorStage& effectStage,
1316b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org                                                int effectIdx) {
1326b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    SkTArray<Transform, true>& transforms = fTransforms[effectIdx];
1336b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    int numTransforms = transforms.count();
134b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    SkASSERT(numTransforms == effectStage.getProcessor()->numTransforms());
1356b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    for (int t = 0; t < numTransforms; ++t) {
1364c6443e86927c8cbf794d7c154470b9675aa7778egdaniel        SkASSERT(transforms[t].fHandle.isValid());
13749586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt        const SkMatrix& matrix = get_transform_matrix(effectStage, fHasExplicitLocalCoords, t);
1384c6443e86927c8cbf794d7c154470b9675aa7778egdaniel        if (!transforms[t].fCurrentValue.cheapEqualTo(matrix)) {
139ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen            pdman.setSkMatrix(transforms[t].fHandle, matrix);
1404c6443e86927c8cbf794d7c154470b9675aa7778egdaniel            transforms[t].fCurrentValue = matrix;
1416b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org        }
1426b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    }
1436b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org}
1446b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org
145ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunenvoid GrGLVertexProgramEffects::setPathTransformData(GrGpuGL* gpu,
146ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen                                                    const GrGLProgramDataManager& pdman,
147b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt                                                    const GrProcessorStage& effectStage,
148ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen                                                    int effectIdx) {
149ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen    SkTArray<PathTransform, true>& transforms = fPathTransforms[effectIdx];
150ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen    int numTransforms = transforms.count();
151b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    SkASSERT(numTransforms == effectStage.getProcessor()->numTransforms());
152ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen    for (int t = 0; t < numTransforms; ++t) {
153ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen        SkASSERT(transforms[t].fHandle.isValid());
15449586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt        const SkMatrix& transform = get_transform_matrix(effectStage, fHasExplicitLocalCoords, t);
155ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen        if (transforms[t].fCurrentValue.cheapEqualTo(transform)) {
156ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen            continue;
157ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen        }
158ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen        transforms[t].fCurrentValue = transform;
159ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen        switch (transforms[t].fType) {
160ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen            case kVec2f_GrSLType:
161ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen                pdman.setProgramPathFragmentInputTransform(transforms[t].fHandle, 2, transform);
162ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen                break;
163ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen            case kVec3f_GrSLType:
164ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen                pdman.setProgramPathFragmentInputTransform(transforms[t].fHandle, 3, transform);
165ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen                break;
166ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen            default:
167ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen                SkFAIL("Unexpected matrix type.");
168ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen        }
169ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen    }
170ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen}
171ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen
1726b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org////////////////////////////////////////////////////////////////////////////////
1736b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org
1740a6fe71f1bc0e601b41b7ae6d28b8c96a2c41116commit-bot@chromium.orgvoid GrGLPathTexGenProgramEffects::setData(GrGpuGL* gpu,
175ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen                                           GrGpu::DrawType,
176ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen                                           const GrGLProgramDataManager& pdman,
177b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt                                           const GrFragmentStage* effectStages[]) {
178b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    int numEffects = fGLProcessors.count();
1796b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    SkASSERT(numEffects == fTransforms.count());
1806b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    SkASSERT(numEffects == fSamplers.count());
1816b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    for (int e = 0; e < numEffects; ++e) {
182b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt        const GrProcessorStage& effectStage = *effectStages[e];
183b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt        const GrProcessor& effect = *effectStage.getProcessor();
184b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt        fGLProcessors[e]->setData(pdman, effect);
18549586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt        this->setPathTexGenState(gpu, effectStage, e);
18649586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt        this->bindTextures(gpu, effect, e);
1873390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org    }
1883390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org}
1896b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org
1900a6fe71f1bc0e601b41b7ae6d28b8c96a2c41116commit-bot@chromium.orgvoid GrGLPathTexGenProgramEffects::setPathTexGenState(GrGpuGL* gpu,
191b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt                                              const GrProcessorStage& effectStage,
1926b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org                                              int effectIdx) {
1936b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    int texCoordIndex = fTransforms[effectIdx].fTexCoordIndex;
194b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt    int numTransforms = effectStage.getProcessor()->numTransforms();
1956b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    for (int t = 0; t < numTransforms; ++t) {
19623e280d1f227d94f6b3dfd0b47359cca1569e1b4joshualitt        const SkMatrix& transform = get_transform_matrix(effectStage, false, t);
19723e280d1f227d94f6b3dfd0b47359cca1569e1b4joshualitt        GrGLPathRendering::PathTexGenComponents components =
19823e280d1f227d94f6b3dfd0b47359cca1569e1b4joshualitt                GrGLPathRendering::kST_PathTexGenComponents;
19923e280d1f227d94f6b3dfd0b47359cca1569e1b4joshualitt        if (effectStage.isPerspectiveCoordTransform(t, false)) {
20023e280d1f227d94f6b3dfd0b47359cca1569e1b4joshualitt            components = GrGLPathRendering::kSTR_PathTexGenComponents;
2016b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org        }
20223e280d1f227d94f6b3dfd0b47359cca1569e1b4joshualitt        gpu->glPathRendering()->enablePathTexGen(texCoordIndex++, components, transform);
2036b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org    }
2046b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org}
205