add gpu to the default makefile
move skia-gpu files into skia/src/gpu



git-svn-id: http://skia.googlecode.com/svn/trunk@653 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/Makefile b/Makefile
index 468ff41..e8d6a9b 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,8 @@
 # setup our defaults
 CC := gcc
 GPP := g++
-C_INCLUDES := -Iinclude/config -Iinclude/core -Iinclude/effects -Iinclude/images -Iinclude/utils
+C_INCLUDES := -Iinclude/config -Iinclude/core -Iinclude/effects -Iinclude/images -Iinclude/gpu -Iinclude/utils -Igpu/include
+
 CFLAGS := -Wall -O2 
 CFLAGS_SSE2 = $(CFLAGS) -msse2
 LINKER_OPTS := -lpthread -lz
@@ -53,6 +54,14 @@
 include src/utils/utils_files.mk
 SRC_LIST += $(addprefix src/utils/, $(SOURCE))
 
+# GPU files
+include gpu/src/gr_files.mk
+SRC_LIST += $(addprefix gpu/src/, $(SOURCE))
+
+# GPU support files
+include src/gpu/skgr_files.mk
+SRC_LIST += $(addprefix src/gpu/, $(SOURCE))
+
 # pdf backend files
 ifeq ($(SKIA_PDF_SUPPORT),true)
 	C_INCLUDES += -Iinclude/pdf
@@ -77,6 +86,7 @@
 	C_INCLUDES += -Iinclude/utils/mac
 	SRC_LIST += src/ports/SkImageDecoder_CG.cpp
 	SRC_LIST += src/utils/mac/SkCreateCGImageRef.cpp
+	SRC_LIST += src/utils/mac/SkEGLContext_mac.cpp
 	SRC_LIST += src/ports/SkFontHost_mac_coretext.cpp
 else
 	LINKER_OPTS += -lpng -lfreetype
@@ -203,7 +213,7 @@
 
 gm: $(GM_OBJS) out/libskia.a
 	@echo "linking gm..."
-	$(HIDE)$(GPP) $(GM_OBJS) out/libskia.a -o out/gm/gm $(LINKER_OPTS)
+	$(HIDE)$(GPP) $(GM_OBJS) out/libskia.a -o out/gm/gm -framework OpenGL -framework AGL $(LINKER_OPTS)
 
 SAMPLEPDF_SRCS := samplepdf.cpp
 
diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
index c56edbd..5c9dcab 100644
--- a/gm/gmmain.cpp
+++ b/gm/gmmain.cpp
@@ -6,6 +6,11 @@
 #include "SkStream.h"
 #include "SkRefCnt.h"
 
+#include "GrContext.h"
+#include "SkGpuCanvas.h"
+#include "SkEGLContext.h"
+#include "SkDevice.h"
+
 #ifdef SK_SUPPORT_PDF
 	#include "SkPDFDevice.h"
 	#include "SkPDFDocument.h"
@@ -210,7 +215,12 @@
             }
 		}
 	}
-    
+
+    // setup a GL context for drawing offscreen
+    SkEGLContext eglContext;
+    eglContext.init(1024, 1024);
+    GrContext* context = GrContext::CreateGLShaderContext();
+
     Iter iter;
     GM* gm;
 
@@ -233,7 +243,12 @@
 			SkCanvas canvas(bitmap);
 
 			gm->draw(&canvas);
