aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrDrawState.h
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-03-26 15:24:27 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-03-26 15:24:27 +0000
commit8fe84b53a64b5d92f3aabdd8e7fc7b2ee15c0a75 (patch)
treea9d6c08b4dd8e9bd00308ccf4dd7d0fcec549c21 /src/gpu/GrDrawState.h
parent22f42b71fc7f120e995b6e90e9fca8584438192c (diff)
Add SkMatrix::cheapEqualTo, use in Gr code
Review URL: http://codereview.appspot.com/5865057/ git-svn-id: http://skia.googlecode.com/svn/trunk@3488 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/gpu/GrDrawState.h')
-rw-r--r--src/gpu/GrDrawState.h19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/gpu/GrDrawState.h b/src/gpu/GrDrawState.h
index c0ff42fc69..92ee2cbaad 100644
--- a/src/gpu/GrDrawState.h
+++ b/src/gpu/GrDrawState.h
@@ -85,8 +85,8 @@ struct GrDrawState {
// are tightly packed
GrAssert(kMemsetSize + sizeof(fColor) + sizeof(fCoverage) +
sizeof(fFirstCoverageStage) + sizeof(fColorFilterMode) +
- sizeof(fSrcBlend) + sizeof(fDstBlend) + sizeof(GrMatrix) ==
- reinterpret_cast<uintptr_t>(&fEdgeAANumEdges) -
+ sizeof(fSrcBlend) + sizeof(fDstBlend) ==
+ reinterpret_cast<uintptr_t>(&fViewMatrix) -
reinterpret_cast<uintptr_t>(this));
fEdgeAANumEdges = 0;
@@ -740,7 +740,13 @@ struct GrDrawState {
// Most stages are usually not used, so conditionals here
// reduce the expected number of bytes touched by 50%.
bool operator ==(const GrDrawState& s) const {
- if (memcmp(this, &s, this->leadingBytes())) return false;
+ if (memcmp(this, &s, this->leadingBytes())) {
+ return false;
+ }
+
+ if (!s.fViewMatrix.cheapEqualTo(fViewMatrix)) {
+ return false;
+ }
for (int i = 0; i < kNumStages; i++) {
if (fTextures[i] &&
@@ -766,6 +772,8 @@ struct GrDrawState {
GrDrawState& operator =(const GrDrawState& s) {
memcpy(this, &s, this->leadingBytes());
+ fViewMatrix = s.fViewMatrix;
+
for (int i = 0; i < kNumStages; i++) {
if (s.fTextures[i]) {
memcpy(&this->fSamplerStates[i], &s.fSamplerStates[i],
@@ -799,9 +807,10 @@ private:
SkXfermode::Mode fColorFilterMode;
GrBlendCoeff fSrcBlend;
GrBlendCoeff fDstBlend;
- GrMatrix fViewMatrix;
// @}
+ GrMatrix fViewMatrix;
+
// @{ Data for GrTesselatedPathRenderer
// TODO: currently ignored in copying & comparison for performance.
// Must be considered if GrTesselatedPathRenderer is being used.
@@ -820,7 +829,7 @@ private:
// TODO: ignores GrTesselatedPathRenderer data structures. We don't
// have a compile-time flag that lets us know if it's being used, and
// checking at runtime seems to cost 5% performance.
- return (size_t) ((unsigned char*)&fEdgeAANumEdges -
+ return (size_t) ((unsigned char*)&fViewMatrix -
(unsigned char*)&fBlendConstant);
}