diff --git a/src/Common/Math.hpp b/src/Common/Math.hpp
index a219dba..e60c691 100644
--- a/src/Common/Math.hpp
+++ b/src/Common/Math.hpp
@@ -42,6 +42,30 @@
 	}
 
 	template<class T>
+	inline T max(T a, T b, T c)
+	{
+		return max(max(a, b), c);
+	}
+
+	template<class T>
+	inline T min(T a, T b, T c)
+	{
+		return min(min(a, b), c);
+	}
+
+	template<class T>
+	inline T max(T a, T b, T c, T d)
+	{
+		return max(max(a, b), max(c, d));
+	}
+
+	template<class T>
+	inline T min(T a, T b, T c, T d)
+	{
+		return min(min(a, b), min(c, d));
+	}
+
+	template<class T>
 	inline void swap(T &a, T &b)
 	{
 		T t = a;
diff --git a/src/D3D9/D3D9.vcxproj b/src/D3D9/D3D9.vcxproj
index 6f81ad6..a1bd963 100644
--- a/src/D3D9/D3D9.vcxproj
+++ b/src/D3D9/D3D9.vcxproj
@@ -203,7 +203,7 @@
       <OmitFramePointers>true</OmitFramePointers>
       <WholeProgramOptimization>true</WholeProgramOptimization>
       <AdditionalIncludeDirectories>..\;..\Main;..\Renderer;..\Shader;..\Common;..\SwiftAsm;..\libjpeg;..\SwiftShader;..\D3D9;..\Reactor;..\LLVM\include;..\LLVM\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;D3D9DLL_EXPORTS;DLL;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;D3D9DLL_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Sync</ExceptionHandling>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <BufferSecurityCheck>false</BufferSecurityCheck>
@@ -244,7 +244,7 @@
       <OmitFramePointers>false</OmitFramePointers>
       <WholeProgramOptimization>false</WholeProgramOptimization>
       <AdditionalIncludeDirectories>..\;..\Main;..\Renderer;..\Shader;..\Common;..\SwiftAsm;..\libjpeg;..\SwiftShader;..\D3D9;..\Reactor;..\LLVM\include;..\LLVM\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;D3D9DLL_EXPORTS;DLL;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;D3D9DLL_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Sync</ExceptionHandling>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <BufferSecurityCheck>false</BufferSecurityCheck>
@@ -288,7 +288,7 @@
       <OmitFramePointers>true</OmitFramePointers>
       <WholeProgramOptimization>true</WholeProgramOptimization>
       <AdditionalIncludeDirectories>..\;..\Main;..\Renderer;..\Shader;..\Common;..\SwiftAsm;..\libjpeg;..\SwiftShader;..\D3D9;..\Reactor;..\LLVM\include;..\LLVM\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;D3D9DLL_EXPORTS;DLL;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;D3D9DLL_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Sync</ExceptionHandling>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <BufferSecurityCheck>false</BufferSecurityCheck>
@@ -333,7 +333,7 @@
       <OmitFramePointers>false</OmitFramePointers>
       <WholeProgramOptimization>false</WholeProgramOptimization>
       <AdditionalIncludeDirectories>..\;..\Main;..\Renderer;..\Shader;..\Common;..\SwiftAsm;..\libjpeg;..\SwiftShader;..\D3D9;..\Reactor;..\LLVM\include;..\LLVM\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;D3D9DLL_EXPORTS;DLL;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;D3D9DLL_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Sync</ExceptionHandling>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <BufferSecurityCheck>false</BufferSecurityCheck>
diff --git a/src/D3D9/Direct3DDevice9.cpp b/src/D3D9/Direct3DDevice9.cpp
index f26724b..30d8ea3 100644
--- a/src/D3D9/Direct3DDevice9.cpp
+++ b/src/D3D9/Direct3DDevice9.cpp
@@ -58,7 +58,7 @@
 		d3d9->AddRef();
 
 		context = new sw::Context();
-		renderer = new sw::Renderer(context);
+		renderer = new sw::Renderer(context, sw::Direct3D, false);
 
 		swapChain = 0;
 		depthStencil = 0;
@@ -1033,18 +1033,18 @@
 
 		unsigned int indexOffset = startIndex * (indexData->is32Bit() ? 4 : 2);   // FIXME: Doesn't take stream frequencies into account
 
-		sw::Context::DrawType drawType;
+		sw::DrawType drawType;
 
 		if(indexData->is32Bit())
 		{
 			switch(type)
 			{
-			case D3DPT_POINTLIST:		drawType = sw::Context::DRAW_INDEXEDPOINTLIST32;		break;
-			case D3DPT_LINELIST:		drawType = sw::Context::DRAW_INDEXEDLINELIST32;			break;
-			case D3DPT_LINESTRIP:		drawType = sw::Context::DRAW_INDEXEDLINESTRIP32;		break;
-			case D3DPT_TRIANGLELIST:	drawType = sw::Context::DRAW_INDEXEDTRIANGLELIST32;		break;
-			case D3DPT_TRIANGLESTRIP:	drawType = sw::Context::DRAW_INDEXEDTRIANGLESTRIP32;	break;
-			case D3DPT_TRIANGLEFAN:		drawType = sw::Context::DRAW_INDEXEDTRIANGLEFAN32;		break;
+			case D3DPT_POINTLIST:     drawType = sw::DRAW_INDEXEDPOINTLIST32;     break;
+			case D3DPT_LINELIST:      drawType = sw::DRAW_INDEXEDLINELIST32;      break;
+			case D3DPT_LINESTRIP:     drawType = sw::DRAW_INDEXEDLINESTRIP32;     break;
+			case D3DPT_TRIANGLELIST:  drawType = sw::DRAW_INDEXEDTRIANGLELIST32;  break;
+			case D3DPT_TRIANGLESTRIP: drawType = sw::DRAW_INDEXEDTRIANGLESTRIP32; break;
+			case D3DPT_TRIANGLEFAN:   drawType = sw::DRAW_INDEXEDTRIANGLEFAN32;   break;
 			default:
 				ASSERT(false);
 			}
@@ -1053,12 +1053,12 @@
 		{
 			switch(type)
 			{
-			case D3DPT_POINTLIST:		drawType = sw::Context::DRAW_INDEXEDPOINTLIST16;		break;
-			case D3DPT_LINELIST:		drawType = sw::Context::DRAW_INDEXEDLINELIST16;			break;
-			case D3DPT_LINESTRIP:		drawType = sw::Context::DRAW_INDEXEDLINESTRIP16;		break;
-			case D3DPT_TRIANGLELIST:	drawType = sw::Context::DRAW_INDEXEDTRIANGLELIST16;		break;
-			case D3DPT_TRIANGLESTRIP:	drawType = sw::Context::DRAW_INDEXEDTRIANGLESTRIP16;	break;
-			case D3DPT_TRIANGLEFAN:		drawType = sw::Context::DRAW_INDEXEDTRIANGLEFAN16;		break;
+			case D3DPT_POINTLIST:     drawType = sw::DRAW_INDEXEDPOINTLIST16;     break;
+			case D3DPT_LINELIST:      drawType = sw::DRAW_INDEXEDLINELIST16;      break;
+			case D3DPT_LINESTRIP:     drawType = sw::DRAW_INDEXEDLINESTRIP16;     break;
+			case D3DPT_TRIANGLELIST:  drawType = sw::DRAW_INDEXEDTRIANGLELIST16;  break;
+			case D3DPT_TRIANGLESTRIP: drawType = sw::DRAW_INDEXEDTRIANGLESTRIP16; break;
+			case D3DPT_TRIANGLEFAN:   drawType = sw::DRAW_INDEXEDTRIANGLEFAN16;   break;
 			default:
 				ASSERT(false);
 			}
@@ -1134,18 +1134,18 @@
 			return D3D_OK;
 		}
 
-		sw::Context::DrawType drawType;
+		sw::DrawType drawType;
 
 		if(indexDataFormat == D3DFMT_INDEX32)
 		{
 			switch(type)
 			{
-			case D3DPT_POINTLIST:		drawType = sw::Context::DRAW_INDEXEDPOINTLIST32;		break;
-			case D3DPT_LINELIST:		drawType = sw::Context::DRAW_INDEXEDLINELIST32;			break;
-			case D3DPT_LINESTRIP:		drawType = sw::Context::DRAW_INDEXEDLINESTRIP32;		break;
-			case D3DPT_TRIANGLELIST:	drawType = sw::Context::DRAW_INDEXEDTRIANGLELIST32;		break;
-			case D3DPT_TRIANGLESTRIP:	drawType = sw::Context::DRAW_INDEXEDTRIANGLESTRIP32;	break;
-			case D3DPT_TRIANGLEFAN:		drawType = sw::Context::DRAW_INDEXEDTRIANGLEFAN32;		break;
+			case D3DPT_POINTLIST:     drawType = sw::DRAW_INDEXEDPOINTLIST32;     break;
+			case D3DPT_LINELIST:      drawType = sw::DRAW_INDEXEDLINELIST32;      break;
+			case D3DPT_LINESTRIP:     drawType = sw::DRAW_INDEXEDLINESTRIP32;     break;
+			case D3DPT_TRIANGLELIST:  drawType = sw::DRAW_INDEXEDTRIANGLELIST32;  break;
+			case D3DPT_TRIANGLESTRIP: drawType = sw::DRAW_INDEXEDTRIANGLESTRIP32; break;
+			case D3DPT_TRIANGLEFAN:   drawType = sw::DRAW_INDEXEDTRIANGLEFAN32;   break;
 			default:
 				ASSERT(false);
 			}
@@ -1154,12 +1154,12 @@
 		{
 			switch(type)
 			{
-			case D3DPT_POINTLIST:		drawType = sw::Context::DRAW_INDEXEDPOINTLIST16;		break;
-			case D3DPT_LINELIST:		drawType = sw::Context::DRAW_INDEXEDLINELIST16;			break;
-			case D3DPT_LINESTRIP:		drawType = sw::Context::DRAW_INDEXEDLINESTRIP16;		break;
-			case D3DPT_TRIANGLELIST:	drawType = sw::Context::DRAW_INDEXEDTRIANGLELIST16;		break;
-			case D3DPT_TRIANGLESTRIP:	drawType = sw::Context::DRAW_INDEXEDTRIANGLESTRIP16;	break;
-			case D3DPT_TRIANGLEFAN:		drawType = sw::Context::DRAW_INDEXEDTRIANGLEFAN16;		break;
+			case D3DPT_POINTLIST:     drawType = sw::DRAW_INDEXEDPOINTLIST16;     break;
+			case D3DPT_LINELIST:      drawType = sw::DRAW_INDEXEDLINELIST16;      break;
+			case D3DPT_LINESTRIP:     drawType = sw::DRAW_INDEXEDLINESTRIP16;     break;
+			case D3DPT_TRIANGLELIST:  drawType = sw::DRAW_INDEXEDTRIANGLELIST16;  break;
+			case D3DPT_TRIANGLESTRIP: drawType = sw::DRAW_INDEXEDTRIANGLESTRIP16; break;
+			case D3DPT_TRIANGLEFAN:   drawType = sw::DRAW_INDEXEDTRIANGLEFAN16;   break;
 			default:
 				ASSERT(false);
 			}
@@ -1185,16 +1185,16 @@
 			return D3D_OK;
 		}
 
-		sw::Context::DrawType drawType;
+		sw::DrawType drawType;
 
 		switch(primitiveType)
 		{
-		case D3DPT_POINTLIST:		drawType = sw::Context::DRAW_POINTLIST;		break;
-		case D3DPT_LINELIST:		drawType = sw::Context::DRAW_LINELIST;		break;
-		case D3DPT_LINESTRIP:		drawType = sw::Context::DRAW_LINESTRIP;		break;
-		case D3DPT_TRIANGLELIST:	drawType = sw::Context::DRAW_TRIANGLELIST;	break;
-		case D3DPT_TRIANGLESTRIP:	drawType = sw::Context::DRAW_TRIANGLESTRIP;	break;
-		case D3DPT_TRIANGLEFAN:		drawType = sw::Context::DRAW_TRIANGLEFAN;	break;
+		case D3DPT_POINTLIST:     drawType = sw::DRAW_POINTLIST;     break;
+		case D3DPT_LINELIST:      drawType = sw::DRAW_LINELIST;      break;
+		case D3DPT_LINESTRIP:     drawType = sw::DRAW_LINESTRIP;     break;
+		case D3DPT_TRIANGLELIST:  drawType = sw::DRAW_TRIANGLELIST;  break;
+		case D3DPT_TRIANGLESTRIP: drawType = sw::DRAW_TRIANGLESTRIP; break;
+		case D3DPT_TRIANGLEFAN:   drawType = sw::DRAW_TRIANGLEFAN;   break;
 		default:
 			ASSERT(false);
 		}
@@ -1249,16 +1249,16 @@
 			return D3D_OK;
 		}
 
-		sw::Context::DrawType drawType;
+		sw::DrawType drawType;
 
 		switch(primitiveType)
 		{
-		case D3DPT_POINTLIST:		drawType = sw::Context::DRAW_POINTLIST;		break;
-		case D3DPT_LINELIST:		drawType = sw::Context::DRAW_LINELIST;		break;
-		case D3DPT_LINESTRIP:		drawType = sw::Context::DRAW_LINESTRIP;		break;
-		case D3DPT_TRIANGLELIST:	drawType = sw::Context::DRAW_TRIANGLELIST;	break;
-		case D3DPT_TRIANGLESTRIP:	drawType = sw::Context::DRAW_TRIANGLESTRIP;	break;
-		case D3DPT_TRIANGLEFAN:		drawType = sw::Context::DRAW_TRIANGLEFAN;	break;
+		case D3DPT_POINTLIST:     drawType = sw::DRAW_POINTLIST;     break;
+		case D3DPT_LINELIST:      drawType = sw::DRAW_LINELIST;      break;
+		case D3DPT_LINESTRIP:     drawType = sw::DRAW_LINESTRIP;     break;
+		case D3DPT_TRIANGLELIST:  drawType = sw::DRAW_TRIANGLELIST;  break;
+		case D3DPT_TRIANGLESTRIP: drawType = sw::DRAW_TRIANGLESTRIP; break;
+		case D3DPT_TRIANGLEFAN:   drawType = sw::DRAW_TRIANGLEFAN;   break;
 		default:
 			ASSERT(false);
 		}
@@ -1858,9 +1858,9 @@
 			sw::BlitState update;
 			update.width = sourceDescription.Width;
 			update.height = sourceDescription.Height;
-			update.depth = 32;
+			update.sourceFormat = sw::FORMAT_A8R8G8B8;
+			update.destFormat = sw::FORMAT_A8R8G8B8;
 			update.stride = dest->getExternalPitchB();
-			update.HDR = false;
 			update.cursorHeight = 0;
 			update.cursorWidth = 0;
 		
@@ -2676,8 +2676,8 @@
 
 		sw::Surface *cursorSurface = static_cast<Direct3DSurface9*>(cursorBitmap);
 
-		int width = cursorSurface->getExternalWidth();
-		int height = cursorSurface->getExternalHeight();
+		int width = cursorSurface->getWidth();
+		int height = cursorSurface->getHeight();
 		void *bitmap = cursorSurface->lockExternal(0, 0, 0, sw::LOCK_READONLY, sw::PUBLIC);
 
 		delete cursor;
@@ -3079,13 +3079,13 @@
 				switch(value)
 				{
 				case D3DFILL_POINT:
-					renderer->setFillMode(sw::Context::FILL_VERTEX);
+					renderer->setFillMode(sw::FILL_VERTEX);
 					break;
 				case D3DFILL_WIREFRAME:
-					renderer->setFillMode(sw::Context::FILL_WIREFRAME);
+					renderer->setFillMode(sw::FILL_WIREFRAME);
 					break;
 				case D3DFILL_SOLID:
-					renderer->setFillMode(sw::Context::FILL_SOLID);
+					renderer->setFillMode(sw::FILL_SOLID);
 					break;
 				default:
 					ASSERT(false);
@@ -3095,10 +3095,10 @@
 				switch(value)
 				{
 				case D3DSHADE_FLAT:
-					renderer->setShadingMode(sw::Context::SHADING_FLAT);
+					renderer->setShadingMode(sw::SHADING_FLAT);
 					break;
 				case D3DSHADE_GOURAUD:
-					renderer->setShadingMode(sw::Context::SHADING_GOURAUD);
+					renderer->setShadingMode(sw::SHADING_GOURAUD);
 					break;
 				case D3DSHADE_PHONG:
 					break;
@@ -3119,51 +3119,51 @@
 				switch(value)
 				{
 				case D3DBLEND_ZERO:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_ZERO);
+					renderer->setSourceBlendFactor(sw::BLEND_ZERO);
 					break;
 				case D3DBLEND_ONE:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_ONE);
+					renderer->setSourceBlendFactor(sw::BLEND_ONE);
 					break;
 				case D3DBLEND_SRCCOLOR:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_SOURCE);
+					renderer->setSourceBlendFactor(sw::BLEND_SOURCE);
 					break;
 				case D3DBLEND_INVSRCCOLOR:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_INVSOURCE);
+					renderer->setSourceBlendFactor(sw::BLEND_INVSOURCE);
 					break;
 				case D3DBLEND_SRCALPHA:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_SOURCEALPHA);