-
+            {
+                SkGpuCanvas gc(context);
+                gc.setDevice(gc.createDevice(bitmap.config(), bitmap.width(), bitmap.height(),
+                                             bitmap.isOpaque(), false))->unref(); 
+                gm->draw(&gc);
+            }
             SkString name = make_name(gm->shortName(), gRec[i].fName);
 
             if (writePath) {
diff --git a/gpu/include/GrContext.h b/gpu/include/GrContext.h
index f9d5ed5..68f8f7e 100644
--- a/gpu/include/GrContext.h
+++ b/gpu/include/GrContext.h
@@ -1,19 +1,19 @@
-/*
-    Copyright 2010 Google Inc.
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
- */
-
+/*

+    Copyright 2010 Google Inc.

+

+    Licensed under the Apache License, Version 2.0 (the "License");

+    you may not use this file except in compliance with the License.

+    You may obtain a copy of the License at

+

+         http://www.apache.org/licenses/LICENSE-2.0

+

+    Unless required by applicable law or agreed to in writing, software

+    distributed under the License is distributed on an "AS IS" BASIS,

+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+    See the License for the specific language governing permissions and

+    limitations under the License.

+ */

+

 #ifndef GrContext_DEFINED

 #define GrContext_DEFINED

 

@@ -37,6 +37,11 @@
     static GrContext* Create(GrGpu::Engine engine,

                              GrGpu::Platform3DContext context3D);

 

+    /**

+     *  Helper to create a opengl-shader based context

+     */

+    static GrContext* CreateGLShaderContext();

+    

     virtual ~GrContext();

 

     /**

@@ -319,4 +324,4 @@
 };

 

 #endif

-
+

diff --git a/gpu/src/GrContext.cpp b/gpu/src/GrContext.cpp
index 6e94ef7..942afa3 100644
--- a/gpu/src/GrContext.cpp
+++ b/gpu/src/GrContext.cpp
@@ -1,19 +1,19 @@
-/*
-    Copyright 2010 Google Inc.
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
- */
-
+/*

+    Copyright 2010 Google Inc.

+

+    Licensed under the Apache License, Version 2.0 (the "License");

+    you may not use this file except in compliance with the License.

+    You may obtain a copy of the License at

+

+         http://www.apache.org/licenses/LICENSE-2.0

+

+    Unless required by applicable law or agreed to in writing, software

+    distributed under the License is distributed on an "AS IS" BASIS,

+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+    See the License for the specific language governing permissions and

+    limitations under the License.

+ */

+

 

 #include "GrContext.h"

 #include "GrTextureCache.h"

@@ -49,6 +49,10 @@
     return ctx;

 }

 

+GrContext* GrContext::CreateGLShaderContext() {

+    return GrContext::Create(GrGpu::kOpenGL_Shaders_Engine, NULL);

+}

