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

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

Issue 854013002: Refactor position computation to enable device space "nudge" (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Update to ToT 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 void onEmitCode(EmitArgs& args) SK_OVERRIDE { 86 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) 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* vsBuilder = 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 // emit attributes 93 // emit attributes
94 vs->emitAttributes(gp); 94 vsBuilder->emitAttributes(gp);
95 95
96 // Setup pass through color 96 // Setup pass through color
97 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, gp.inColor(), 97 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, gp.inColor(),
98 &fColorUniform); 98 &fColorUniform);
99 99
100 // setup uniform viewMatrix 100 // setup uniform viewMatrix
101 this->addUniformViewMatrix(pb); 101 this->addUniformViewMatrix(pb);
102 102
103 // Setup position 103 // Setup position
104 vs->codeAppendf("%s = %s * vec3(%s, 1);", this->position(), this->u ViewM(), 104 SetupPosition(vsBuilder, gpArgs, gp.inPosition()->fName,
105 gp.inPosition()->fName); 105 gp.viewMatrix(), this->uViewM());
106 106
107 if (gp.inLocalCoords()) { 107 if (gp.inLocalCoords()) {
108 // emit transforms with explicit local coords 108 // emit transforms with explicit local coords
109 this->emitTransforms(pb, this->position(), gp.inLocalCoords()-> fName, 109 this->emitTransforms(pb, gpArgs->fPositionVar, gp.inLocalCoords( )->fName,
110 gp.localMatrix(), args.fTransformsIn, args. fTransformsOut); 110 gp.localMatrix(), args.fTransformsIn, args. fTransformsOut);
111 } else { 111 } else {
112 // emit transforms with position 112 // emit transforms with position
113 this->emitTransforms(pb, this->position(), gp.inPosition()->fNa me, 113 this->emitTransforms(pb, gpArgs->fPositionVar, gp.inPosition()-> fName,
114 gp.localMatrix(), args.fTransformsIn, args. fTransformsOut); 114 gp.localMatrix(), args.fTransformsIn, args. fTransformsOut);
115 } 115 }
116 116
117 // Setup coverage as pass through 117 // Setup coverage as pass through
118 if (kUniform_GrGPInput == local.fInputCoverageType) { 118 if (kUniform_GrGPInput == local.fInputCoverageType) {
119 const char* fragCoverage; 119 const char* fragCoverage;
120 fCoverageUniform = pb->addUniform(GrGLProgramBuilder::kFragment_ Visibility, 120 fCoverageUniform = pb->addUniform(GrGLProgramBuilder::kFragment_ Visibility,
121 kFloat_GrSLType, 121 kFloat_GrSLType,
122 kDefault_GrSLPrecision, 122 kDefault_GrSLPrecision,
123 "Coverage", 123 "Coverage",
(...skipping 11 matching lines...) Expand all
135 135
136 static inline void GenKey(const GrGeometryProcessor& gp, 136 static inline void GenKey(const GrGeometryProcessor& gp,
137 const GrBatchTracker& bt, 137 const GrBatchTracker& bt,
138 const GrGLCaps&, 138 const GrGLCaps&,
139 GrProcessorKeyBuilder* b) { 139 GrProcessorKeyBuilder* b) {
140 const DefaultGeoProc& def = gp.cast<DefaultGeoProc>(); 140 const DefaultGeoProc& def = gp.cast<DefaultGeoProc>();
141 const BatchTracker& local = bt.cast<BatchTracker>(); 141 const BatchTracker& local = bt.cast<BatchTracker>();
142 uint32_t key = def.fFlags; 142 uint32_t key = def.fFlags;
143 key |= local.fInputColorType << 8 | local.fInputCoverageType << 16; 143 key |= local.fInputColorType << 8 | local.fInputCoverageType << 16;
144 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 24 : 0x0; 144 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 24 : 0x0;
145 key |= ComputePosKey(gp.viewMatrix()) << 25;
145 b->add32(key); 146 b->add32(key);
146 } 147 }
147 148
148 virtual void setData(const GrGLProgramDataManager& pdman, 149 virtual void setData(const GrGLProgramDataManager& pdman,
149 const GrPrimitiveProcessor& gp, 150 const GrPrimitiveProcessor& gp,
150 const GrBatchTracker& bt) SK_OVERRIDE { 151 const GrBatchTracker& bt) SK_OVERRIDE {
151 this->setUniformViewMatrix(pdman, gp.viewMatrix()); 152 this->setUniformViewMatrix(pdman, gp.viewMatrix());
152 153
153 const BatchTracker& local = bt.cast<BatchTracker>(); 154 const BatchTracker& local = bt.cast<BatchTracker>();
154 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f Color) { 155 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f Color) {
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 const SkMatrix& local Matrix, 283 const SkMatrix& local Matrix,
283 bool opaqueVertexColo rs, 284 bool opaqueVertexColo rs,
284 uint8_t coverage) { 285 uint8_t coverage) {
285 return DefaultGeoProc::Create(gpTypeFlags, 286 return DefaultGeoProc::Create(gpTypeFlags,
286 color, 287 color,
287 viewMatrix, 288 viewMatrix,
288 localMatrix, 289 localMatrix,
289 opaqueVertexColors, 290 opaqueVertexColors,
290 coverage); 291 coverage);
291 } 292 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698