Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: src/gpu/effects/GrBitmapTextGeoProc.cpp

Issue 746423007: Draft change to start pulling uniform color into GP (Closed) Base URL: https://skia.googlesource.com/skia.git@no_factories
Patch Set: cleanup Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "GrBitmapTextGeoProc.h" 8 #include "GrBitmapTextGeoProc.h"
9 #include "GrInvariantOutput.h" 9 #include "GrInvariantOutput.h"
10 #include "GrTexture.h" 10 #include "GrTexture.h"
11 #include "gl/GrGLProcessor.h" 11 #include "gl/GrGLProcessor.h"
12 #include "gl/GrGLSL.h" 12 #include "gl/GrGLSL.h"
13 #include "gl/GrGLTexture.h" 13 #include "gl/GrGLTexture.h"
14 #include "gl/GrGLGeometryProcessor.h" 14 #include "gl/GrGLGeometryProcessor.h"
15 #include "gl/builders/GrGLProgramBuilder.h" 15 #include "gl/builders/GrGLProgramBuilder.h"
16 16
17 struct BitmapTextBatchTracker {
18 GPInput fInputColorType;
19 GrColor fColor;
20 };
21
17 class GrGLBitmapTextGeoProc : public GrGLGeometryProcessor { 22 class GrGLBitmapTextGeoProc : public GrGLGeometryProcessor {
18 public: 23 public:
19 GrGLBitmapTextGeoProc(const GrGeometryProcessor&, const GrBatchTracker&) {} 24 GrGLBitmapTextGeoProc(const GrGeometryProcessor&, const GrBatchTracker&) {}
20 25
21 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 26 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
22 const GrBitmapTextGeoProc& cte = args.fGP.cast<GrBitmapTextGeoProc>(); 27 const GrBitmapTextGeoProc& cte = args.fGP.cast<GrBitmapTextGeoProc>();
28 const BitmapTextBatchTracker& local = args.fBT.cast<BitmapTextBatchTrack er>();
23 29
24 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 30 GrGLGPBuilder* pb = args.fPB;
31 GrGLVertexBuilder* vsBuilder = pb->getVertexShaderBuilder();
25 32
26 GrGLVertToFrag v(kVec2f_GrSLType); 33 GrGLVertToFrag v(kVec2f_GrSLType);
27 args.fPB->addVarying("TextureCoords", &v); 34 pb->addVarying("TextureCoords", &v);
28 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), cte.inTextureCoords()->fNa me); 35 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), cte.inTextureCoords()->fNa me);
29 36
30 if (cte.inColor()) { 37 // Setup pass through color
31 args.fPB->addPassThroughAttribute(cte.inColor(), args.fOutputColor); 38 this->setupColor(pb, local.fInputColorType, args.fOutputColor, cte.inCol or(),
32 } 39 &fColorUniform);
33 40
34 // setup output coords 41 // setup output coords
35 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), cte.inPo sition()->fName); 42 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), cte.inPo sition()->fName);
36 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), cte.inPosit ion()->fName); 43 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), cte.inPosit ion()->fName);
37 44
38 // setup position varying 45 // setup position varying
39 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition() , 46 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition() ,
40 vsBuilder->uViewM(), cte.inPosition()->fName); 47 vsBuilder->uViewM(), cte.inPosition()->fName);
41 48
42 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); 49 GrGLGPFragmentBuilder* fsBuilder = pb->getFragmentShaderBuilder();
43 fsBuilder->codeAppendf("%s = ", args.fOutputCoverage); 50 fsBuilder->codeAppendf("%s = ", args.fOutputCoverage);
44 fsBuilder->appendTextureLookup(args.fSamplers[0], v.fsIn(), kVec2f_GrSLT ype); 51 fsBuilder->appendTextureLookup(args.fSamplers[0], v.fsIn(), kVec2f_GrSLT ype);
45 fsBuilder->codeAppend(";"); 52 fsBuilder->codeAppend(";");
46 } 53 }
47 54
48 virtual void setData(const GrGLProgramDataManager&, 55 virtual void setData(const GrGLProgramDataManager& pdman,
49 const GrGeometryProcessor&, 56 const GrGeometryProcessor& gp,
50 const GrBatchTracker&) SK_OVERRIDE {} 57 const GrBatchTracker& bt) SK_OVERRIDE {
58 const BitmapTextBatchTracker& local = bt.cast<BitmapTextBatchTracker>();
59 this->setUniformColorIfRequired(pdman, local.fInputColorType, local.fCol or, fColorUniform);
60 }
51 61
52 static inline void GenKey(const GrGeometryProcessor& proc, 62 static inline void GenKey(const GrGeometryProcessor& proc,
53 const GrBatchTracker&, 63 const GrBatchTracker& bt,
54 const GrGLCaps&, 64 const GrGLCaps&,
55 GrProcessorKeyBuilder* b) { 65 GrProcessorKeyBuilder* b) {
66 const BitmapTextBatchTracker& local = bt.cast<BitmapTextBatchTracker>();
56 const GrBitmapTextGeoProc& gp = proc.cast<GrBitmapTextGeoProc>(); 67 const GrBitmapTextGeoProc& gp = proc.cast<GrBitmapTextGeoProc>();
57
58 b->add32(SkToBool(gp.inColor())); 68 b->add32(SkToBool(gp.inColor()));
69 b->add32(local.fInputColorType);
59 } 70 }
60 71
72 private:
73 UniformHandle fColorUniform;
61 74
62 private:
63 typedef GrGLGeometryProcessor INHERITED; 75 typedef GrGLGeometryProcessor INHERITED;
64 }; 76 };
65 77
66 /////////////////////////////////////////////////////////////////////////////// 78 ///////////////////////////////////////////////////////////////////////////////
67 79
68 GrBitmapTextGeoProc::GrBitmapTextGeoProc(GrColor color, GrTexture* texture, 80 GrBitmapTextGeoProc::GrBitmapTextGeoProc(GrColor color, GrTexture* texture,
69 const GrTextureParams& params, bool use ColorAttrib, 81 const GrTextureParams& params, bool use ColorAttrib,
70 bool opaqueVertexColors) 82 bool opaqueVertexColors)
71 : INHERITED(color, opaqueVertexColors), fTextureAccess(texture, params), fIn Color(NULL) { 83 : INHERITED(color, opaqueVertexColors), fTextureAccess(texture, params), fIn Color(NULL) {
72 this->initClassID<GrBitmapTextGeoProc>(); 84 this->initClassID<GrBitmapTextGeoProc>();
(...skipping 27 matching lines...) Expand all
100 void GrBitmapTextGeoProc::getGLProcessorKey(const GrBatchTracker& bt, 112 void GrBitmapTextGeoProc::getGLProcessorKey(const GrBatchTracker& bt,
101 const GrGLCaps& caps, 113 const GrGLCaps& caps,
102 GrProcessorKeyBuilder* b) const { 114 GrProcessorKeyBuilder* b) const {
103 GrGLBitmapTextGeoProc::GenKey(*this, bt, caps, b); 115 GrGLBitmapTextGeoProc::GenKey(*this, bt, caps, b);
104 } 116 }
105 117
106 GrGLGeometryProcessor* 118 GrGLGeometryProcessor*
107 GrBitmapTextGeoProc::createGLInstance(const GrBatchTracker& bt) const { 119 GrBitmapTextGeoProc::createGLInstance(const GrBatchTracker& bt) const {
108 return SkNEW_ARGS(GrGLBitmapTextGeoProc, (*this, bt)); 120 return SkNEW_ARGS(GrGLBitmapTextGeoProc, (*this, bt));
109 } 121 }
122
123 void GrBitmapTextGeoProc::initBatchTracker(GrBatchTracker* bt, const InitBT& ini t) const {
124 BitmapTextBatchTracker* local = bt->cast<BitmapTextBatchTracker>();
125 local->fColor = init.fColor;
126 local->fInputColorType = GetColorInputType(init, SkToBool(fInColor));
127 }
128
129 bool GrBitmapTextGeoProc::onCanBatch(const GrBatchTracker& l, const GrBatchTrack er& r) const {
130 const BitmapTextBatchTracker& left = l.cast<BitmapTextBatchTracker>();
131 const BitmapTextBatchTracker& right = r.cast<BitmapTextBatchTracker>();
132 return CanCombineOutput(left.fInputColorType, left.fColor,
133 right.fInputColorType, right.fColor);
134 }
135
110 /////////////////////////////////////////////////////////////////////////////// 136 ///////////////////////////////////////////////////////////////////////////////
111 137
112 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrBitmapTextGeoProc); 138 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrBitmapTextGeoProc);
113 139
114 GrGeometryProcessor* GrBitmapTextGeoProc::TestCreate(SkRandom* random, 140 GrGeometryProcessor* GrBitmapTextGeoProc::TestCreate(SkRandom* random,
115 GrContext*, 141 GrContext*,
116 const GrDrawTargetCaps&, 142 const GrDrawTargetCaps&,
117 GrTexture* textures[]) { 143 GrTexture* textures[]) {
118 int texIdx = random->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : 144 int texIdx = random->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
119 GrProcessorUnitTest::kAlphaTextureIdx; 145 GrProcessorUnitTest::kAlphaTextureIdx;
120 static const SkShader::TileMode kTileModes[] = { 146 static const SkShader::TileMode kTileModes[] = {
121 SkShader::kClamp_TileMode, 147 SkShader::kClamp_TileMode,
122 SkShader::kRepeat_TileMode, 148 SkShader::kRepeat_TileMode,
123 SkShader::kMirror_TileMode, 149 SkShader::kMirror_TileMode,
124 }; 150 };
125 SkShader::TileMode tileModes[] = { 151 SkShader::TileMode tileModes[] = {
126 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], 152 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))],
127 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], 153 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))],
128 }; 154 };
129 GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBil erp_FilterMode : 155 GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBil erp_FilterMode :
130 GrTextureParams::kNon e_FilterMode); 156 GrTextureParams::kNon e_FilterMode);
131 157
132 return GrBitmapTextGeoProc::Create(GrRandomColor(random), textures[texIdx], params, 158 return GrBitmapTextGeoProc::Create(GrRandomColor(random), textures[texIdx], params,
133 random->nextBool(), random->nextBool()); 159 random->nextBool(), random->nextBool());
134 } 160 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698