+

 GrContext::~GrContext() {

     fGpu->unref();

     delete fTextureCache;

@@ -1037,4 +1041,4 @@
 

 

 

-
+

diff --git a/gpu/include/SkGpuCanvas.h b/include/gpu/SkGpuCanvas.h
similarity index 100%
rename from gpu/include/SkGpuCanvas.h
rename to include/gpu/SkGpuCanvas.h
diff --git a/gpu/src/skia/SkGpuDevice.h b/include/gpu/SkGpuDevice.h
similarity index 100%
rename from gpu/src/skia/SkGpuDevice.h
rename to include/gpu/SkGpuDevice.h
diff --git a/gpu/include/SkGr.h b/include/gpu/SkGr.h
similarity index 100%
rename from gpu/include/SkGr.h
rename to include/gpu/SkGr.h
diff --git a/gpu/include/SkGrTexturePixelRef.h b/include/gpu/SkGrTexturePixelRef.h
similarity index 100%
rename from gpu/include/SkGrTexturePixelRef.h
rename to include/gpu/SkGrTexturePixelRef.h
diff --git a/include/utils/SkEGLContext.h b/include/utils/SkEGLContext.h
index 98eeec4..4b17be1 100644
--- a/include/utils/SkEGLContext.h
+++ b/include/utils/SkEGLContext.h
@@ -1,6 +1,11 @@
+#ifndef SkEGLContext_DEFINED
+#define SkEGLContext_DEFINED
 
-#include <AGL/agl.h>
+#include "SkTypes.h"
 
+/**
+ *  Create an offscreen opengl context
+ */
 class SkEGLContext {
 public:
 	SkEGLContext();
@@ -9,61 +14,7 @@
 	bool init(int width, int height);
 
 private:
-	AGLContext	fAGLContext;
+	void* fContext;
 };
 
-SkEGLContext::SkEGLContext() : fAGLContext(NULL) {
-}
-
-SkEGLContext::~SkEGLContext() {
-	if (fAGLContext) {
-		aglDestroyContext(fAGLContext);
-	}
-}
-
-bool SkEGLContext::init(int width, int height) {
-	GLint major, minor;
-	AGLContext ctx;
-
-	aglGetVersion(&major, &minor);
-	SkDebugf("---- agl version %d %d\n", major, minor);
-
-	const GLint pixelAttrs[] = {
-		AGL_RGBA,
-		AGL_STENCIL_SIZE, 8,
-/*
-		AGL_SAMPLE_BUFFERS_ARB, 1,
-		AGL_MULTISAMPLE,
-		AGL_SAMPLES_ARB, 2,
-*/
-		AGL_ACCELERATED,
-		AGL_NONE
-	};
-	AGLPixelFormat format = aglChoosePixelFormat(NULL, 0, pixelAttrs);
-	//AGLPixelFormat format = aglCreatePixelFormat(pixelAttrs);
-	SkDebugf("----- agl format %p\n", format);
-	ctx = aglCreateContext(format, NULL);
-	SkDebugf("----- agl context %p\n", ctx);
-	aglDestroyPixelFormat(format);
-
-	SkDebugf("---- sizeof aglcontext %d\n", sizeof(AGLContext));
-/*
-	static const GLint interval = 1;
-	aglSetInteger(ctx, AGL_SWAP_INTERVAL, &interval);
-*/
-
-	aglSetCurrentContext(ctx);
-	fAGLContext = ctx;
-
-	// Now create our FBO render target
-
-	GLuint fboID;
-	GLuint cbID;
-	glGenFramebuffersEXT(1, &fboID);
-	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboID);
-	glGenRenderbuffers(1, &cbID);
-	glBindRenderbuffer(GL_RENDERBUFFER, cbID);
-	glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, width, height);
-	glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, cbID);
-	return true;
-}
+#endif
diff --git a/gpu/src/GrPrintf_skia.cpp b/src/gpu/GrPrintf_skia.cpp
similarity index 100%
rename from gpu/src/GrPrintf_skia.cpp
rename to src/gpu/GrPrintf_skia.cpp
diff --git a/gpu/src/skia/SkGpuCanvas.cpp b/src/gpu/SkGpuCanvas.cpp
similarity index 100%
rename from gpu/src/skia/SkGpuCanvas.cpp
rename to src/gpu/SkGpuCanvas.cpp
diff --git a/gpu/src/skia/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
similarity index 100%
rename from gpu/src/skia/SkGpuDevice.cpp
rename to src/gpu/SkGpuDevice.cpp
diff --git a/gpu/src/skia/SkGr.cpp b/src/gpu/SkGr.cpp
similarity index 100%
rename from gpu/src/skia/SkGr.cpp
rename to src/gpu/SkGr.cpp
diff --git a/gpu/src/skia/SkGrFontScaler.cpp b/src/gpu/SkGrFontScaler.cpp
similarity index 100%
rename from gpu/src/skia/SkGrFontScaler.cpp
rename to src/gpu/SkGrFontScaler.cpp
diff --git a/gpu/src/skia/SkGrTexturePixelRef.cpp b/src/gpu/SkGrTexturePixelRef.cpp
similarity index 100%
rename from gpu/src/skia/SkGrTexturePixelRef.cpp
rename to src/gpu/SkGrTexturePixelRef.cpp
diff --git a/gpu/src/skia/skgr_files.mk b/src/gpu/skgr_files.mk
similarity index 68%
rename from gpu/src/skia/skgr_files.mk
rename to src/gpu/skgr_files.mk
index 41896c0..7623fca 100644
--- a/gpu/src/skia/skgr_files.mk
+++ b/src/gpu/skgr_files.mk
@@ -3,5 +3,6 @@
     SkGpuDevice.cpp \
     SkGr.cpp \
     SkGrTexturePixelRef.cpp \
-    SkGrFontScaler.cpp
+    SkGrFontScaler.cpp \
+    GrPrintf_skia.cpp
 