+					renderer->setSourceBlendFactor(sw::BLEND_SOURCEALPHA);
 					break;
 				case D3DBLEND_INVSRCALPHA:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_INVSOURCEALPHA);
+					renderer->setSourceBlendFactor(sw::BLEND_INVSOURCEALPHA);
 					break;
 				case D3DBLEND_DESTALPHA:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_DESTALPHA);
+					renderer->setSourceBlendFactor(sw::BLEND_DESTALPHA);
 					break;
 				case D3DBLEND_INVDESTALPHA:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_INVDESTALPHA);
+					renderer->setSourceBlendFactor(sw::BLEND_INVDESTALPHA);
 					break;
 				case D3DBLEND_DESTCOLOR:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_DEST);
+					renderer->setSourceBlendFactor(sw::BLEND_DEST);
 					break;
 				case D3DBLEND_INVDESTCOLOR:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_INVDEST);
+					renderer->setSourceBlendFactor(sw::BLEND_INVDEST);
 					break;
 				case D3DBLEND_SRCALPHASAT:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_SRCALPHASAT);
+					renderer->setSourceBlendFactor(sw::BLEND_SRCALPHASAT);
 					break;
 				case D3DBLEND_BOTHSRCALPHA:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_SOURCEALPHA);
-					renderer->setDestBlendFactor(sw::Context::BLEND_INVSOURCEALPHA);
+					renderer->setSourceBlendFactor(sw::BLEND_SOURCEALPHA);
+					renderer->setDestBlendFactor(sw::BLEND_INVSOURCEALPHA);
 					break;
 				case D3DBLEND_BOTHINVSRCALPHA:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_INVSOURCEALPHA);
-					renderer->setDestBlendFactor(sw::Context::BLEND_SOURCEALPHA);
+					renderer->setSourceBlendFactor(sw::BLEND_INVSOURCEALPHA);
+					renderer->setDestBlendFactor(sw::BLEND_SOURCEALPHA);
 					break;
 				case D3DBLEND_BLENDFACTOR:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_CONSTANT);
+					renderer->setSourceBlendFactor(sw::BLEND_CONSTANT);
 					break;
 				case D3DBLEND_INVBLENDFACTOR:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_INVCONSTANT);
+					renderer->setSourceBlendFactor(sw::BLEND_INVCONSTANT);
 					break;
 				default:
 					ASSERT(false);
@@ -3173,51 +3173,51 @@
 				switch(value)
 				{
 				case D3DBLEND_ZERO:
-					renderer->setDestBlendFactor(sw::Context::BLEND_ZERO);
+					renderer->setDestBlendFactor(sw::BLEND_ZERO);
 					break;
 				case D3DBLEND_ONE:
-					renderer->setDestBlendFactor(sw::Context::BLEND_ONE);
+					renderer->setDestBlendFactor(sw::BLEND_ONE);
 					break;
 				case D3DBLEND_SRCCOLOR:
-					renderer->setDestBlendFactor(sw::Context::BLEND_SOURCE);
+					renderer->setDestBlendFactor(sw::BLEND_SOURCE);
 					break;
 				case D3DBLEND_INVSRCCOLOR:
-					renderer->setDestBlendFactor(sw::Context::BLEND_INVSOURCE);
+					renderer->setDestBlendFactor(sw::BLEND_INVSOURCE);
 					break;
 				case D3DBLEND_SRCALPHA:
-					renderer->setDestBlendFactor(sw::Context::BLEND_SOURCEALPHA);
+					renderer->setDestBlendFactor(sw::BLEND_SOURCEALPHA);
 					break;
 				case D3DBLEND_INVSRCALPHA:
-					renderer->setDestBlendFactor(sw::Context::BLEND_INVSOURCEALPHA);
+					renderer->setDestBlendFactor(sw::BLEND_INVSOURCEALPHA);
 					break;
 				case D3DBLEND_DESTALPHA:
-					renderer->setDestBlendFactor(sw::Context::BLEND_DESTALPHA);
+					renderer->setDestBlendFactor(sw::BLEND_DESTALPHA);
 					break;
 				case D3DBLEND_INVDESTALPHA:
-					renderer->setDestBlendFactor(sw::Context::BLEND_INVDESTALPHA);
+					renderer->setDestBlendFactor(sw::BLEND_INVDESTALPHA);
 					break;
 				case D3DBLEND_DESTCOLOR:
-					renderer->setDestBlendFactor(sw::Context::BLEND_DEST);
+					renderer->setDestBlendFactor(sw::BLEND_DEST);
 					break;
 				case D3DBLEND_INVDESTCOLOR:
-					renderer->setDestBlendFactor(sw::Context::BLEND_INVDEST);
+					renderer->setDestBlendFactor(sw::BLEND_INVDEST);
 					break;
 				case D3DBLEND_SRCALPHASAT:
-					renderer->setDestBlendFactor(sw::Context::BLEND_SRCALPHASAT);
+					renderer->setDestBlendFactor(sw::BLEND_SRCALPHASAT);
 					break;
 				case D3DBLEND_BOTHSRCALPHA:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_SOURCEALPHA);
