Update SwiftShader to April code dump.

April code dump from Transgaming. Adds new shader compiler.
diff --git a/src/Renderer/SetupProcessor.cpp b/src/Renderer/SetupProcessor.cpp
index 1e737a4..775564e 100644
--- a/src/Renderer/SetupProcessor.cpp
+++ b/src/Renderer/SetupProcessor.cpp
@@ -1,6 +1,6 @@
 // SwiftShader Software Renderer
 //
-// Copyright(c) 2005-2011 TransGaming Inc.
+// Copyright(c) 2005-2012 TransGaming Inc.
 //
 // All rights reserved. No part of this software may be copied, distributed, transmitted,
 // transcribed, stored in a retrieval system, translated into any human or computer
@@ -14,7 +14,6 @@
 #include "SetupRoutine.hpp"
 #include "Primitive.hpp"
 #include "Polygon.hpp"
-#include "Viewport.hpp"
 #include "Context.hpp"
 #include "Renderer.hpp"
 #include "Constants.hpp"
@@ -23,6 +22,7 @@
 namespace sw
 {
 	extern bool complementaryDepthBuffer;
+	extern bool fullPixelPositionRegister;
 
 	unsigned int SetupProcessor::States::computeHash()
 	{
@@ -54,6 +54,7 @@
 
 	SetupProcessor::SetupProcessor(Context *context) : context(context)
 	{
+		precacheDLL = 0;
 		routineCache = 0;
 		setRoutineCacheSize(1024);
 	}
@@ -68,11 +69,14 @@
 	{
 		State state;
 
+		bool vPosZW = (context->pixelShader && context->pixelShader->vPosDeclared && fullPixelPositionRegister);
+
 		state.isDrawPoint = context->isDrawPoint(true);
 		state.isDrawLine = context->isDrawLine(true);
 		state.isDrawTriangle = context->isDrawTriangle(false);
 		state.isDrawSolidTriangle = context->isDrawTriangle(true);
-		state.interpolateDepth = context->depthBufferActive() || context->pixelFogActive() != Context::FOG_NONE;
+		state.interpolateZ = context->depthBufferActive() || context->pixelFogActive() != Context::FOG_NONE || vPosZW;
+		state.interpolateW = context->perspectiveActive() || vPosZW;
 		state.perspective = context->perspectiveActive();
 		state.pointSprite = context->pointSpriteActive();
 		state.cullMode = context->cullMode;
@@ -135,8 +139,8 @@
 
 						switch(context->pixelShader->semantic[interpolant][component - project].usage)
 						{
-						case ShaderOperation::USAGE_TEXCOORD: flat = point && !sprite; break;
-						case ShaderOperation::USAGE_COLOR:    flat = flatShading;      break;
+						case Shader::USAGE_TEXCOORD: flat = point && !sprite; break;
+						case Shader::USAGE_COLOR:    flat = flatShading;      break;
 						}
 
 						state.gradient[interpolant][component].attribute = input;
@@ -157,11 +161,11 @@
 					{
 					case 0xFF:
 						break;
-					case ShaderOperation::USAGE_TEXCOORD:
+					case Shader::USAGE_TEXCOORD:
 						state.gradient[interpolant][component].attribute = T0 + index;
 						state.gradient[interpolant][component].flat = point && !sprite;
 						break;
-					case ShaderOperation::USAGE_COLOR:
+					case Shader::USAGE_COLOR:
 						state.gradient[interpolant][component].attribute = D0 + index;
 						state.gradient[interpolant][component].flat = flatShading;
 						break;