diff --git a/src/utils/mac/SkEGLContext_mac.cpp b/src/utils/mac/SkEGLContext_mac.cpp
new file mode 100644
index 0000000..13bb592
--- /dev/null
+++ b/src/utils/mac/SkEGLContext_mac.cpp
@@ -0,0 +1,65 @@
+#include "SkEGLContext.h"
+#include <AGL/agl.h>
+
+SkEGLContext::SkEGLContext() : fContext(NULL) {
+}
+
+SkEGLContext::~SkEGLContext() {
+	if (fContext) {
+		aglDestroyContext((AGLContext)fContext);
+	}
+}
+
+bool SkEGLContext::init(int width, int height) {
+	GLint major, minor;
+	AGLContext ctx;
+
+	aglGetVersion(&major, &minor);
+	SkDebugf("---- agl version %d %d\n", major, minor);
+
+	const GLint pixelAttrs[] = {
+		AGL_RGBA,
+		AGL_STENCIL_SIZE, 8,
+/*
+		AGL_SAMPLE_BUFFERS_ARB, 1,
+		AGL_MULTISAMPLE,
+		AGL_SAMPLES_ARB, 2,
+*/
+		AGL_ACCELERATED,
+		AGL_NONE
+	};
+	AGLPixelFormat format = aglChoosePixelFormat(NULL, 0, pixelAttrs);
+	//AGLPixelFormat format = aglCreatePixelFormat(pixelAttrs);
+	SkDebugf("----- agl format %p\n", format);
+	ctx = aglCreateContext(format, NULL);
+	SkDebugf("----- agl context %p\n", ctx);
+	aglDestroyPixelFormat(format);
+
+	SkDebugf("---- sizeof aglcontext %d\n", sizeof(AGLContext));
+/*
+	static const GLint interval = 1;
+	aglSetInteger(ctx, AGL_SWAP_INTERVAL, &interval);
+*/
+
+	aglSetCurrentContext(ctx);
+	fContext = (void*)ctx;
+
+	// Now create our FBO render target
+
+	GLuint fboID;
+	GLuint cbID;
+    GLuint dsID;
+	glGenFramebuffersEXT(1, &fboID);
+	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboID);
+	glGenRenderbuffers(1, &cbID);
+	glBindRenderbuffer(GL_RENDERBUFFER, cbID);
+	glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, width, height);
+	glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, cbID);
+    glGenRenderbuffers(1, &dsID);
+    glBindRenderbuffer(GL_RENDERBUFFER, dsID);
+    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_STENCIL, width, height);
+    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, dsID);
+    
+    GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
+    return GL_FRAMEBUFFER_COMPLETE == status;
+}
diff --git a/xcode/gpu/gpu.xcodeproj/project.pbxproj b/xcode/gpu/gpu.xcodeproj/project.pbxproj
index 08299d7..f7f672a 100644
--- a/xcode/gpu/gpu.xcodeproj/project.pbxproj
+++ b/xcode/gpu/gpu.xcodeproj/project.pbxproj
@@ -30,7 +30,6 @@
 		00115E1E12C1167A008296FE /* GrMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00115DEE12C1167A008296FE /* GrMatrix.cpp */; };
 		00115E1F12C1167A008296FE /* GrMemory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00115DEF12C1167A008296FE /* GrMemory.cpp */; };
 		00115E2012C1167A008296FE /* GrPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00115DF012C1167A008296FE /* GrPath.cpp */; };
-		00115E2112C1167A008296FE /* GrPrintf_printf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00115DF112C1167A008296FE /* GrPrintf_printf.cpp */; };
 		00115E2412C1167A008296FE /* GrRectanizer_fifo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00115DF412C1167A008296FE /* GrRectanizer_fifo.cpp */; };
 		00115E2512C1167A008296FE /* GrRectanizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00115DF512C1167A008296FE /* GrRectanizer.cpp */; };
 		00115E2612C1167A008296FE /* GrTextContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00115DF612C1167A008296FE /* GrTextContext.cpp */; };
