| Index: src/gpu/GrDrawState.cpp
|
| diff --git a/src/gpu/GrDrawState.cpp b/src/gpu/GrDrawState.cpp
|
| index 0c2b1c3684e295d3bb321669375a9f3d414cb4ed..a6b3d68238cdc18a20f527c9f7a3dccd5b05b8c9 100644
|
| --- a/src/gpu/GrDrawState.cpp
|
| +++ b/src/gpu/GrDrawState.cpp
|
| @@ -75,7 +75,7 @@
|
| fFlagBits = that.fFlagBits;
|
| fVACount = that.fVACount;
|
| fVAPtr = that.fVAPtr;
|
| - fVAStride = that.fVAStride;
|
| + fVertexSize = that.fVertexSize;
|
| fStencilSettings = that.fStencilSettings;
|
| fCoverage = that.fCoverage;
|
| fDrawFace = that.fDrawFace;
|
| @@ -178,34 +178,35 @@
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|
| -static void validate_vertex_attribs(const GrVertexAttrib* attribs, int count, size_t stride) {
|
| +static size_t vertex_size(const GrVertexAttrib* attribs, int count) {
|
| // this works as long as we're 4 byte-aligned
|
| #ifdef SK_DEBUG
|
| uint32_t overlapCheck = 0;
|
| +#endif
|
| SkASSERT(count <= GrRODrawState::kMaxVertexAttribCnt);
|
| + size_t size = 0;
|
| for (int index = 0; index < count; ++index) {
|
| size_t attribSize = GrVertexAttribTypeSize(attribs[index].fType);
|
| - size_t attribOffset = attribs[index].fOffset;
|
| - SkASSERT(attribOffset + attribSize <= stride);
|
| + size += attribSize;
|
| +#ifdef SK_DEBUG
|
| size_t dwordCount = attribSize >> 2;
|
| uint32_t mask = (1 << dwordCount)-1;
|
| - size_t offsetShift = attribOffset >> 2;
|
| + size_t offsetShift = attribs[index].fOffset >> 2;
|
| SkASSERT(!(overlapCheck & (mask << offsetShift)));
|
| overlapCheck |= (mask << offsetShift);
|
| - }
|
| #endif
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -void GrDrawState::internalSetVertexAttribs(const GrVertexAttrib* attribs, int count,
|
| - size_t stride) {
|
| + }
|
| + return size;
|
| +}
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +
|
| +void GrDrawState::setVertexAttribs(const GrVertexAttrib* attribs, int count) {
|
| SkASSERT(count <= kMaxVertexAttribCnt);
|
|
|
| fVAPtr = attribs;
|
| fVACount = count;
|
| - fVAStride = stride;
|
| - validate_vertex_attribs(fVAPtr, fVACount, fVAStride);
|
| + fVertexSize = vertex_size(fVAPtr, fVACount);
|
|
|
| // Set all the indices to -1
|
| memset(fFixedFunctionVertexAttribIndices,
|
| @@ -243,7 +244,7 @@
|
|
|
| fVAPtr = &kPositionAttrib;
|
| fVACount = 1;
|
| - fVAStride = GrVertexAttribTypeSize(kVec2f_GrVertexAttribType);
|
| + fVertexSize = GrVertexAttribTypeSize(kVec2f_GrVertexAttribType);
|
|
|
| // set all the fixed function indices to -1 except position.
|
| memset(fFixedFunctionVertexAttribIndices,
|
| @@ -278,7 +279,6 @@
|
| fDrawState = drawState;
|
| fVAPtr = drawState->fVAPtr;
|
| fVACount = drawState->fVACount;
|
| - fVAStride = drawState->fVAStride;
|
| fDrawState->setDefaultVertexAttribs();
|
| }
|
|
|
|
|