diff --git a/gyp/gpu.gypi b/gyp/gpu.gypi
index 9afddc4..c0a4a7b 100644
--- a/gyp/gpu.gypi
+++ b/gyp/gpu.gypi
@@ -63,6 +63,7 @@
       '<(skia_src_path)/gpu/GrCustomStage.cpp',
       '<(skia_src_path)/gpu/GrDefaultPathRenderer.cpp',
       '<(skia_src_path)/gpu/GrDefaultPathRenderer.h',
+      '<(skia_src_path)/gpu/GrDrawState.cpp',
       '<(skia_src_path)/gpu/GrDrawState.h',
       '<(skia_src_path)/gpu/GrDrawTarget.cpp',
       '<(skia_src_path)/gpu/GrDrawTarget.h',
diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h
index 71665cc..b3c0119 100644
--- a/include/gpu/GrContext.h
+++ b/include/gpu/GrContext.h
@@ -841,8 +841,6 @@
 
     void flushDrawBuffer();
 
-    void setPaint(const GrPaint& paint);
-
     /// Sets the paint and returns the target to draw into. The paint can be NULL in which case the
     /// draw state is left unmodified.
     GrDrawTarget* prepareToDraw(const GrPaint*, BufferedDraw);
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index b038a9d..b113ca3 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -1588,59 +1588,20 @@
 }
 ////////////////////////////////////////////////////////////////////////////////
 
-void GrContext::setPaint(const GrPaint& paint) {
-    GrAssert(fDrawState->stagesDisabled());
-
-    for (int i = 0; i < GrPaint::kMaxTextures; ++i) {
-        int s = i + GrPaint::kFirstTextureStage;
-        if (paint.isTextureStageEnabled(i)) {
-            *fDrawState->sampler(s) = paint.getTextureSampler(i);
-        }
-    }
-
-    fDrawState->setFirstCoverageStage(GrPaint::kFirstMaskStage);
-
-    for (int i = 0; i < GrPaint::kMaxMasks; ++i) {
-        int s = i + GrPaint::kFirstMaskStage;
-        if (paint.isMaskStageEnabled(i)) {
-            *fDrawState->sampler(s) = paint.getMaskSampler(i);
-        }
-    }
-
-    // disable all stages not accessible via the paint
-    for (int s = GrPaint::kTotalStages; s < GrDrawState::kNumStages; ++s) {
-        fDrawState->disableStage(s);
-    }
-
-    fDrawState->setColor(paint.fColor);
-
-    fDrawState->setState(GrDrawState::kDither_StateBit, paint.fDither);
-    fDrawState->setState(GrDrawState::kHWAntialias_StateBit, paint.fAntiAlias);
-
-    if (paint.fColorMatrixEnabled) {
-        fDrawState->enableState(GrDrawState::kColorMatrix_StateBit);
-        fDrawState->setColorMatrix(paint.fColorMatrix);
-    } else {
-        fDrawState->disableState(GrDrawState::kColorMatrix_StateBit);
-    }
-    fDrawState->setBlendFunc(paint.fSrcBlendCoeff, paint.fDstBlendCoeff);
-    fDrawState->setColorFilter(paint.fColorFilterColor, paint.fColorFilterXfermode);
-    fDrawState->setCoverage(paint.fCoverage);
-#if GR_DEBUG_PARTIAL_COVERAGE_CHECK
-    if ((paint.hasMask() || 0xff != paint.fCoverage) &&
-        !fGpu->canApplyCoverage()) {
-        GrPrintf("Partial pixel coverage will be incorrectly blended.\n");
-    }
-#endif
-}
-
 GrDrawTarget* GrContext::prepareToDraw(const GrPaint* paint, BufferedDraw buffered) {
     if (kNo_BufferedDraw == buffered && kYes_BufferedDraw == fLastDrawWasBuffered) {
         this->flushDrawBuffer();
         fLastDrawWasBuffered = kNo_BufferedDraw;
     }
     if (NULL != paint) {
-        this->setPaint(*paint);
+        GrAssert(fDrawState->stagesDisabled());
+        fDrawState->setFromPaint(*paint);
+#if GR_DEBUG_PARTIAL_COVERAGE_CHECK
+        if ((paint->hasMask() || 0xff != paint->fCoverage) &&
+            !fGpu->canApplyCoverage()) {
+            GrPrintf("Partial pixel coverage will be incorrectly blended.\n");
+        }
+#endif
     }
     if (kYes_BufferedDraw == buffered) {
         fDrawBuffer->setClip(fGpu->getClip());
diff --git a/src/gpu/GrDrawState.cpp b/src/gpu/GrDrawState.cpp
new file mode 100644
index 0000000..2d2dc1a
--- /dev/null
+++ b/src/gpu/GrDrawState.cpp
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2012 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "GrDrawState.h"
+
+#include "GrPaint.h"
+
+void GrDrawState::setFromPaint(const GrPaint& paint) {
+    for (int i = 0; i < GrPaint::kMaxTextures; ++i) {
+        int s = i + GrPaint::kFirstTextureStage;
+        if (paint.isTextureStageEnabled(i)) {
+            *this->sampler(s) = paint.getTextureSampler(i);
+        }
+    }
+
+    this->setFirstCoverageStage(GrPaint::kFirstMaskStage);
+
+    for (int i = 0; i < GrPaint::kMaxMasks; ++i) {
+        int s = i + GrPaint::kFirstMaskStage;
+        if (paint.isMaskStageEnabled(i)) {
+            *this->sampler(s) = paint.getMaskSampler(i);
+        }
+    }
+
+    // disable all stages not accessible via the paint
+    for (int s = GrPaint::kTotalStages; s < GrDrawState::kNumStages; ++s) {
+        this->disableStage(s);
+    }
+
+    this->setColor(paint.fColor);
+
+    this->setState(GrDrawState::kDither_StateBit, paint.fDither);
+    this->setState(GrDrawState::kHWAntialias_StateBit, paint.fAntiAlias);
+
+    if (paint.fColorMatrixEnabled) {
+        this->enableState(GrDrawState::kColorMatrix_StateBit);
+        this->setColorMatrix(paint.fColorMatrix);
+    } else {
+        this->disableState(GrDrawState::kColorMatrix_StateBit);
+    }
+    this->setBlendFunc(paint.fSrcBlendCoeff, paint.fDstBlendCoeff);
+    this->setColorFilter(paint.fColorFilterColor, paint.fColorFilterXfermode);
+    this->setCoverage(paint.fCoverage);
+}
diff --git a/src/gpu/GrDrawState.h b/src/gpu/GrDrawState.h
index 05da3df..ca3b2c1 100644
--- a/src/gpu/GrDrawState.h
+++ b/src/gpu/GrDrawState.h
@@ -20,6 +20,7 @@
 
 #include "SkXfermode.h"
 
+class GrPaint;
 
 class GrDrawState : public GrRefCnt {
 public:
@@ -89,7 +90,15 @@
         fColorFilterMode = SkXfermode::kDst_Mode;
         fColorFilterColor = 0x0;
         fDrawFace = kBoth_DrawFace;
-     }
+    }
+
+    /**
+     * Initializes the GrDrawState based on a GrPaint. Note that GrDrawState
+     * encompases more than GrPaint. Aspects of GrDrawState that have no
+     * GrPaint equivalents are not modified. GrPaint has fewer stages than
+     * GrDrawState. The extra GrDrawState stages are disabled.
+     */
+    void setFromPaint(const GrPaint& paint);
 
     ///////////////////////////////////////////////////////////////////////////
     /// @name Color
