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

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

Issue 14328009: Vertex Attrib configurations now handled as pointers vs. SkSTArrays (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Added "extern const" & removed comment Created 7 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « src/gpu/GrDrawState.h ('k') | src/gpu/GrDrawTarget.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 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 "GrDrawState.h" 8 #include "GrDrawState.h"
9 #include "GrPaint.h" 9 #include "GrPaint.h"
10 10
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 uint32_t mask = (1 << dwordCount)-1; 61 uint32_t mask = (1 << dwordCount)-1;
62 size_t offsetShift = attribs[index].fOffset >> 2; 62 size_t offsetShift = attribs[index].fOffset >> 2;
63 GrAssert(!(overlapCheck & (mask << offsetShift))); 63 GrAssert(!(overlapCheck & (mask << offsetShift)));
64 overlapCheck |= (mask << offsetShift); 64 overlapCheck |= (mask << offsetShift);
65 #endif 65 #endif
66 } 66 }
67 return size; 67 return size;
68 } 68 }
69 69
70 size_t GrDrawState::getVertexSize() const { 70 size_t GrDrawState::getVertexSize() const {
71 return vertex_size(fCommon.fVertexAttribs.begin(), fCommon.fVertexAttribs.co unt()); 71 return vertex_size(fCommon.fVAPtr, fCommon.fVACount);
72 } 72 }
73 73
74 //////////////////////////////////////////////////////////////////////////////// 74 ////////////////////////////////////////////////////////////////////////////////
75 75
76 void GrDrawState::setVertexAttribs(const GrVertexAttrib* attribs, int count) { 76 void GrDrawState::setVertexAttribs(const GrVertexAttrib* attribs, int count) {
77 GrAssert(count <= kMaxVertexAttribCnt); 77 GrAssert(count <= kMaxVertexAttribCnt);
78 fCommon.fVertexAttribs.reset(attribs, count); 78
79 fCommon.fVAPtr = attribs;
80 fCommon.fVACount = count;
79 81
80 // Set all the indices to -1 82 // Set all the indices to -1
81 memset(fCommon.fFixedFunctionVertexAttribIndices, 83 memset(fCommon.fFixedFunctionVertexAttribIndices,
82 0xff, 84 0xff,
83 sizeof(fCommon.fFixedFunctionVertexAttribIndices)); 85 sizeof(fCommon.fFixedFunctionVertexAttribIndices));
84 #if GR_DEBUG 86 #if GR_DEBUG
85 uint32_t overlapCheck = 0; 87 uint32_t overlapCheck = 0;
86 #endif 88 #endif
87 for (int i = 0; i < count; ++i) { 89 for (int i = 0; i < count; ++i) {
88 if (attribs[i].fBinding < kGrFixedFunctionVertexAttribBindingCnt) { 90 if (attribs[i].fBinding < kGrFixedFunctionVertexAttribBindingCnt) {
(...skipping 13 matching lines...) Expand all
102 } 104 }
103 // Positions must be specified. 105 // Positions must be specified.
104 GrAssert(-1 != fCommon.fFixedFunctionVertexAttribIndices[kPosition_GrVertexA ttribBinding]); 106 GrAssert(-1 != fCommon.fFixedFunctionVertexAttribIndices[kPosition_GrVertexA ttribBinding]);
105 } 107 }
106 108
107 //////////////////////////////////////////////////////////////////////////////// 109 ////////////////////////////////////////////////////////////////////////////////
108 110
109 void GrDrawState::setDefaultVertexAttribs() { 111 void GrDrawState::setDefaultVertexAttribs() {
110 static const GrVertexAttrib kPositionAttrib = 112 static const GrVertexAttrib kPositionAttrib =
111 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding}; 113 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding};
112 fCommon.fVertexAttribs.reset(&kPositionAttrib, 1); 114
115 fCommon.fVAPtr = &kPositionAttrib;
116 fCommon.fVACount = 1;
117
113 // set all the fixed function indices to -1 except position. 118 // set all the fixed function indices to -1 except position.
114 memset(fCommon.fFixedFunctionVertexAttribIndices, 119 memset(fCommon.fFixedFunctionVertexAttribIndices,
115 0xff, 120 0xff,
116 sizeof(fCommon.fFixedFunctionVertexAttribIndices)); 121 sizeof(fCommon.fFixedFunctionVertexAttribIndices));
117 fCommon.fFixedFunctionVertexAttribIndices[kPosition_GrVertexAttribBinding] = 0; 122 fCommon.fFixedFunctionVertexAttribIndices[kPosition_GrVertexAttribBinding] = 0;
118 } 123 }
119 124
120 //////////////////////////////////////////////////////////////////////////////// 125 ////////////////////////////////////////////////////////////////////////////////
121 126
122 bool GrDrawState::validateVertexAttribs() const { 127 bool GrDrawState::validateVertexAttribs() const {
123 // check consistency of effects and attributes 128 // check consistency of effects and attributes
124 GrSLType slTypes[kMaxVertexAttribCnt]; 129 GrSLType slTypes[kMaxVertexAttribCnt];
125 for (int i = 0; i < kMaxVertexAttribCnt; ++i) { 130 for (int i = 0; i < kMaxVertexAttribCnt; ++i) {
126 slTypes[i] = static_cast<GrSLType>(-1); 131 slTypes[i] = static_cast<GrSLType>(-1);
127 } 132 }
128 for (int s = 0; s < kNumStages; ++s) { 133 for (int s = 0; s < kNumStages; ++s) {
129 if (this->isStageEnabled(s)) { 134 if (this->isStageEnabled(s)) {
130 const GrEffectStage& stage = fStages[s]; 135 const GrEffectStage& stage = fStages[s];
131 const GrEffectRef* effect = stage.getEffect(); 136 const GrEffectRef* effect = stage.getEffect();
132 // make sure that any attribute indices have the correct binding typ e, that the attrib 137 // make sure that any attribute indices have the correct binding typ e, that the attrib
133 // type and effect's shader lang type are compatible, and that attri butes shared by 138 // type and effect's shader lang type are compatible, and that attri butes shared by
134 // multiple effects use the same shader lang type. 139 // multiple effects use the same shader lang type.
135 const int* attributeIndices = stage.getVertexAttribIndices(); 140 const int* attributeIndices = stage.getVertexAttribIndices();
136 int numAttributes = stage.getVertexAttribIndexCount(); 141 int numAttributes = stage.getVertexAttribIndexCount();
137 for (int i = 0; i < numAttributes; ++i) { 142 for (int i = 0; i < numAttributes; ++i) {
138 int attribIndex = attributeIndices[i]; 143 int attribIndex = attributeIndices[i];
139 if (attribIndex >= fCommon.fVertexAttribs.count() || 144 if (attribIndex >= fCommon.fVACount ||
140 kEffect_GrVertexAttribBinding != fCommon.fVertexAttribs[attr ibIndex].fBinding) { 145 kEffect_GrVertexAttribBinding != fCommon.fVAPtr[attribIndex] .fBinding) {
141 return false; 146 return false;
142 } 147 }
143 148
144 GrSLType effectSLType = (*effect)->vertexAttribType(i); 149 GrSLType effectSLType = (*effect)->vertexAttribType(i);
145 GrVertexAttribType attribType = fCommon.fVertexAttribs[attribInd ex].fType; 150 GrVertexAttribType attribType = fCommon.fVAPtr[attribIndex].fTyp e;
146 int slVecCount = GrSLTypeVectorCount(effectSLType); 151 int slVecCount = GrSLTypeVectorCount(effectSLType);
147 int attribVecCount = GrVertexAttribTypeVectorCount(attribType); 152 int attribVecCount = GrVertexAttribTypeVectorCount(attribType);
148 if (slVecCount != attribVecCount || 153 if (slVecCount != attribVecCount ||
149 (static_cast<GrSLType>(-1) != slTypes[attribIndex] && 154 (static_cast<GrSLType>(-1) != slTypes[attribIndex] &&
150 slTypes[attribIndex] != effectSLType)) { 155 slTypes[attribIndex] != effectSLType)) {
151 return false; 156 return false;
152 } 157 }
153 slTypes[attribIndex] = effectSLType; 158 slTypes[attribIndex] = effectSLType;
154 } 159 }
155 } 160 }
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 } 439 }
435 fRestoreMask |= (1 << s); 440 fRestoreMask |= (1 << s);
436 GrEffectStage* stage = drawState->fStages + s; 441 GrEffectStage* stage = drawState->fStages + s;
437 stage->saveCoordChange(&fSavedCoordChanges[s]); 442 stage->saveCoordChange(&fSavedCoordChanges[s]);
438 stage->localCoordChange(invVM); 443 stage->localCoordChange(invVM);
439 } 444 }
440 } 445 }
441 drawState->viewMatrix()->reset(); 446 drawState->viewMatrix()->reset();
442 return true; 447 return true;
443 } 448 }
OLDNEW
« no previous file with comments | « src/gpu/GrDrawState.h ('k') | src/gpu/GrDrawTarget.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698