@@ -119,7 +118,6 @@
 		00115DEE12C1167A008296FE /* GrMatrix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GrMatrix.cpp; path = ../../gpu/src/GrMatrix.cpp; sourceTree = SOURCE_ROOT; };
 		00115DEF12C1167A008296FE /* GrMemory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GrMemory.cpp; path = ../../gpu/src/GrMemory.cpp; sourceTree = SOURCE_ROOT; };
 		00115DF012C1167A008296FE /* GrPath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GrPath.cpp; path = ../../gpu/src/GrPath.cpp; sourceTree = SOURCE_ROOT; };
-		00115DF112C1167A008296FE /* GrPrintf_printf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GrPrintf_printf.cpp; path = ../../gpu/src/GrPrintf_printf.cpp; sourceTree = SOURCE_ROOT; };
 		00115DF412C1167A008296FE /* GrRectanizer_fifo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GrRectanizer_fifo.cpp; path = ../../gpu/src/GrRectanizer_fifo.cpp; sourceTree = SOURCE_ROOT; };
 		00115DF512C1167A008296FE /* GrRectanizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GrRectanizer.cpp; path = ../../gpu/src/GrRectanizer.cpp; sourceTree = SOURCE_ROOT; };
 		00115DF612C1167A008296FE /* GrTextContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GrTextContext.cpp; path = ../../gpu/src/GrTextContext.cpp; sourceTree = SOURCE_ROOT; };
@@ -295,7 +293,6 @@
 				00115DEE12C1167A008296FE /* GrMatrix.cpp */,
 				00115DEF12C1167A008296FE /* GrMemory.cpp */,
 				00115DF012C1167A008296FE /* GrPath.cpp */,
-				00115DF112C1167A008296FE /* GrPrintf_printf.cpp */,
 				00115DF412C1167A008296FE /* GrRectanizer_fifo.cpp */,
 				00115DF512C1167A008296FE /* GrRectanizer.cpp */,
 				00115DF612C1167A008296FE /* GrTextContext.cpp */,
@@ -460,7 +457,6 @@
 				00115E1E12C1167A008296FE /* GrMatrix.cpp in Sources */,
 				00115E1F12C1167A008296FE /* GrMemory.cpp in Sources */,
 				00115E2012C1167A008296FE /* GrPath.cpp in Sources */,
-				00115E2112C1167A008296FE /* GrPrintf_printf.cpp in Sources */,
 				00115E2412C1167A008296FE /* GrRectanizer_fifo.cpp in Sources */,
 				00115E2512C1167A008296FE /* GrRectanizer.cpp in Sources */,
 				00115E2612C1167A008296FE /* GrTextContext.cpp in Sources */,
diff --git a/xcode/sampleapp/SampleApp.xcodeproj/project.pbxproj b/xcode/sampleapp/SampleApp.xcodeproj/project.pbxproj
index 28d1fbf..b21d969 100644
--- a/xcode/sampleapp/SampleApp.xcodeproj/project.pbxproj
+++ b/xcode/sampleapp/SampleApp.xcodeproj/project.pbxproj
@@ -26,11 +26,7 @@
 		0001FB87110E35E500C1D647 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0001FB86110E35E500C1D647 /* AGL.framework */; };
 		0001FB8A110E35FA00C1D647 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0001FB89110E35FA00C1D647 /* OpenGL.framework */; };
 		00115EC912C11783008296FE /* libgpu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00115EC812C11771008296FE /* libgpu.a */; };
-		00115ED312C117BD008296FE /* SkGpuCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00115ECD12C117BD008296FE /* SkGpuCanvas.cpp */; };
-		00115ED412C117BD008296FE /* SkGpuDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00115ECE12C117BD008296FE /* SkGpuDevice.cpp */; };
-		00115ED512C117BD008296FE /* SkGr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00115ED012C117BD008296FE /* SkGr.cpp */; };
-		00115ED612C117BD008296FE /* SkGrFontScaler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00115ED112C117BD008296FE /* SkGrFontScaler.cpp */; };
-		00115ED712C117BD008296FE /* SkGrTexturePixelRef.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00115ED212C117BD008296FE /* SkGrTexturePixelRef.cpp */; };
+		0011612F12C2AAC6008296FE /* SampleText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 000630AC10F4E8EF00BC2C23 /* SampleText.cpp */; };
 		001B871E1042184D00C84ED4 /* Forth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 001B871D1042184D00C84ED4 /* Forth.cpp */; };
 		0021F3A21120B29C0062682F /* SkStaticTextView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0021F3A11120B29C0062682F /* SkStaticTextView.cpp */; };
 		0021F3D31120B61F0062682F /* SampleUnitMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00995E1510A079D80054AD6D /* SampleUnitMapper.cpp */; };