-					renderer->setDestBlendFactor(sw::Context::BLEND_INVSOURCEALPHA);
+					renderer->setSourceBlendFactor(sw::BLEND_SOURCEALPHA);
+					renderer->setDestBlendFactor(sw::BLEND_INVSOURCEALPHA);
 					break;
 				case D3DBLEND_BOTHINVSRCALPHA:
-					renderer->setSourceBlendFactor(sw::Context::BLEND_INVSOURCEALPHA);
-					renderer->setDestBlendFactor(sw::Context::BLEND_SOURCEALPHA);
+					renderer->setSourceBlendFactor(sw::BLEND_INVSOURCEALPHA);
+					renderer->setDestBlendFactor(sw::BLEND_SOURCEALPHA);
 					break;
 				case D3DBLEND_BLENDFACTOR:
-					renderer->setDestBlendFactor(sw::Context::BLEND_CONSTANT);
+					renderer->setDestBlendFactor(sw::BLEND_CONSTANT);
 					break;
 				case D3DBLEND_INVBLENDFACTOR:
-					renderer->setDestBlendFactor(sw::Context::BLEND_INVCONSTANT);
+					renderer->setDestBlendFactor(sw::BLEND_INVCONSTANT);
 					break;
 				default:
 					ASSERT(false);
@@ -3227,13 +3227,13 @@
 				switch(value)
 				{
 				case D3DCULL_NONE:
-					renderer->setCullMode(sw::Context::CULL_NONE);
+					renderer->setCullMode(sw::CULL_NONE);
 					break;
 				case D3DCULL_CCW:
-					renderer->setCullMode(sw::Context::CULL_COUNTERCLOCKWISE);
+					renderer->setCullMode(sw::CULL_COUNTERCLOCKWISE);
 					break;
 				case D3DCULL_CW:
-					renderer->setCullMode(sw::Context::CULL_CLOCKWISE);
+					renderer->setCullMode(sw::CULL_CLOCKWISE);
 					break;
 				default:
 					ASSERT(false);
@@ -3243,28 +3243,28 @@
 				switch(value)
 				{
 				case D3DCMP_NEVER:
-					renderer->setDepthCompare(sw::Context::DEPTH_NEVER);
+					renderer->setDepthCompare(sw::DEPTH_NEVER);
 					break;
 				case D3DCMP_LESS:
-					renderer->setDepthCompare(sw::Context::DEPTH_LESS);
+					renderer->setDepthCompare(sw::DEPTH_LESS);
 					break;
 				case D3DCMP_EQUAL:
-					renderer->setDepthCompare(sw::Context::DEPTH_EQUAL);
+					renderer->setDepthCompare(sw::DEPTH_EQUAL);
 					break;
 				case D3DCMP_LESSEQUAL:
-					renderer->setDepthCompare(sw::Context::DEPTH_LESSEQUAL);
+					renderer->setDepthCompare(sw::DEPTH_LESSEQUAL);
 					break;
 				case D3DCMP_GREATER:
-					renderer->setDepthCompare(sw::Context::DEPTH_GREATER);
+					renderer->setDepthCompare(sw::DEPTH_GREATER);
 					break;
 				case D3DCMP_NOTEQUAL:
-					renderer->setDepthCompare(sw::Context::DEPTH_NOTEQUAL);
+					renderer->setDepthCompare(sw::DEPTH_NOTEQUAL);
 					break;
 				case D3DCMP_GREATEREQUAL:
-					renderer->setDepthCompare(sw::Context::DEPTH_GREATEREQUAL);
+					renderer->setDepthCompare(sw::DEPTH_GREATEREQUAL);
 					break;
 				case D3DCMP_ALWAYS:
-					renderer->setDepthCompare(sw::Context::DEPTH_ALWAYS);
+					renderer->setDepthCompare(sw::DEPTH_ALWAYS);
 					break;
 				default:
 					ASSERT(false);
@@ -3277,28 +3277,28 @@
 				switch(value)
 				{
 				case D3DCMP_NEVER:
-					renderer->setAlphaCompare(sw::Context::ALPHA_NEVER);
+					renderer->setAlphaCompare(sw::ALPHA_NEVER);
 					break;
 				case D3DCMP_LESS:
-					renderer->setAlphaCompare(sw::Context::ALPHA_LESS);
+					renderer->setAlphaCompare(sw::ALPHA_LESS);
 					break;
 				case D3DCMP_EQUAL:
-					renderer->setAlphaCompare(sw::Context::ALPHA_EQUAL);
+					renderer->setAlphaCompare(sw::ALPHA_EQUAL);
 					break;
 				case D3DCMP_LESSEQUAL:
-					renderer->setAlphaCompare(sw::Context::ALPHA_LESSEQUAL);
+					renderer->setAlphaCompare(sw::ALPHA_LESSEQUAL);
 					break;
 				case D3DCMP_GREATER:
-					renderer->setAlphaCompare(sw::Context::ALPHA_GREATER);
+					renderer->setAlphaCompare(sw::ALPHA_GREATER);
 					break;
 				case D3DCMP_NOTEQUAL:
-					renderer->setAlphaCompare(sw::Context::ALPHA_NOTEQUAL);
+					renderer->setAlphaCompare(sw::ALPHA_NOTEQUAL);
 					break;
 				case D3DCMP_GREATEREQUAL:
-					renderer->setAlphaCompare(sw::Context::ALPHA_GREATEREQUAL);
+					renderer->setAlphaCompare(sw::ALPHA_GREATEREQUAL);
 					break;
 				case D3DCMP_ALWAYS:
-					renderer->setAlphaCompare(sw::Context::ALPHA_ALWAYS);
+					renderer->setAlphaCompare(sw::ALPHA_ALWAYS);
 					break;
 				default:
 					ASSERT(false);
@@ -3320,16 +3320,16 @@
 				switch(value)
 				{
 				case D3DFOG_NONE:
-					renderer->setPixelFogMode(sw::Context::FOG_NONE);
+					renderer->setPixelFogMode(sw::FOG_NONE);
 					break;
 				case D3DFOG_LINEAR:
-					renderer->setPixelFogMode(sw::Context::FOG_LINEAR);
+					renderer->setPixelFogMode(sw::FOG_LINEAR);
 					break;
 				case D3DFOG_EXP:
-					renderer->setPixelFogMode(sw::Context::FOG_EXP);
+					renderer->setPixelFogMode(sw::FOG_EXP);
 					break;
 				case D3DFOG_EXP2:
-					renderer->setPixelFogMode(sw::Context::FOG_EXP2);
+					renderer->setPixelFogMode(sw::FOG_EXP2);
 					break;
 				default:
 					ASSERT(false);
@@ -3357,28 +3357,28 @@
 				switch(value)
 				{
 				case D3DSTENCILOP_KEEP:
-					renderer->setStencilFailOperation(sw::Context::OPERATION_KEEP);
+					renderer->setStencilFailOperation(sw::OPERATION_KEEP);
 					break;
 				case D3DSTENCILOP_ZERO:
-					renderer->setStencilFailOperation(sw::Context::OPERATION_ZERO);
+					renderer->setStencilFailOperation(sw::OPERATION_ZERO);
 					break;
 				case D3DSTENCILOP_REPLACE:
-					renderer->setStencilFailOperation(sw::Context::OPERATION_REPLACE);
+					renderer->setStencilFailOperation(sw::OPERATION_REPLACE);
 					break;
 				case D3DSTENCILOP_INCRSAT:
-					renderer->setStencilFailOperation(sw::Context::OPERATION_INCRSAT);
+					renderer->setStencilFailOperation(sw::OPERATION_INCRSAT);
 					break;
 				case D3DSTENCILOP_DECRSAT:
-					renderer->setStencilFailOperation(sw::Context::OPERATION_DECRSAT);
+					renderer->setStencilFailOperation(sw::OPERATION_DECRSAT);
 					break;
 				case D3DSTENCILOP_INVERT:
-					renderer->setStencilFailOperation(sw::Context::OPERATION_INVERT);
+					renderer->setStencilFailOperation(sw::OPERATION_INVERT);
 					break;
 				case D3DSTENCILOP_INCR:
-					renderer->setStencilFailOperation(sw::Context::OPERATION_INCR);
+					renderer->setStencilFailOperation(sw::OPERATION_INCR);
 					break;
 				case D3DSTENCILOP_DECR:
-					renderer->setStencilFailOperation(sw::Context::OPERATION_DECR);
+					renderer->setStencilFailOperation(sw::OPERATION_DECR);
 					break;
 				default:
 					ASSERT(false);
@@ -3388,28 +3388,28 @@
 				switch(value)
 				{
 				case D3DSTENCILOP_KEEP:
-					renderer->setStencilZFailOperation(sw::Context::OPERATION_KEEP);
+					renderer->setStencilZFailOperation(sw::OPERATION_KEEP);
 					break;
 				case D3DSTENCILOP_ZERO:
-					renderer->setStencilZFailOperation(sw::Context::OPERATION_ZERO);
+					renderer->setStencilZFailOperation(sw::OPERATION_ZERO);
 					break;
 				case D3DSTENCILOP_REPLACE:
-					renderer->setStencilZFailOperation(sw::Context::OPERATION_REPLACE);
+					renderer->setStencilZFailOperation(sw::OPERATION_REPLACE);
 					break;
 				case D3DSTENCILOP_INCRSAT:
-					renderer->setStencilZFailOperation(sw::Context::OPERATION_INCRSAT);
+					renderer->setStencilZFailOperation(sw::OPERATION_INCRSAT);
 					break;
 				case D3DSTENCILOP_DECRSAT:
-					renderer->setStencilZFailOperation(sw::Context::OPERATION_DECRSAT);
+					renderer->setStencilZFailOperation(sw::OPERATION_DECRSAT);
 					break;
 				case D3DSTENCILOP_INVERT:
-					renderer->setStencilZFailOperation(sw::Context::OPERATION_INVERT);
+					renderer->setStencilZFailOperation(sw::OPERATION_INVERT);
 					break;
 				case D3DSTENCILOP_INCR:
-					renderer->setStencilZFailOperation(sw::Context::OPERATION_INCR);
+					renderer->setStencilZFailOperation(sw::OPERATION_INCR);
 					break;
 				case D3DSTENCILOP_DECR:
-					renderer->setStencilZFailOperation(sw::Context::OPERATION_DECR);
+					renderer->setStencilZFailOperation(sw::OPERATION_DECR);
 					break;
 				default:
 					ASSERT(false);
@@ -3419,28 +3419,28 @@
 				switch(value)
 				{
 				case D3DSTENCILOP_KEEP:
-					renderer->setStencilPassOperation(sw::Context::OPERATION_KEEP);
+					renderer->setStencilPassOperation(sw::OPERATION_KEEP);
 					break;
 				case D3DSTENCILOP_ZERO:
-					renderer->setStencilPassOperation(sw::Context::OPERATION_ZERO);
+					renderer->setStencilPassOperation(sw::OPERATION_ZERO);
 					break;
 				case D3DSTENCILOP_REPLACE:
-					renderer->setStencilPassOperation(sw::Context::OPERATION_REPLACE);
+					renderer->setStencilPassOperation(sw::OPERATION_REPLACE);
 					break;
 				case D3DSTENCILOP_INCRSAT:
-					renderer->setStencilPassOperation(sw::Context::OPERATION_INCRSAT);
+					renderer->setStencilPassOperation(sw::OPERATION_INCRSAT);
 					break;
 				case D3DSTENCILOP_DECRSAT:
-					renderer->setStencilPassOperation(sw::Context::OPERATION_DECRSAT);
+					renderer->setStencilPassOperation(sw::OPERATION_DECRSAT);
 					break;
 				case D3DSTENCILOP_INVERT:
-					renderer->setStencilPassOperation(sw::Context::OPERATION_INVERT);
+					renderer->setStencilPassOperation(sw::OPERATION_INVERT);
 					break;
 				case D3DSTENCILOP_INCR:
-					renderer->setStencilPassOperation(sw::Context::OPERATION_INCR);
+					renderer->setStencilPassOperation(sw::OPERATION_INCR);
 					break;
 				case D3DSTENCILOP_DECR:
-					renderer->setStencilPassOperation(sw::Context::OPERATION_DECR);
+					renderer->setStencilPassOperation(sw::OPERATION_DECR);
 					break;
 				default:
 					ASSERT(false);
@@ -3450,28 +3450,28 @@
 				switch(value)
 				{
 				case D3DCMP_NEVER:
-					renderer->setStencilCompare(sw::Context::STENCIL_NEVER);
+					renderer->setStencilCompare(sw::STENCIL_NEVER);
 					break;
 				case D3DCMP_LESS:
-					renderer->setStencilCompare(sw::Context::STENCIL_LESS);
+					renderer->setStencilCompare(sw::STENCIL_LESS);
 					break;
 				case D3DCMP_EQUAL:
-					renderer->setStencilCompare(sw::Context::STENCIL_EQUAL);
+					renderer->setStencilCompare(sw::STENCIL_EQUAL);
 					break;
 				case D3DCMP_LESSEQUAL:
-					renderer->setStencilCompare(sw::Context::STENCIL_LESSEQUAL);
+					renderer->setStencilCompare(sw::STENCIL_LESSEQUAL);
 					break;
 				case D3DCMP_GREATER:
-					renderer->setStencilCompare(sw::Context::STENCIL_GREATER);
+					renderer->setStencilCompare(sw::STENCIL_GREATER);
 					break;
 				case D3DCMP_NOTEQUAL:
-					renderer->setStencilCompare(sw::Context::STENCIL_NOTEQUAL);
+					renderer->setStencilCompare(sw::STENCIL_NOTEQUAL);
 					break;
 				case D3DCMP_GREATEREQUAL:
-					renderer->setStencilCompare(sw::Context::STENCIL_GREATEREQUAL);
+					renderer->setStencilCompare(sw::STENCIL_GREATEREQUAL);
 					break;
 				case D3DCMP_ALWAYS:
-					renderer->setStencilCompare(sw::Context::STENCIL_ALWAYS);
+					renderer->setStencilCompare(sw::STENCIL_ALWAYS);
 					break;
 				default:
 					ASSERT(false);
@@ -3529,16 +3529,16 @@
 				switch(value)
 				{
 				case D3DFOG_NONE:
-					renderer->setVertexFogMode(sw::Context::FOG_NONE);
+					renderer->setVertexFogMode(sw::FOG_NONE);
 					break;
 				case D3DFOG_LINEAR:
-					renderer->setVertexFogMode(sw::Context::FOG_LINEAR);
+					renderer->setVertexFogMode(sw::FOG_LINEAR);
 					break;
 				case D3DFOG_EXP:
-					renderer->setVertexFogMode(sw::Context::FOG_EXP);
+					renderer->setVertexFogMode(sw::FOG_EXP);
 					break;
 				case D3DFOG_EXP2:
-					renderer->setVertexFogMode(sw::Context::FOG_EXP2);
+					renderer->setVertexFogMode(sw::FOG_EXP2);
 					break;
 				default:
 					ASSERT(false);
@@ -3557,13 +3557,13 @@
 				switch(value)
 				{
 				case D3DMCS_MATERIAL:
-					renderer->setDiffuseMaterialSource(sw::Context::MATERIAL);
+					renderer->setDiffuseMaterialSource(sw::MATERIAL_MATERIAL);
 					break;
 				case D3DMCS_COLOR1:
-					renderer->setDiffuseMaterialSource(sw::Context::COLOR1);
+					renderer->setDiffuseMaterialSource(sw::MATERIAL_COLOR1);
 					break;
 				case D3DMCS_COLOR2:
-					renderer->setDiffuseMaterialSource(sw::Context::COLOR2);
+					renderer->setDiffuseMaterialSource(sw::MATERIAL_COLOR2);
 					break;
 				default:
 					ASSERT(false);
@@ -3573,13 +3573,13 @@
 				switch(value)
 				{
 				case D3DMCS_MATERIAL:
-					renderer->setSpecularMaterialSource(sw::Context::MATERIAL);
+					renderer->setSpecularMaterialSource(sw::MATERIAL_MATERIAL);
 					break;
 				case D3DMCS_COLOR1:
-					renderer->setSpecularMaterialSource(sw::Context::COLOR1);
+					renderer->setSpecularMaterialSource(sw::MATERIAL_COLOR1);
 					break;
 				case D3DMCS_COLOR2:
-					renderer->setSpecularMaterialSource(sw::Context::COLOR2);
+					renderer->setSpecularMaterialSource(sw::MATERIAL_COLOR2);
 					break;
 				default:
 					ASSERT(false);
@@ -3589,13 +3589,13 @@
 				switch(value)
 				{
 				case D3DMCS_MATERIAL:
-					renderer->setAmbientMaterialSource(sw::Context::MATERIAL);
+					renderer->setAmbientMaterialSource(sw::MATERIAL_MATERIAL);
 					break;
 				case D3DMCS_COLOR1:
-					renderer->setAmbientMaterialSource(sw::Context::COLOR1);
+					renderer->setAmbientMaterialSource(sw::MATERIAL_COLOR1);
 					break;
 				case D3DMCS_COLOR2:
-					renderer->setAmbientMaterialSource(sw::Context::COLOR2);
+					renderer->setAmbientMaterialSource(sw::MATERIAL_COLOR2);
 					break;
 				default:
 					ASSERT(false);
@@ -3605,13 +3605,13 @@
 				switch(value)
 				{
 				case D3DMCS_MATERIAL:
-					renderer->setEmissiveMaterialSource(sw::Context::MATERIAL);
+					renderer->setEmissiveMaterialSource(sw::MATERIAL_MATERIAL);
 					break;
 				case D3DMCS_COLOR1:
-					renderer->setEmissiveMaterialSource(sw::Context::COLOR1);
+					renderer->setEmissiveMaterialSource(sw::MATERIAL_COLOR1);
 					break;
 				case D3DMCS_COLOR2:
-					renderer->setEmissiveMaterialSource(sw::Context::COLOR2);
+					renderer->setEmissiveMaterialSource(sw::MATERIAL_COLOR2);
 					break;
 				default:
 					ASSERT(false);
@@ -3652,12 +3652,12 @@
 				}
 				else if(value == D3DFMT_A2M1)   // ATI hack to enable transparency anti-aliasing
 				{
-					renderer->setTransparencyAntialiasing(sw::Context::TRANSPARENCY_ALPHA_TO_COVERAGE);
+					renderer->setTransparencyAntialiasing(sw::TRANSPARENCY_ALPHA_TO_COVERAGE);
 					renderer->setAlphaTestEnable(true);
 				}
 				else if(value == D3DFMT_A2M0)   // ATI hack to disable transparency anti-aliasing
 				{
-					renderer->setTransparencyAntialiasing(sw::Context::TRANSPARENCY_NONE);
+					renderer->setTransparencyAntialiasing(sw::TRANSPARENCY_NONE);
 					renderer->setAlphaTestEnable(false);
 				}
 				else
@@ -3711,19 +3711,19 @@
 				switch(value)
 				{
 				case D3DBLENDOP_ADD:
-					renderer->setBlendOperation(sw::Context::BLENDOP_ADD);
+					renderer->setBlendOperation(sw::BLENDOP_ADD);
 					break;
 				case D3DBLENDOP_SUBTRACT:
-					renderer->setBlendOperation(sw::Context::BLENDOP_SUB);
+					renderer->setBlendOperation(sw::BLENDOP_SUB);
 					break;
 				case D3DBLENDOP_REVSUBTRACT:
-					renderer->setBlendOperation(sw::Context::BLENDOP_INVSUB);
+					renderer->setBlendOperation(sw::BLENDOP_INVSUB);
 					break;
 				case D3DBLENDOP_MIN:
-					renderer->setBlendOperation(sw::Context::BLENDOP_MIN);
+					renderer->setBlendOperation(sw::BLENDOP_MIN);
 					break;
 				case D3DBLENDOP_MAX:
-					renderer->setBlendOperation(sw::Context::BLENDOP_MAX);
+					renderer->setBlendOperation(sw::BLENDOP_MAX);
 					break;
 				default:
 					ASSERT(false);
@@ -3756,11 +3756,11 @@
 			case D3DRS_ADAPTIVETESS_Y:
 				if(value == D3DFMT_ATOC)   // NVIDIA hack to enable transparency anti-aliasing
 				{
-					renderer->setTransparencyAntialiasing(sw::Context::TRANSPARENCY_ALPHA_TO_COVERAGE);
+					renderer->setTransparencyAntialiasing(sw::TRANSPARENCY_ALPHA_TO_COVERAGE);
 				}
 				else if(value == D3DFMT_UNKNOWN)   // NVIDIA hack to disable transparency anti-aliasing
 				{
-					renderer->setTransparencyAntialiasing(sw::Context::TRANSPARENCY_NONE);
+					renderer->setTransparencyAntialiasing(sw::TRANSPARENCY_NONE);
 				}
 				else
 				{
@@ -3783,28 +3783,28 @@
 				switch(value)
 				{
 				case D3DSTENCILOP_KEEP:
-					renderer->setStencilFailOperationCCW(sw::Context::OPERATION_KEEP);
+					renderer->setStencilFailOperationCCW(sw::OPERATION_KEEP);
 					break;
 				case D3DSTENCILOP_ZERO:
-					renderer->setStencilFailOperationCCW(sw::Context::OPERATION_ZERO);
+					renderer->setStencilFailOperationCCW(sw::OPERATION_ZERO);
 					break;
 				case D3DSTENCILOP_REPLACE:
-					renderer->setStencilFailOperationCCW(sw::Context::OPERATION_REPLACE);
+					renderer->setStencilFailOperationCCW(sw::OPERATION_REPLACE);
 					break;
 				case D3DSTENCILOP_INCRSAT:
-					renderer->setStencilFailOperationCCW(sw::Context::OPERATION_INCRSAT);
+					renderer->setStencilFailOperationCCW(sw::OPERATION_INCRSAT);
 					break;
 				case D3DSTENCILOP_DECRSAT:
-					renderer->setStencilFailOperationCCW(sw::Context::OPERATION_DECRSAT);
+					renderer->setStencilFailOperationCCW(sw::OPERATION_DECRSAT);
 					break;
 				case D3DSTENCILOP_INVERT:
-					renderer->setStencilFailOperationCCW(sw::Context::OPERATION_INVERT);
+					renderer->setStencilFailOperationCCW(sw::OPERATION_INVERT);
 					break;
 				case D3DSTENCILOP_INCR:
-					renderer->setStencilFailOperationCCW(sw::Context::OPERATION_INCR);
+					renderer->setStencilFailOperationCCW(sw::OPERATION_INCR);
 					break;
 				case D3DSTENCILOP_DECR:
-					renderer->setStencilFailOperationCCW(sw::Context::OPERATION_DECR);
+					renderer->setStencilFailOperationCCW(sw::OPERATION_DECR);
 					break;
 				default:
 					ASSERT(false);
@@ -3814,28 +3814,28 @@
 				switch(value)
 				{
 				case D3DSTENCILOP_KEEP:
-					renderer->setStencilZFailOperationCCW(sw::Context::OPERATION_KEEP);
+					renderer->setStencilZFailOperationCCW(sw::OPERATION_KEEP);
 					break;
 				case D3DSTENCILOP_ZERO:
-					renderer->setStencilZFailOperationCCW(sw::Context::OPERATION_ZERO);
+					renderer->setStencilZFailOperationCCW(sw::OPERATION_ZERO);
 					break;
 				case D3DSTENCILOP_REPLACE:
-					renderer->setStencilZFailOperationCCW(sw::Context::OPERATION_REPLACE);
+					renderer->setStencilZFailOperationCCW(sw::OPERATION_REPLACE);
 					break;
 				case D3DSTENCILOP_INCRSAT:
-					renderer->setStencilZFailOperationCCW(sw::Context::OPERATION_INCRSAT);
+					renderer->setStencilZFailOperationCCW(sw::OPERATION_INCRSAT);
 					break;
 				case D3DSTENCILOP_DECRSAT:
-					renderer->setStencilZFailOperationCCW(sw::Context::OPERATION_DECRSAT);
+					renderer->setStencilZFailOperationCCW(sw::OPERATION_DECRSAT);
 					break;
 				case D3DSTENCILOP_INVERT:
-					renderer->setStencilZFailOperationCCW(sw::Context::OPERATION_INVERT);
+					renderer->setStencilZFailOperationCCW(sw::OPERATION_INVERT);
 					break;
 				case D3DSTENCILOP_INCR:
-					renderer->setStencilZFailOperationCCW(sw::Context::OPERATION_INCR);
+					renderer->setStencilZFailOperationCCW(sw::OPERATION_INCR);
 					break;
 				case D3DSTENCILOP_DECR:
-					renderer->setStencilZFailOperationCCW(sw::Context::OPERATION_DECR);
+					renderer->setStencilZFailOperationCCW(sw::OPERATION_DECR);
 					break;
 				default:
 					ASSERT(false);
@@ -3845,28 +3845,28 @@
 				switch(value)
 				{
 				case D3DSTENCILOP_KEEP:
-					renderer->setStencilPassOperationCCW(sw::Context::OPERATION_KEEP);
+					renderer->setStencilPassOperationCCW(sw::OPERATION_KEEP);
 					break;
 				case D3DSTENCILOP_ZERO:
-					renderer->setStencilPassOperationCCW(sw::Context::OPERATION_ZERO);
+					renderer->setStencilPassOperationCCW(sw::OPERATION_ZERO);
 					break;
 				case D3DSTENCILOP_REPLACE:
-					renderer->setStencilPassOperationCCW(sw::Context::OPERATION_REPLACE);
+					renderer->setStencilPassOperationCCW(sw::OPERATION_REPLACE);
 					break;
 				case D3DSTENCILOP_INCRSAT:
-					renderer->setStencilPassOperationCCW(sw::Context::OPERATION_INCRSAT);
+					renderer->setStencilPassOperationCCW(sw::OPERATION_INCRSAT);
 					break;
 				case D3DSTENCILOP_DECRSAT:
-					renderer->setStencilPassOperationCCW(sw::Context::OPERATION_DECRSAT);
+					renderer->setStencilPassOperationCCW(sw::OPERATION_DECRSAT);
 					break;
 				case D3DSTENCILOP_INVERT:
-					renderer->setStencilPassOperationCCW(sw::Context::OPERATION_INVERT);
+					renderer->setStencilPassOperationCCW(sw::OPERATION_INVERT);
 					break;
 				case D3DSTENCILOP_INCR:
-					renderer->setStencilPassOperationCCW(sw::Context::OPERATION_INCR);
+					renderer->setStencilPassOperationCCW(sw::OPERATION_INCR);
 					break;
 				case D3DSTENCILOP_DECR:
-					renderer->setStencilPassOperationCCW(sw::Context::OPERATION_DECR);
+					renderer->setStencilPassOperationCCW(sw::OPERATION_DECR);
 					break;
 				default:
 					ASSERT(false);
@@ -3876,28 +3876,28 @@
 				switch(value)
 				{
 				case D3DCMP_NEVER:
-					renderer->setStencilCompareCCW(sw::Context::STENCIL_NEVER);
+					renderer->setStencilCompareCCW(sw::STENCIL_NEVER);
 					break;
 				case D3DCMP_LESS:
-					renderer->setStencilCompareCCW(sw::Context::STENCIL_LESS);
+					renderer->setStencilCompareCCW(sw::STENCIL_LESS);
 					break;
 				case D3DCMP_EQUAL:
-					renderer->setStencilCompareCCW(sw::Context::STENCIL_EQUAL);
+					renderer->setStencilCompareCCW(sw::STENCIL_EQUAL);
 					break;
 				case D3DCMP_LESSEQUAL:
-					renderer->setStencilCompareCCW(sw::Context::STENCIL_LESSEQUAL);
+					renderer->setStencilCompareCCW(sw::STENCIL_LESSEQUAL);
 					break;
 				case D3DCMP_GREATER:
-					renderer->setStencilCompareCCW(sw::Context::STENCIL_GREATER);
+					renderer->setStencilCompareCCW(sw::STENCIL_GREATER);
 					break;
 				case D3DCMP_NOTEQUAL:
-					renderer->setStencilCompareCCW(sw::Context::STENCIL_NOTEQUAL);
+					renderer->setStencilCompareCCW(sw::STENCIL_NOTEQUAL);
 					break;
 				case D3DCMP_GREATEREQUAL:
-					renderer->setStencilCompareCCW(sw::Context::STENCIL_GREATEREQUAL);
+					renderer->setStencilCompareCCW(sw::STENCIL_GREATEREQUAL);
 					break;
 				case D3DCMP_ALWAYS:
-					renderer->setStencilCompareCCW(sw::Context::STENCIL_ALWAYS);
+					renderer->setStencilCompareCCW(sw::STENCIL_ALWAYS);
 					break;
 				default:
 					ASSERT(false);
@@ -3952,51 +3952,51 @@
 				switch(value)
 				{
 				case D3DBLEND_ZERO:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_ZERO);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_ZERO);
 					break;
 				case D3DBLEND_ONE:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_ONE);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_ONE);
 					break;
 				case D3DBLEND_SRCCOLOR:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_SOURCE);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_SOURCE);
 					break;
 				case D3DBLEND_INVSRCCOLOR:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_INVSOURCE);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_INVSOURCE);
 					break;
 				case D3DBLEND_SRCALPHA:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_SOURCEALPHA);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_SOURCEALPHA);
 					break;
 				case D3DBLEND_INVSRCALPHA:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_INVSOURCEALPHA);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_INVSOURCEALPHA);
 					break;
 				case D3DBLEND_DESTALPHA:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_DESTALPHA);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_DESTALPHA);
 					break;
 				case D3DBLEND_INVDESTALPHA:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_INVDESTALPHA);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_INVDESTALPHA);
 					break;
 				case D3DBLEND_DESTCOLOR:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_DEST);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_DEST);
 					break;
 				case D3DBLEND_INVDESTCOLOR:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_INVDEST);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_INVDEST);
 					break;
 				case D3DBLEND_SRCALPHASAT:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_SRCALPHASAT);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_SRCALPHASAT);
 					break;
 				case D3DBLEND_BOTHSRCALPHA:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_SOURCEALPHA);
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_INVSOURCEALPHA);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_SOURCEALPHA);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_INVSOURCEALPHA);
 					break;
 				case D3DBLEND_BOTHINVSRCALPHA:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_INVSOURCEALPHA);
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_SOURCEALPHA);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_INVSOURCEALPHA);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_SOURCEALPHA);
 					break;
 				case D3DBLEND_BLENDFACTOR:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_CONSTANT);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_CONSTANT);
 					break;
 				case D3DBLEND_INVBLENDFACTOR:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_INVCONSTANT);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_INVCONSTANT);
 					break;
 				default:
 					ASSERT(false);
