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

Side by Side Diff: src/gpu/GrDefaultGeoProcFactory.cpp

Issue 822423004: Move most of the transform logic into the primitive processors (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: tiny update Created 5 years, 11 months 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 2014 Google Inc. 2 * Copyright 2014 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 "GrDefaultGeoProcFactory.h" 8 #include "GrDefaultGeoProcFactory.h"
9 9
10 #include "GrDrawState.h" 10 #include "GrDrawState.h"
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 theirs.fInputColorType, theirs.fColor) && 76 theirs.fInputColorType, theirs.fColor) &&
77 CanCombineOutput(mine.fInputCoverageType, mine.fCoverage, 77 CanCombineOutput(mine.fInputCoverageType, mine.fCoverage,
78 theirs.fInputCoverageType, theirs.fCoverage); 78 theirs.fInputCoverageType, theirs.fCoverage);
79 } 79 }
80 80
81 class GLProcessor : public GrGLGeometryProcessor { 81 class GLProcessor : public GrGLGeometryProcessor {
82 public: 82 public:
83 GLProcessor(const GrGeometryProcessor& gp, const GrBatchTracker&) 83 GLProcessor(const GrGeometryProcessor& gp, const GrBatchTracker&)
84 : fColor(GrColor_ILLEGAL), fCoverage(0xff) {} 84 : fColor(GrColor_ILLEGAL), fCoverage(0xff) {}
85 85
86 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 86 virtual void emitCode(EmitArgs& args) SK_OVERRIDE {
87 const DefaultGeoProc& gp = args.fGP.cast<DefaultGeoProc>(); 87 const DefaultGeoProc& gp = args.fGP.cast<DefaultGeoProc>();
88 GrGLGPBuilder* pb = args.fPB; 88 GrGLGPBuilder* pb = args.fPB;
89 GrGLVertexBuilder* vs = pb->getVertexShaderBuilder(); 89 GrGLVertexBuilder* vs = pb->getVertexShaderBuilder();
90 GrGLGPFragmentBuilder* fs = args.fPB->getFragmentShaderBuilder(); 90 GrGLGPFragmentBuilder* fs = args.fPB->getFragmentShaderBuilder();
91 const BatchTracker& local = args.fBT.cast<BatchTracker>(); 91 const BatchTracker& local = args.fBT.cast<BatchTracker>();
92 92
93 vs->codeAppendf("%s = %s;", vs->positionCoords(), gp.inPosition()->f Name); 93 // emit attributes
94 vs->emitAttributes(gp);
94 95
95 // Setup pass through color 96 // Setup pass through color
96 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, gp.inColor(), 97 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, gp.inColor(),
97 &fColorUniform); 98 &fColorUniform);
98 99
99 // Setup local coords if needed
100 if (gp.inLocalCoords()) {
101 vs->codeAppendf("%s = %s;", vs->localCoords(), gp.inLocalCoords( )->fName);
102 } else {
103 vs->codeAppendf("%s = %s;", vs->localCoords(), gp.inPosition()-> fName);
104 }
105
106 // setup uniform viewMatrix 100 // setup uniform viewMatrix
107 this->addUniformViewMatrix(pb); 101 this->addUniformViewMatrix(pb);
108 102
109 // setup position varying 103 // Setup position
110 vs->codeAppendf("%s = %s * vec3(%s, 1);", vs->glPosition(), this->uV iewM(), 104 const char* pos3 = "pos3";
111 gp.inPosition()->fName); 105 vs->codeAppendf("vec3 %s;", pos3);
106 vs->codeAppendf("%s = %s * vec3(%s, 1);", pos3, this->uViewM(), gp.i nPosition()->fName);
107
108 if (gp.inLocalCoords()) {
109 // emit transforms with explicit local coords
110 this->emitTransforms(pb, pos3, gp.inLocalCoords()->fName, gp.loc alMatrix(),
111 args.fTransformsIn, args.fTransformsOut);
112 } else {
113 // emit transforms with position
114 this->emitTransforms(pb, pos3, gp.inPosition()->fName, gp.localM atrix(),
115 args.fTransformsIn, args.fTransformsOut);
116 }
117
118 vs->transformToNormalizedDeviceSpace(pos3);
119
112 120
113 // Setup coverage as pass through 121 // Setup coverage as pass through
114 if (kUniform_GrGPInput == local.fInputCoverageType) { 122 if (kUniform_GrGPInput == local.fInputCoverageType) {
115 const char* fragCoverage; 123 const char* fragCoverage;
116 fCoverageUniform = pb->addUniform(GrGLProgramBuilder::kFragment_ Visibility, 124 fCoverageUniform = pb->addUniform(GrGLProgramBuilder::kFragment_ Visibility,
117 kFloat_GrSLType, 125 kFloat_GrSLType,
118 kDefault_GrSLPrecision, 126 kDefault_GrSLPrecision,
119 "Coverage", 127 "Coverage",
120 &fragCoverage); 128 &fragCoverage);
121 fs->codeAppendf("%s = vec4(%s);", args.fOutputCoverage, fragCove rage); 129 fs->codeAppendf("%s = vec4(%s);", args.fOutputCoverage, fragCove rage);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 175
168 typedef GrGLGeometryProcessor INHERITED; 176 typedef GrGLGeometryProcessor INHERITED;
169 }; 177 };
170 178
171 virtual void getGLProcessorKey(const GrBatchTracker& bt, 179 virtual void getGLProcessorKey(const GrBatchTracker& bt,
172 const GrGLCaps& caps, 180 const GrGLCaps& caps,
173 GrProcessorKeyBuilder* b) const SK_OVERRIDE { 181 GrProcessorKeyBuilder* b) const SK_OVERRIDE {
174 GLProcessor::GenKey(*this, bt, caps, b); 182 GLProcessor::GenKey(*this, bt, caps, b);
175 } 183 }
176 184
177 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE { 185 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
186 const GrGLCaps&) const SK_O VERRIDE {
178 return SkNEW_ARGS(GLProcessor, (*this, bt)); 187 return SkNEW_ARGS(GLProcessor, (*this, bt));
179 } 188 }
180 189
181 private: 190 private:
182 DefaultGeoProc(uint32_t gpTypeFlags, 191 DefaultGeoProc(uint32_t gpTypeFlags,
183 GrColor color, 192 GrColor color,
184 const SkMatrix& viewMatrix, 193 const SkMatrix& viewMatrix,
185 const SkMatrix& localMatrix, 194 const SkMatrix& localMatrix,
186 bool opaqueVertexColors, 195 bool opaqueVertexColors,
187 uint8_t coverage) 196 uint8_t coverage)
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 const SkMatrix& local Matrix, 286 const SkMatrix& local Matrix,
278 bool opaqueVertexColo rs, 287 bool opaqueVertexColo rs,
279 uint8_t coverage) { 288 uint8_t coverage) {
280 return DefaultGeoProc::Create(gpTypeFlags, 289 return DefaultGeoProc::Create(gpTypeFlags,
281 color, 290 color,
282 viewMatrix, 291 viewMatrix,
283 localMatrix, 292 localMatrix,
284 opaqueVertexColors, 293 opaqueVertexColors,
285 coverage); 294 coverage);
286 } 295 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698