@@ -78,6 +74,12 @@
 		009887F1106142FC0020D19B /* SampleNinePatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0041CE310F00A12400695E8C /* SampleNinePatch.cpp */; };
 		00995E0E10A078E30054AD6D /* SkCubicInterval.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00995E0D10A078E30054AD6D /* SkCubicInterval.cpp */; };
 		009CC9190F65918A002185BE /* SampleFontScalerTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 009CC9180F65918A002185BE /* SampleFontScalerTest.cpp */; };
+		009F9C0912C39A9C00C7FD4A /* GrPrintf_skia.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 009F9C0312C39A9C00C7FD4A /* GrPrintf_skia.cpp */; };
+		009F9C0A12C39A9C00C7FD4A /* SkGpuCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 009F9C0412C39A9C00C7FD4A /* SkGpuCanvas.cpp */; };
+		009F9C0B12C39A9C00C7FD4A /* SkGpuDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 009F9C0512C39A9C00C7FD4A /* SkGpuDevice.cpp */; };
+		009F9C0C12C39A9C00C7FD4A /* SkGr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 009F9C0612C39A9C00C7FD4A /* SkGr.cpp */; };
+		009F9C0D12C39A9C00C7FD4A /* SkGrFontScaler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 009F9C0712C39A9C00C7FD4A /* SkGrFontScaler.cpp */; };
+		009F9C0E12C39A9C00C7FD4A /* SkGrTexturePixelRef.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 009F9C0812C39A9C00C7FD4A /* SkGrTexturePixelRef.cpp */; };
 		00A728270FD43D0400D5051F /* SampleMovie.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2762F6760FCCCB01002BD8B4 /* SampleMovie.cpp */; };
 		00A7282F0FD43D3700D5051F /* SkMovie.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00A7282D0FD43D3700D5051F /* SkMovie.cpp */; };
 		00A7295D0FD8397600D5051F /* SampleAll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2762F6740FCCCB01002BD8B4 /* SampleAll.cpp */; };
@@ -135,7 +137,6 @@
 		27CAAB7E119B303E0017B155 /* SkSVGText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27CAAB60119B303E0017B155 /* SkSVGText.cpp */; };
 		27CAAB7F119B303E0017B155 /* SkSVGUse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27CAAB62119B303E0017B155 /* SkSVGUse.cpp */; };
 		27CAAB96119B321A0017B155 /* SkXMLWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27CAAB95119B321A0017B155 /* SkXMLWriter.cpp */; };
-		27D0F3C311BD2012001B8EBE /* SampleText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 000630AC10F4E8EF00BC2C23 /* SampleText.cpp */; };
 		27E79E3512BC13C700BC0E57 /* SkPDFCatalog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27E79E2B12BC13C700BC0E57 /* SkPDFCatalog.cpp */; };
 		27E79E3612BC13C700BC0E57 /* SkPDFDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27E79E2C12BC13C700BC0E57 /* SkPDFDevice.cpp */; };
 		27E79E3712BC13C700BC0E57 /* SkPDFDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27E79E2D12BC13C700BC0E57 /* SkPDFDocument.cpp */; };