@@ -4006,51 +4006,51 @@
 				switch(value)
 				{
 				case D3DBLEND_ZERO:
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_ZERO);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_ZERO);
 					break;
 				case D3DBLEND_ONE:
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_ONE);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_ONE);
 					break;
 				case D3DBLEND_SRCCOLOR:
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_SOURCE);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_SOURCE);
 					break;
 				case D3DBLEND_INVSRCCOLOR:
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_INVSOURCE);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_INVSOURCE);
 					break;
 				case D3DBLEND_SRCALPHA:
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_SOURCEALPHA);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_SOURCEALPHA);
 					break;
 				case D3DBLEND_INVSRCALPHA:
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_INVSOURCEALPHA);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_INVSOURCEALPHA);
 					break;
 				case D3DBLEND_DESTALPHA:
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_DESTALPHA);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_DESTALPHA);
 					break;
 				case D3DBLEND_INVDESTALPHA:
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_INVDESTALPHA);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_INVDESTALPHA);
 					break;
 				case D3DBLEND_DESTCOLOR:
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_DEST);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_DEST);
 					break;
 				case D3DBLEND_INVDESTCOLOR:
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_INVDEST);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_INVDEST);
 					break;
 				case D3DBLEND_SRCALPHASAT:
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_SRCALPHASAT);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_SRCALPHASAT);
 					break;
 				case D3DBLEND_BOTHSRCALPHA:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_SOURCEALPHA);
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_INVSOURCEALPHA);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_SOURCEALPHA);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_INVSOURCEALPHA);
 					break;
 				case D3DBLEND_BOTHINVSRCALPHA:
