Add SwiftShader dump from Feb 6 2013
diff --git a/src/GLES2/libGLESv2/Buffer.cpp b/src/GLES2/libGLESv2/Buffer.cpp
new file mode 100644
index 0000000..e98d8eb
--- /dev/null
+++ b/src/GLES2/libGLESv2/Buffer.cpp
@@ -0,0 +1,88 @@
+// SwiftShader Software Renderer
+//
+// Copyright(c) 2005-2013 TransGaming Inc.
+//
+// All rights reserved. No part of this software may be copied, distributed, transmitted,
+// transcribed, stored in a retrieval system, translated into any human or computer
+// language by any means, or disclosed to third parties without the explicit written
+// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
+// or implied, including but not limited to any patent rights, are granted to you.
+//
+
+// Buffer.cpp: Implements the Buffer class, representing storage of vertex and/or
+// index data. Implements GL buffer objects and related functionality.
+// [OpenGL ES 2.0.24] section 2.9 page 21.
+
+#include "Buffer.h"
+
+#include "main.h"
+#include "VertexDataManager.h"
+#include "IndexDataManager.h"
+
+namespace gl
+{
+
+Buffer::Buffer(GLuint id) : RefCountObject(id)
+{
+    mContents = 0;
+    mSize = 0;
+    mUsage = GL_DYNAMIC_DRAW;
+}
+
+Buffer::~Buffer()
+{
+    if(mContents)
+	{
+		mContents->destruct();
+	}
+}
+
+void Buffer::bufferData(const void *data, GLsizeiptr size, GLenum usage)
+{
+	if(mContents)
+	{
+		mContents->destruct();
+		mContents = 0;
+	}
+
+	mSize = size;
+	mUsage = usage;
+
+	if(size > 0)
+	{
+		const int padding = 1024;   // For SIMD processing of vertices
+		mContents = new sw::Resource(size + padding);
+
+		if(!mContents)
+		{
+			return error(GL_OUT_OF_MEMORY);
+		}
+
+		if(data)
+		{
+			memcpy((void*)mContents->getBuffer(), data, size);
+			memset((char*)mContents->getBuffer() + size, 0, padding);
+		}
+		else
+		{
+			memset((void*)mContents->getBuffer(), 0, size + padding);
+		}
+	}
+}
+
+void Buffer::bufferSubData(const void *data, GLsizeiptr size, GLintptr offset)
+{
+	if(mContents)
+	{
+		char *buffer = (char*)mContents->lock(sw::PUBLIC);
+		memcpy(buffer + offset, data, size);
+		mContents->unlock();
+	}
+}
+
+sw::Resource *Buffer::getResource()
+{
+	return mContents;
+}
+
+}