Adapt D3D9 to Renderer changes.

Bug 22533227

Change-Id: Ib1b17bcace85bc6204589a48c65f60c94ffbe5cc
Reviewed-on: https://swiftshader-review.googlesource.com/3732
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
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()