-					renderer->setSourceBlendFactorAlpha(sw::Context::BLEND_INVSOURCEALPHA);
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_SOURCEALPHA);
+					renderer->setSourceBlendFactorAlpha(sw::BLEND_INVSOURCEALPHA);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_SOURCEALPHA);
 					break;
 				case D3DBLEND_BLENDFACTOR:
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_CONSTANT);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_CONSTANT);
 					break;
 				case D3DBLEND_INVBLENDFACTOR:
-					renderer->setDestBlendFactorAlpha(sw::Context::BLEND_INVCONSTANT);
+					renderer->setDestBlendFactorAlpha(sw::BLEND_INVCONSTANT);
 					break;
 				default:
 					ASSERT(false);
@@ -4060,19 +4060,19 @@
 				switch(value)
 				{
 				case D3DBLENDOP_ADD:
-					renderer->setBlendOperationAlpha(sw::Context::BLENDOP_ADD);
+					renderer->setBlendOperationAlpha(sw::BLENDOP_ADD);
 					break;
 				case D3DBLENDOP_SUBTRACT:
-					renderer->setBlendOperationAlpha(sw::Context::BLENDOP_SUB);
+					renderer->setBlendOperationAlpha(sw::BLENDOP_SUB);
 					break;
 				case D3DBLENDOP_REVSUBTRACT:
-					renderer->setBlendOperationAlpha(sw::Context::BLENDOP_INVSUB);
+					renderer->setBlendOperationAlpha(sw::BLENDOP_INVSUB);
 					break;
 				case D3DBLENDOP_MIN:
-					renderer->setBlendOperationAlpha(sw::Context::BLENDOP_MIN);
+					renderer->setBlendOperationAlpha(sw::BLENDOP_MIN);
 					break;
 				case D3DBLENDOP_MAX:
-					renderer->setBlendOperationAlpha(sw::Context::BLENDOP_MAX);
+					renderer->setBlendOperationAlpha(sw::BLENDOP_MAX);
 					break;
 				default:
 					ASSERT(false);
@@ -4918,23 +4918,23 @@
 				switch(value & 0xFFFF0000)
 				{
 				case D3DTSS_TCI_PASSTHRU:
-					renderer->setTexGen(stage, sw::Context::TEXGEN_PASSTHRU);
+					renderer->setTexGen(stage, sw::TEXGEN_PASSTHRU);
 					break;
 				case D3DTSS_TCI_CAMERASPACENORMAL:
 					renderer->setTexCoordIndex(stage, stage);
-					renderer->setTexGen(stage, sw::Context::TEXGEN_NORMAL);
+					renderer->setTexGen(stage, sw::TEXGEN_NORMAL);
 					break;
 				case D3DTSS_TCI_CAMERASPACEPOSITION:
 					renderer->setTexCoordIndex(stage, stage);
-					renderer->setTexGen(stage, sw::Context::TEXGEN_POSITION);
+					renderer->setTexGen(stage, sw::TEXGEN_POSITION);
 					break;
 				case D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR:
 					renderer->setTexCoordIndex(stage, stage);
-					renderer->setTexGen(stage, sw::Context::TEXGEN_REFLECTION);
+					renderer->setTexGen(stage, sw::TEXGEN_REFLECTION);
 					break;
 				case D3DTSS_TCI_SPHEREMAP:
 					renderer->setTexCoordIndex(stage, stage);
-					renderer->setTexGen(stage, sw::Context::TEXGEN_SPHEREMAP);
+					renderer->setTexGen(stage, sw::TEXGEN_SPHEREMAP);
 					break;
 				default:
 					ASSERT(false);
@@ -5760,7 +5760,7 @@
 
 			Direct3DVertexBuffer9 *streamBuffer = dataStream[stream];
 			sw::Resource *resource = streamBuffer->getResource();
-			const void *buffer = ((char*)resource->getBuffer() + streamOffset[stream]) + offset;
+			const void *buffer = ((char*)resource->data() + streamOffset[stream]) + offset;
 			
 			int stride = streamStride[stream];
 
@@ -5837,20 +5837,20 @@
 			{
 				switch(usage)
 				{
-				case D3DDECLUSAGE_POSITION:     renderer->setInputPositionStream(attribute);                                       break;
-				case D3DDECLUSAGE_BLENDWEIGHT:  renderer->setInputBlendWeightStream(attribute);                                    break;
-				case D3DDECLUSAGE_BLENDINDICES: renderer->setInputBlendIndicesStream(attribute.define(sw::STREAMTYPE_INDICES, 1)); break;
-				case D3DDECLUSAGE_NORMAL:       renderer->setInputNormalStream(attribute.define(sw::STREAMTYPE_FLOAT, 3));         break;
-				case D3DDECLUSAGE_PSIZE:        renderer->setInputPSizeStream(attribute.define(sw::STREAMTYPE_FLOAT, 1));          break;
-				case D3DDECLUSAGE_TEXCOORD:     renderer->setInputTexCoordStream(attribute, index);                                break;
-				case D3DDECLUSAGE_TANGENT:      /* Ignored */                                                                      break;
-				case D3DDECLUSAGE_BINORMAL:     /* Ignored */                                                                      break;
-				case D3DDECLUSAGE_TESSFACTOR:   UNIMPLEMENTED();                                                                   break;
-				case D3DDECLUSAGE_POSITIONT:    renderer->setInputPositiontStream(attribute.define(sw::STREAMTYPE_FLOAT, 4));      break;
-				case D3DDECLUSAGE_COLOR:        renderer->setInputColorStream(attribute.define(sw::STREAMTYPE_COLOR, 4), index);   break;
-				case D3DDECLUSAGE_FOG:          /* Ignored */                                                                      break;
-				case D3DDECLUSAGE_DEPTH:        /* Ignored */                                                                      break;
-				case D3DDECLUSAGE_SAMPLE:       UNIMPLEMENTED();                                                                   break;
+				case D3DDECLUSAGE_POSITION:     renderer->setInputStream(sw::Position, attribute);                                       break;
+				case D3DDECLUSAGE_BLENDWEIGHT:  renderer->setInputStream(sw::BlendWeight, attribute);                                    break;
+				case D3DDECLUSAGE_BLENDINDICES: renderer->setInputStream(sw::BlendIndices, attribute.define(sw::STREAMTYPE_INDICES, 1)); break;
+				case D3DDECLUSAGE_NORMAL:       renderer->setInputStream(sw::Normal, attribute.define(sw::STREAMTYPE_FLOAT, 3));         break;
+				case D3DDECLUSAGE_PSIZE:        renderer->setInputStream(sw::PointSize, attribute.define(sw::STREAMTYPE_FLOAT, 1));      break;
+				case D3DDECLUSAGE_TEXCOORD:     renderer->setInputStream(sw::TexCoord0 + index, attribute);                              break;
+				case D3DDECLUSAGE_TANGENT:      /* Ignored */                                                                            break;
+				case D3DDECLUSAGE_BINORMAL:     /* Ignored */                                                                            break;
+				case D3DDECLUSAGE_TESSFACTOR:   UNIMPLEMENTED();                                                                         break;
+				case D3DDECLUSAGE_POSITIONT:    renderer->setInputStream(sw::PositionT, attribute.define(sw::STREAMTYPE_FLOAT, 4));      break;
+				case D3DDECLUSAGE_COLOR:        renderer->setInputStream(sw::Color0 + index, attribute.define(sw::STREAMTYPE_COLOR, 4)); break;
+				case D3DDECLUSAGE_FOG:          /* Ignored */                                                                            break;
+				case D3DDECLUSAGE_DEPTH:        /* Ignored */                                                                            break;
+				case D3DDECLUSAGE_SAMPLE:       UNIMPLEMENTED();                                                                         break;
 				default:
 					ASSERT(false);
 				}
@@ -6016,70 +6016,40 @@
 
 		if(scissorEnable)
 		{
-			RECT scissor = scissorRect;
-
-			long viewportLeft = viewport.X;
-			long viewportRight = viewport.X + viewport.Width;
-			long viewportTop = viewport.Y;
-			long viewportBottom = viewport.Y + viewport.Height;
-
-			// Intersection of scissor rectangle and viewport
-			if(viewportLeft > scissor.left) scissor.left = viewportLeft;
-			if(viewportTop > scissor.top) scissor.top = viewportTop;
-			if(viewportRight < scissor.right) scissor.right = viewportRight;
-			if(viewportBottom < scissor.bottom) scissor.bottom = viewportBottom;
-
-			if(scissor.left == scissor.right ||
-			   scissor.top == scissor.bottom)
+			if(scissorRect.left >= scissorRect.right || scissorRect.top >= scissorRect.bottom)
 			{
 				return false;
 			}
 
-			// Dimensions of scissor rectangle relative to viewport
-			float relativeLeft = (float)(scissor.left - viewportLeft) / viewport.Width;
-			float relativeRight = (float)(scissor.right - viewportLeft) / viewport.Width;
-			float relativeTop = (float)(scissor.top - viewportTop) / viewport.Height;
-			float relativeBottom = (float)(scissor.bottom - viewportTop) / viewport.Height;
-
-			// Transformation of clip space coordinates
-			float sX = 1.0f / (relativeRight - relativeLeft);   // Scale
-			float tX = sX * ((0.5f - relativeLeft) - (relativeRight - 0.5f));   // Translate
-			float sY = 1.0f / (relativeBottom - relativeTop);   // Scale
-			float tY = sY * ((0.5f - relativeTop) - (relativeBottom - 0.5f));   // Translate
-
-			// Set the new viewport
-			sw::Viewport view;
-
-			view.setLeft((float)scissor.left);
-			view.setTop((float)scissor.top);
-			view.setWidth((float)(scissor.right - scissor.left));
-			view.setHeight((float)(scissor.bottom - scissor.top));
-
-			view.setNear(viewport.MinZ);
-			view.setFar(viewport.MaxZ);
-
-			renderer->setViewport(view);
-			renderer->setPostTransformEnable(true);
-			renderer->setPosScale(sX, sY);
-			renderer->setPosOffset(tX, -tY);
+			sw::Rect scissor;
+			scissor.x0 = scissorRect.left;
+			scissor.x1 = scissorRect.right;
+			scissor.y0 = scissorRect.top;
+			scissor.y1 = scissorRect.bottom;
+			
+			renderer->setScissor(scissor);
 		}
 		else
 		{
-			// Set viewport
-			sw::Viewport view;
-
-			view.setLeft((float)viewport.X);
-			view.setTop((float)viewport.Y);
-			view.setWidth((float)viewport.Width);
-			view.setHeight((float)viewport.Height);
-
-			view.setNear(viewport.MinZ);
-			view.setFar(viewport.MaxZ);
-
-			renderer->setViewport(view);
-			renderer->setPostTransformEnable(false);
+			sw::Rect scissor;
+			scissor.x0 = viewport.X;
+			scissor.x1 = viewport.X + viewport.Width;
+			scissor.y0 = viewport.Y;
+			scissor.y1 = viewport.Y + viewport.Height;
+			
+			renderer->setScissor(scissor);
 		}
 
+		sw::Viewport view;
+		view.x0 = (float)viewport.X;
+		view.y0 = (float)viewport.Y + viewport.Height;
+		view.width = (float)viewport.Width;
+		view.height = -(float)viewport.Height;
+		view.minZ = viewport.MinZ;
+		view.maxZ = viewport.MaxZ;
+
+		renderer->setViewport(view);
+
 		return true;
 	}
 
@@ -6260,45 +6230,31 @@
 		source->GetDesc(&sourceDescription);
 		dest->GetDesc(&destDescription);
 
-		int sWidth = source->getExternalWidth();
-		int sHeight = source->getExternalHeight();
-		int dWidth = dest->getExternalWidth();
-		int dHeight = dest->getExternalHeight();
+		int sWidth = source->getWidth();
+		int sHeight = source->getHeight();
+		int dWidth = dest->getWidth();
+		int dHeight = dest->getHeight();
 
-		sw::Rect sRect = {0};
-		sw::Rect dRect = {0};
+		sw::Rect sRect(0, 0, sWidth, sHeight);
+		sw::Rect dRect(0, 0, dWidth, dHeight);
 
 		if(sourceRect)
 		{
-			sRect.left = sourceRect->left;
-			sRect.top = sourceRect->top;
-			sRect.right = sourceRect->right;
-			sRect.bottom = sourceRect->bottom;
-		}
-		else
-		{
-			sRect.top = 0;
-			sRect.left = 0;
-			sRect.bottom = sHeight;
-			sRect.right = sWidth;
+			sRect.x0 = sourceRect->left;
+			sRect.y0 = sourceRect->top;
+			sRect.x1 = sourceRect->right;
+			sRect.y1 = sourceRect->bottom;
 		}
 
 		if(destRect)
 		{
-			dRect.left = destRect->left;
-			dRect.top = destRect->top;
-			dRect.right = destRect->right;
-			dRect.bottom = destRect->bottom;
-		}
-		else
-		{
-			dRect.top = 0;
-			dRect.left = 0;
-			dRect.bottom = dHeight;
-			dRect.right = dWidth;
+			dRect.x0 = destRect->left;
+			dRect.y0 = destRect->top;
+			dRect.x1 = destRect->right;
+			dRect.y1 = destRect->bottom;
 		}
 
-		bool scaling = (sRect.right - sRect.left != dRect.right - dRect.left) || (sRect.bottom - sRect.top != dRect.bottom - dRect.top);
+		bool scaling = (sRect.x1 - sRect.x0 != dRect.x1 - dRect.x0) || (sRect.y1 - sRect.y0 != dRect.y1 - dRect.y0);
 		bool equalFormats = source->getInternalFormat() == dest->getInternalFormat();
 		bool depthStencil = (sourceDescription.Usage & D3DUSAGE_DEPTHSTENCIL) == D3DUSAGE_DEPTHSTENCIL;
 		bool alpha0xFF = false;
@@ -6317,8 +6273,8 @@
 				byte *sourceBuffer = (byte*)source->lockInternal(0, 0, 0, sw::LOCK_READONLY, sw::PUBLIC);
 				byte *destBuffer = (byte*)dest->lockInternal(0, 0, 0, sw::LOCK_DISCARD, sw::PUBLIC);
 
-				unsigned int width = source->getInternalWidth();
-				unsigned int height = source->getInternalHeight();
+				unsigned int width = source->getWidth();
+				unsigned int height = source->getHeight();
 				unsigned int pitch = source->getInternalPitchB();
 
 				for(unsigned int y = 0; y < height; y++)
@@ -6338,8 +6294,8 @@
 				byte *sourceBuffer = (byte*)source->lockStencil(0, sw::PUBLIC);
 				byte *destBuffer = (byte*)dest->lockStencil(0, sw::PUBLIC);
 
-				unsigned int width = source->getInternalWidth();
-				unsigned int height = source->getInternalHeight();
+				unsigned int width = source->getWidth();
+				unsigned int height = source->getHeight();
 				unsigned int pitch = source->getStencilPitchB();
 
 				for(unsigned int y = 0; y < height; y++)
@@ -6356,13 +6312,13 @@
 		}
 		else if(!scaling && equalFormats)
 		{
-			unsigned char *sourceBytes = (unsigned char*)source->lockInternal(sRect.left, sRect.top, 0, sw::LOCK_READONLY, sw::PUBLIC);
-			unsigned char *destBytes = (unsigned char*)dest->lockInternal(dRect.left, dRect.top, 0, sw::LOCK_READWRITE, sw::PUBLIC);
+			unsigned char *sourceBytes = (unsigned char*)source->lockInternal(sRect.x0, sRect.y0, 0, sw::LOCK_READONLY, sw::PUBLIC);
+			unsigned char *destBytes = (unsigned char*)dest->lockInternal(dRect.x0, dRect.y0, 0, sw::LOCK_READWRITE, sw::PUBLIC);
 			unsigned int sourcePitch = source->getInternalPitchB();
 			unsigned int destPitch = dest->getInternalPitchB();
 
-			unsigned int width = dRect.right - dRect.left;
-			unsigned int height = dRect.bottom - dRect.top;
+			unsigned int width = dRect.x1 - dRect.x0;
+			unsigned int height = dRect.y1 - dRect.y0;
 			unsigned int bytes = width * sw::Surface::bytes(source->getInternalFormat());
 
 			for(unsigned int y = 0; y < height; y++)
diff --git a/src/D3D9/Direct3DDevice9.hpp b/src/D3D9/Direct3DDevice9.hpp
index 0750f62..3416dd9 100644
--- a/src/D3D9/Direct3DDevice9.hpp
+++ b/src/D3D9/Direct3DDevice9.hpp
@@ -256,13 +256,13 @@
 
 		bool lightsDirty;
 		bool pixelShaderDirty;
-		int pixelShaderConstantsBDirty;
-		int pixelShaderConstantsFDirty;
-		int pixelShaderConstantsIDirty;
+		unsigned int pixelShaderConstantsBDirty;
+		unsigned int pixelShaderConstantsFDirty;
+		unsigned int pixelShaderConstantsIDirty;
 		bool vertexShaderDirty;
-		int vertexShaderConstantsBDirty;
-		int vertexShaderConstantsFDirty;
-		int vertexShaderConstantsIDirty;
+		unsigned int vertexShaderConstantsBDirty;
+		unsigned int vertexShaderConstantsFDirty;
+		unsigned int vertexShaderConstantsIDirty;
 
 		float pixelShaderConstantF[224][4];
 		int pixelShaderConstantI[16][4];
diff --git a/src/D3D9/Direct3DIndexBuffer9.cpp b/src/D3D9/Direct3DIndexBuffer9.cpp
index eea9541..a1a839e 100644
--- a/src/D3D9/Direct3DIndexBuffer9.cpp
+++ b/src/D3D9/Direct3DIndexBuffer9.cpp
@@ -180,11 +180,11 @@
 			indexBuffer->destruct();
 			indexBuffer = new sw::Resource(length + 16);
 
-			buffer = (void*)indexBuffer->getBuffer();
+			buffer = (void*)indexBuffer->data();
 		}
 		else if(flags & D3DLOCK_NOOVERWRITE/* && usage & D3DUSAGE_DYNAMIC*/)
 		{
-			buffer = (void*)indexBuffer->getBuffer();
+			buffer = (void*)indexBuffer->data();
 		}
 		else
 		{
diff --git a/src/D3D9/Direct3DPixelShader9.cpp b/src/D3D9/Direct3DPixelShader9.cpp
index aa1b9c9..ea86793 100644
--- a/src/D3D9/Direct3DPixelShader9.cpp
+++ b/src/D3D9/Direct3DPixelShader9.cpp
@@ -86,7 +86,7 @@
 			return INVALIDCALL();
 		}
 
-		pixelShader.getFunction(data, size);
+		UNIMPLEMENTED();
 
 		return D3D_OK;
 	}