@@ -248,12 +249,6 @@
 		000630AC10F4E8EF00BC2C23 /* SampleText.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SampleText.cpp; path = ../../samplecode/SampleText.cpp; sourceTree = SOURCE_ROOT; };
 		0009E21F1057E96800B0DE6F /* SampleStrokePath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SampleStrokePath.cpp; path = ../../samplecode/SampleStrokePath.cpp; sourceTree = SOURCE_ROOT; };
 		00115EC012C11771008296FE /* gpu.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = gpu.xcodeproj; path = ../gpu/gpu.xcodeproj; sourceTree = SOURCE_ROOT; };
-		00115ECD12C117BD008296FE /* SkGpuCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkGpuCanvas.cpp; path = ../../gpu/src/skia/SkGpuCanvas.cpp; sourceTree = SOURCE_ROOT; };
-		00115ECE12C117BD008296FE /* SkGpuDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkGpuDevice.cpp; path = ../../gpu/src/skia/SkGpuDevice.cpp; sourceTree = SOURCE_ROOT; };
-		00115ECF12C117BD008296FE /* SkGpuDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkGpuDevice.h; path = ../../gpu/src/skia/SkGpuDevice.h; sourceTree = SOURCE_ROOT; };
-		00115ED012C117BD008296FE /* SkGr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkGr.cpp; path = ../../gpu/src/skia/SkGr.cpp; sourceTree = SOURCE_ROOT; };
-		00115ED112C117BD008296FE /* SkGrFontScaler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkGrFontScaler.cpp; path = ../../gpu/src/skia/SkGrFontScaler.cpp; sourceTree = SOURCE_ROOT; };
-		00115ED212C117BD008296FE /* SkGrTexturePixelRef.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkGrTexturePixelRef.cpp; path = ../../gpu/src/skia/SkGrTexturePixelRef.cpp; sourceTree = SOURCE_ROOT; };
 		001B871D1042184D00C84ED4 /* Forth.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Forth.cpp; path = ../../forth/Forth.cpp; sourceTree = SOURCE_ROOT; };
 		0021F3A11120B29C0062682F /* SkStaticTextView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkStaticTextView.cpp; path = ../../src/views/SkStaticTextView.cpp; sourceTree = SOURCE_ROOT; };
 		00281C661083CF5100BCCB06 /* SkTextBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkTextBox.cpp; path = ../../src/views/SkTextBox.cpp; sourceTree = SOURCE_ROOT; };
@@ -310,6 +305,12 @@
 		00995E0D10A078E30054AD6D /* SkCubicInterval.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkCubicInterval.cpp; path = ../../src/utils/SkCubicInterval.cpp; sourceTree = SOURCE_ROOT; };
 		00995E1510A079D80054AD6D /* SampleUnitMapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SampleUnitMapper.cpp; path = ../../samplecode/SampleUnitMapper.cpp; sourceTree = SOURCE_ROOT; };
 		009CC9180F65918A002185BE /* SampleFontScalerTest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SampleFontScalerTest.cpp; path = ../../samplecode/SampleFontScalerTest.cpp; sourceTree = SOURCE_ROOT; };
+		009F9C0312C39A9C00C7FD4A /* GrPrintf_skia.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GrPrintf_skia.cpp; path = ../../src/gpu/GrPrintf_skia.cpp; sourceTree = SOURCE_ROOT; };
+		009F9C0412C39A9C00C7FD4A /* SkGpuCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkGpuCanvas.cpp; path = ../../src/gpu/SkGpuCanvas.cpp; sourceTree = SOURCE_ROOT; };
+		009F9C0512C39A9C00C7FD4A /* SkGpuDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkGpuDevice.cpp; path = ../../src/gpu/SkGpuDevice.cpp; sourceTree = SOURCE_ROOT; };
+		009F9C0612C39A9C00C7FD4A /* SkGr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkGr.cpp; path = ../../src/gpu/SkGr.cpp; sourceTree = SOURCE_ROOT; };
+		009F9C0712C39A9C00C7FD4A /* SkGrFontScaler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkGrFontScaler.cpp; path = ../../src/gpu/SkGrFontScaler.cpp; sourceTree = SOURCE_ROOT; };
+		009F9C0812C39A9C00C7FD4A /* SkGrTexturePixelRef.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkGrTexturePixelRef.cpp; path = ../../src/gpu/SkGrTexturePixelRef.cpp; sourceTree = SOURCE_ROOT; };
 		00A41E4A0EFC312F00C9CBEB /* SampleArc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SampleArc.cpp; path = ../../samplecode/SampleArc.cpp; sourceTree = SOURCE_ROOT; };
 		00A7282D0FD43D3700D5051F /* SkMovie.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkMovie.cpp; path = ../../src/images/SkMovie.cpp; sourceTree = SOURCE_ROOT; };
 		00A7282E0FD43D3700D5051F /* SkMovie_gif.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkMovie_gif.cpp; path = ../../src/images/SkMovie_gif.cpp; sourceTree = SOURCE_ROOT; };
@@ -549,12 +550,12 @@
 		00115ECC12C117A3008296FE /* GPU */ = {
 			isa = PBXGroup;
 			children = (
-				00115ECD12C117BD008296FE /* SkGpuCanvas.cpp */,
-				00115ECE12C117BD008296FE /* SkGpuDevice.cpp */,
-				00115ECF12C117BD008296FE /* SkGpuDevice.h */,
-				00115ED012C117BD008296FE /* SkGr.cpp */,
-				00115ED112C117BD008296FE /* SkGrFontScaler.cpp */,
-				00115ED212C117BD008296FE /* SkGrTexturePixelRef.cpp */,
+				009F9C0312C39A9C00C7FD4A /* GrPrintf_skia.cpp */,
+				009F9C0412C39A9C00C7FD4A /* SkGpuCanvas.cpp */,
+				009F9C0512C39A9C00C7FD4A /* SkGpuDevice.cpp */,
+				009F9C0612C39A9C00C7FD4A /* SkGr.cpp */,
+				009F9C0712C39A9C00C7FD4A /* SkGrFontScaler.cpp */,
+				009F9C0812C39A9C00C7FD4A /* SkGrTexturePixelRef.cpp */,
 			);
 			name = GPU;
 			sourceTree = "<group>";
@@ -1001,7 +1002,6 @@
 				27433F3311A18EA60045AD84 /* SampleTextEffects.cpp in Sources */,
 				275E801611AAC2FF0051C03A /* SampleShapes.cpp in Sources */,
 				275E802311AAC3330051C03A /* SampleVertices.cpp in Sources */,
-				27D0F3C311BD2012001B8EBE /* SampleText.cpp in Sources */,
 				27E79E3512BC13C700BC0E57 /* SkPDFCatalog.cpp in Sources */,
 				27E79E3612BC13C700BC0E57 /* SkPDFDevice.cpp in Sources */,
 				27E79E3712BC13C700BC0E57 /* SkPDFDocument.cpp in Sources */,
@@ -1019,11 +1019,13 @@
 				27C4624F12BFB2C700DBB1F6 /* tilemodes.cpp in Sources */,
 				27C4625012BFB2C700DBB1F6 /* xfermodes.cpp in Sources */,
 				27C4625512BFB2F300DBB1F6 /* SampleGM.cpp in Sources */,
-				00115ED312C117BD008296FE /* SkGpuCanvas.cpp in Sources */,
-				00115ED412C117BD008296FE /* SkGpuDevice.cpp in Sources */,
-				00115ED512C117BD008296FE /* SkGr.cpp in Sources */,
-				00115ED612C117BD008296FE /* SkGrFontScaler.cpp in Sources */,
-				00115ED712C117BD008296FE /* SkGrTexturePixelRef.cpp in Sources */,
+				0011612F12C2AAC6008296FE /* SampleText.cpp in Sources */,
+				009F9C0912C39A9C00C7FD4A /* GrPrintf_skia.cpp in Sources */,
+				009F9C0A12C39A9C00C7FD4A /* SkGpuCanvas.cpp in Sources */,
+				009F9C0B12C39A9C00C7FD4A /* SkGpuDevice.cpp in Sources */,
+				009F9C0C12C39A9C00C7FD4A /* SkGr.cpp in Sources */,
+				009F9C0D12C39A9C00C7FD4A /* SkGrFontScaler.cpp in Sources */,
+				009F9C0E12C39A9C00C7FD4A /* SkGrTexturePixelRef.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};