diff --git a/src/D3D9/Direct3DSurface9.cpp b/src/D3D9/Direct3DSurface9.cpp
index ee4d152..6a686fb 100644
--- a/src/D3D9/Direct3DSurface9.cpp
+++ b/src/D3D9/Direct3DSurface9.cpp
@@ -382,8 +382,8 @@
 		case D3DFMT_D24S8:			return sw::FORMAT_D24S8;
 		case D3DFMT_D24FS8:			return sw::FORMAT_D24FS8;
 		case D3DFMT_D32F_LOCKABLE:	return sw::FORMAT_D32F_LOCKABLE;
-		case D3DFMT_DF24:			return sw::FORMAT_DF24;
-		case D3DFMT_DF16:			return sw::FORMAT_DF16;
+		case D3DFMT_DF24:			return sw::FORMAT_DF24S8;
+		case D3DFMT_DF16:			return sw::FORMAT_DF16S8;
 		case D3DFMT_INTZ:			return sw::FORMAT_INTZ;
 		default:
 			ASSERT(false);
diff --git a/src/D3D9/Direct3DSwapChain9.cpp b/src/D3D9/Direct3DSwapChain9.cpp
index 6efdf6c..1a5e21e 100644
--- a/src/D3D9/Direct3DSwapChain9.cpp
+++ b/src/D3D9/Direct3DSwapChain9.cpp
@@ -147,7 +147,7 @@
 
 		HWND window = destWindowOverride ? destWindowOverride : presentParameters.hDeviceWindow;
 		void *source = backBuffer[0]->lockInternal(0, 0, 0, sw::LOCK_READONLY, sw::PUBLIC);   // FIXME: External
-		bool HDR = backBuffer[0]->getInternalFormat() == sw::FORMAT_A16B16G16R16;
+		sw::Format format = backBuffer[0]->getInternalFormat();
 
 		POINT point;
 		GetCursorPos(&point);
@@ -157,30 +157,30 @@
 
 		if(!sourceRect && !destRect)   // FIXME: More cases?
 		{
-			frameBuffer->flip(window, source, HDR);
+			frameBuffer->flip(window, source, format);
 		}
 		else   // FIXME: Check for SWAPEFFECT_COPY
 		{
-			sw::Rect sRect = {0};
-			sw::Rect dRect = {0};
+			sw::Rect sRect(0, 0, 0, 0);
+			sw::Rect dRect(0, 0, 0, 0);
 
 			if(sourceRect)
 			{
-				sRect.left = sourceRect->left;
-				sRect.top = sourceRect->top;
-				sRect.right = sourceRect->right;
-				sRect.bottom = sourceRect->bottom;
+				sRect.x0 = sourceRect->left;
+				sRect.y0 = sourceRect->top;
+				sRect.x1 = sourceRect->right;
+				sRect.y1 = sourceRect->bottom;
 			}
 
 			if(destRect)
 			{
-				dRect.left = destRect->left;
-				dRect.top = destRect->top;
-				dRect.right = destRect->right;
-				dRect.bottom = destRect->bottom;
+				dRect.x0 = destRect->left;
+				dRect.y0 = destRect->top;
+				dRect.x1 = destRect->right;
+				dRect.y1 = destRect->bottom;
 			}
 
-			frameBuffer->blit(window, source, sourceRect ? &sRect : 0, destRect ? &dRect : 0, HDR);
+			frameBuffer->blit(window, source, sourceRect ? &sRect : 0, destRect ? &dRect : 0, format);
 		}
 
 		backBuffer[0]->unlockInternal();   // FIXME: External
@@ -343,21 +343,10 @@
 			presentParameters->BackBufferHeight = rectangle.bottom - rectangle.top;
 		}
 
+		frameBuffer = createFrameBufferWin(windowHandle, presentParameters->BackBufferWidth, presentParameters->BackBufferHeight, presentParameters->Windowed == FALSE, true);
+
 		lockable = presentParameters->Flags & D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
 
-		sw::Configurator ini("SwiftShader.ini");
-		int api = ini.getInteger("Testing", "FrameBufferAPI", 1);
-
-		if(api == 0)
-		{
-			frameBuffer = new sw::FrameBufferDD(windowHandle, presentParameters->BackBufferWidth, presentParameters->BackBufferHeight, presentParameters->Windowed == FALSE);
-		}
-		else if(api == 1)
-		{
-			frameBuffer = new sw::FrameBufferGDI(windowHandle, presentParameters->BackBufferWidth, presentParameters->BackBufferHeight, presentParameters->Windowed == FALSE);
-		}
-		else ASSERT(false);
-
 		backBuffer[0] = 0;
 		backBuffer[1] = 0;
 		backBuffer[2] = 0;
diff --git a/src/D3D9/Direct3DSwapChain9.hpp b/src/D3D9/Direct3DSwapChain9.hpp
index 5b6f301..6927fa5 100644
--- a/src/D3D9/Direct3DSwapChain9.hpp
+++ b/src/D3D9/Direct3DSwapChain9.hpp
@@ -16,7 +16,7 @@
 
 #include "Direct3DSurface9.hpp"
 
-#include "FrameBuffer.hpp"
+#include "FrameBufferWin.hpp"
 
 #include <d3d9.h>
 
@@ -63,7 +63,7 @@
 
 		bool lockable;
 
-		sw::FrameBuffer *frameBuffer;
+		sw::FrameBufferWin *frameBuffer;
 
 	public:   // FIXME
 		Direct3DSurface9 *backBuffer[3];
diff --git a/src/D3D9/Direct3DVertexBuffer9.cpp b/src/D3D9/Direct3DVertexBuffer9.cpp
index 55d0931..0de6806 100644
--- a/src/D3D9/Direct3DVertexBuffer9.cpp
+++ b/src/D3D9/Direct3DVertexBuffer9.cpp
@@ -199,11 +199,11 @@
 			vertexBuffer->destruct();
 			vertexBuffer = new sw::Resource(length + 192 + 1024);   // NOTE: Applications can 'overshoot' while writing vertices
 			
-			buffer = (void*)vertexBuffer->getBuffer();
+			buffer = (void*)vertexBuffer->data();
 		}
 		else if(flags & D3DLOCK_NOOVERWRITE/* && usage & D3DUSAGE_DYNAMIC*/)
 		{
-			buffer = (void*)vertexBuffer->getBuffer();
+			buffer = (void*)vertexBuffer->data();
 		}
 		else
 		{
diff --git a/src/D3D9/Direct3DVertexShader9.cpp b/src/D3D9/Direct3DVertexShader9.cpp
index 00af8da..2c4ece7 100644
--- a/src/D3D9/Direct3DVertexShader9.cpp
+++ b/src/D3D9/Direct3DVertexShader9.cpp
@@ -86,7 +86,7 @@
 			return INVALIDCALL();
 		}
 
-		vertexShader.getFunction(data, size);
+		UNIMPLEMENTED();
 
 		return D3D_OK;
 	}
diff --git a/src/D3D9/Direct3DVolumeTexture9.cpp b/src/D3D9/Direct3DVolumeTexture9.cpp
index 95ce903..5372a2e 100644
--- a/src/D3D9/Direct3DVolumeTexture9.cpp
+++ b/src/D3D9/Direct3DVolumeTexture9.cpp
@@ -190,13 +190,13 @@
 			source->lockInternal(0, 0, 0, sw::LOCK_READONLY, sw::PUBLIC);
 			dest->lockInternal(0, 0, 0, sw::LOCK_DISCARD, sw::PUBLIC);
 
-			int sWidth = source->getInternalWidth();
-			int sHeight = source->getInternalHeight();
-			int sDepth = source->getInternalDepth();
+			int sWidth = source->getWidth();
+			int sHeight = source->getHeight();
+			int sDepth = source->getDepth();
 
-			int dWidth = dest->getInternalWidth();
-			int dHeight = dest->getInternalHeight();
-			int dDepth = dest->getInternalDepth();
+			int dWidth = dest->getWidth();
+			int dHeight = dest->getHeight();
+			int dDepth = dest->getDepth();
 
 			D3DTEXTUREFILTERTYPE filter = GetAutoGenFilterType();
 
diff --git a/src/D3D9/SwiftShader.cpp b/src/D3D9/SwiftShader.cpp
index ecf7e4b..c2bba3a 100644
--- a/src/D3D9/SwiftShader.cpp
+++ b/src/D3D9/SwiftShader.cpp
@@ -22,9 +22,9 @@
 
 DEFINE_GUID(IID_SwiftShaderPrivateV1, 0x761954E6, 0xC357, 0x426d, 0xA6, 0x90, 0x00, 0x50, 0x56, 0xC0, 0x00, 0x08);
 
-extern SWFILTER maximumFilterQuality;
-extern SWFILTER maximumMipmapQuality;
-extern SWPERSPECTIVE perspectiveQuality;
+//extern SWFILTER maximumFilterQuality;
+//extern SWFILTER maximumMipmapQuality;
+//extern SWPERSPECTIVE perspectiveQuality;
 extern bool disableServer;
 
 namespace D3D9
@@ -85,13 +85,13 @@
 		switch(setting)
 		{
 		case SWS_MAXIMUMFILTERQUALITY:
-			maximumFilterQuality = (SWFILTER)value;
+		//	maximumFilterQuality = (SWFILTER)value;
 			break;
 		case SWS_MAXIMUMMIPMAPQUALITY:
-			maximumMipmapQuality = (SWFILTER)value;
+		//	maximumMipmapQuality = (SWFILTER)value;
 			break;
 		case SWS_PERSPECTIVEQUALITY:
-			perspectiveQuality = (SWPERSPECTIVE)value;
+		//	perspectiveQuality = (SWPERSPECTIVE)value;
 			break;
 		case SWS_DISABLESERVER:
 			disableServer = (value != FALSE);
diff --git a/src/Main/FrameBufferWin.hpp b/src/Main/FrameBufferWin.hpp
index c887c67..443638d 100644
--- a/src/Main/FrameBufferWin.hpp
+++ b/src/Main/FrameBufferWin.hpp
@@ -54,4 +54,6 @@
 	};
 }
 
+sw::FrameBufferWin *createFrameBufferWin(HWND windowHandle, int width, int height, bool fullscreen, bool topLeftOrigin);
+
 #endif	 //	sw_FrameBufferWin_hpp
diff --git a/src/Renderer/Renderer.hpp b/src/Renderer/Renderer.hpp
index 61f8273..c58e273 100644
--- a/src/Renderer/Renderer.hpp
+++ b/src/Renderer/Renderer.hpp
@@ -72,6 +72,15 @@
 		false   // leadingVertexFirst
 	};
 
+	static const Conventions Direct3D =
+	{
+		false,   // halfIntegerCoordinates
+		false,   // symmetricNormalizedDepth
+		false,   // booleanFaceRegister
+		false,   // fullPixelPositionRegister
+		true     // leadingVertexFirst
+	};
+
 	struct Query
 	{
 		Query()
