Add SwiftShader dump from Feb 6 2013
diff --git a/src/Renderer/Surface.cpp b/src/Renderer/Surface.cpp
index 8dc90ae..aadaf97 100644
--- a/src/Renderer/Surface.cpp
+++ b/src/Renderer/Surface.cpp
@@ -1,6 +1,6 @@
 // SwiftShader Software Renderer
 //
-// Copyright(c) 2005-2012 TransGaming Inc.
+// Copyright(c) 2005-2013 TransGaming Inc.
 //
 // All rights reserved. No part of this software may be copied, distributed, transmitted,
 // transcribed, stored in a retrieval system, translated into any human or computer
@@ -182,8 +182,8 @@
 			break;
 		case FORMAT_D32F:
 		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32F_TEXTURE:
-		case FORMAT_D32F_SHADOW:
+		case FORMAT_D32FS8_TEXTURE:
+		case FORMAT_D32FS8_SHADOW:
 			*((float*)element) = color.r;
 			break;
 		case FORMAT_D32F_COMPLEMENTARY:
@@ -536,15 +536,15 @@
 			break;
 		case FORMAT_D32F:
 		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32F_TEXTURE:
-		case FORMAT_D32F_SHADOW:
+		case FORMAT_D32FS8_TEXTURE:
+		case FORMAT_D32FS8_SHADOW:
 			r = *(float*)element;
 			g = r;
 			b = r;
 			a = r;
 			break;
 		case FORMAT_D32F_COMPLEMENTARY:
-			r = 1 - *(float*)element;
+			r = 1.0f - *(float*)element;
 			g = r;
 			b = r;
 			a = r;
@@ -655,13 +655,15 @@
 		{
 		#if S3TC_SUPPORT
 		case FORMAT_DXT1:
+		#endif
 		case FORMAT_ATI1:
 			return (unsigned char*)buffer + 8 * (x / 4) + (y / 4) * pitchB + z * sliceB;
+		#if S3TC_SUPPORT
 		case FORMAT_DXT3:
 		case FORMAT_DXT5:
+		#endif
 		case FORMAT_ATI2:
 			return (unsigned char*)buffer + 16 * (x / 4) + (y / 4) * pitchB + z * sliceB;
-		#endif
 		default:
 			return (unsigned char*)buffer + x * bytes + y * pitchB + z * sliceB;
 		}
@@ -692,7 +694,6 @@
 		external.sliceP = sliceP(external.width, external.height, external.format, renderTarget && !texture);
 		external.lock = LOCK_UNLOCKED;
 		external.dirty = false;
-		external.paletteUsed = 0;
 
 		internal.buffer = 0;
 		internal.width = width;
@@ -706,7 +707,6 @@
 		internal.sliceP = sliceP(internal.width, internal.height, internal.format, renderTarget);
 		internal.lock = LOCK_UNLOCKED;
 		internal.dirty = false;
-		internal.paletteUsed = 0;
 
 		stencil.buffer = 0;
 		stencil.width = width;
@@ -720,9 +720,9 @@
 		stencil.sliceP = sliceP(stencil.width, stencil.height, stencil.format, renderTarget);
 		stencil.lock = LOCK_UNLOCKED;
 		stencil.dirty = false;
-		stencil.paletteUsed = 0;
 
 		dirtyMipmaps = true;
+		paletteUsed = 0;
 	}
 
 	Surface::~Surface()
@@ -772,6 +772,8 @@
 			{
 				update(external, internal);
 			}
+
+			internal.dirty = false;
 		}
 
 		switch(lock)
@@ -841,17 +843,15 @@
 			}
 		}
 
-		if(external.dirty)
+		if(external.dirty || (isPalette(external.format) && paletteUsed != Surface::paletteID))
 		{
 			if(lock != LOCK_DISCARD)
 			{
 				update(internal, external);
 			}
-		}
 
-		if(isPalette(external.format) && internal.paletteUsed != Surface::paletteID)
-		{
-			update(internal, external);
+			external.dirty = false;
+			paletteUsed = Surface::paletteID;
 		}
 
 		switch(lock)
@@ -892,11 +892,6 @@
 			stencil.buffer = allocateBuffer(stencil.width, stencil.height, stencil.depth, stencil.format);
 		}
 
-		if(external.dirty)
-		{
-			update(stencil, external);   // FIXME: Only when not discarding
-		}
-
 		return stencil.lockRect(0, 0, front, LOCK_READWRITE);   // FIXME
 	}
 
@@ -940,9 +935,9 @@
 		case FORMAT_DXT1:				return 2;   // Column of four pixels
 		case FORMAT_DXT3:				return 4;   // Column of four pixels
 		case FORMAT_DXT5:				return 4;   // Column of four pixels
+		#endif
 		case FORMAT_ATI1:				return 2;   // Column of four pixels
 		case FORMAT_ATI2:				return 4;   // Column of four pixels
-		#endif
 		// Bumpmap formats
 		case FORMAT_V8U8:				return 2;
 		case FORMAT_L6V5U5:				return 2;
@@ -973,10 +968,10 @@
 		case FORMAT_D32F:				return 4;
 		case FORMAT_D32F_COMPLEMENTARY:	return 4;
 		case FORMAT_D32F_LOCKABLE:		return 4;
-		case FORMAT_D32F_TEXTURE:		return 4;
-		case FORMAT_D32F_SHADOW:		return 4;
-		case FORMAT_DF24:				return 4;
-		case FORMAT_DF16:				return 2;
+		case FORMAT_D32FS8_TEXTURE:		return 4;
+		case FORMAT_D32FS8_SHADOW:		return 4;
+		case FORMAT_DF24S8:				return 4;
+		case FORMAT_DF16S8:				return 2;
 		case FORMAT_INTZ:				return 4;
 		case FORMAT_S8:					return 1;
 		default:
@@ -1001,11 +996,11 @@
 		case FORMAT_DXT3:
 		case FORMAT_DXT5:
 			return 16 * ((width + 3) / 4);   // 128 bit per 4x4 block, computed per 4 rows
+		#endif
 		case FORMAT_ATI1:
 			return 2 * ((width + 3) / 4);    // 64 bit per 4x4 block, computed per row
 		case FORMAT_ATI2:
 			return 4 * ((width + 3) / 4);    // 128 bit per 4x4 block, computed per row
-		#endif
 		default:
 			return bytes(format) * width;
 		}
@@ -1032,9 +1027,9 @@
 		case FORMAT_DXT3:
 		case FORMAT_DXT5:
 			return pitchB(width, format, target) * ((height + 3) / 4);   // Pitch computed per 4 rows
+		#endif
 		case FORMAT_ATI1:   // Pitch computed per row
 		case FORMAT_ATI2:   // Pitch computed per row
-		#endif
 		default:
 			return pitchB(width, format, target) * height;
 		}
@@ -1077,9 +1072,6 @@
 			default:				genericUpdate(destination, source);		break;
 			}
 		}
-
-		source.dirty = false;
-		destination.paletteUsed = Surface::paletteID;
 	}
 
 	void Surface::genericUpdate(Buffer &destination, Buffer &source)
@@ -1792,13 +1784,15 @@
 		{
 		#if S3TC_SUPPORT
 		case FORMAT_DXT1:
+		#endif
 		case FORMAT_ATI1:
 			return width4 * height4 * depth / 2;
+		#if S3TC_SUPPORT
 		case FORMAT_DXT3:
 		case FORMAT_DXT5:
+		#endif
 		case FORMAT_ATI2:
 			return width4 * height4 * depth;
-		#endif
 		default:
 			return bytes(format) * width * height * depth;
 		}
@@ -1820,10 +1814,10 @@
 		case FORMAT_D24S8:
 		case FORMAT_D24FS8:
 		case FORMAT_S8:
-		case FORMAT_DF24:
-		case FORMAT_DF16:
-		case FORMAT_D32F_TEXTURE:
-		case FORMAT_D32F_SHADOW:
+		case FORMAT_DF24S8:
+		case FORMAT_DF16S8:
+		case FORMAT_D32FS8_TEXTURE:
+		case FORMAT_D32FS8_SHADOW:
 		case FORMAT_INTZ:
 			return true;
 		default:
@@ -1843,10 +1837,10 @@
 		case FORMAT_D32F:
 		case FORMAT_D32F_COMPLEMENTARY:
 		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_DF24:
-		case FORMAT_DF16:
-		case FORMAT_D32F_TEXTURE:
-		case FORMAT_D32F_SHADOW:
+		case FORMAT_DF24S8:
+		case FORMAT_DF16S8:
+		case FORMAT_D32FS8_TEXTURE:
+		case FORMAT_D32FS8_SHADOW:
 		case FORMAT_INTZ:
 			return true;
 		case FORMAT_S8:
@@ -1895,8 +1889,8 @@
 		case FORMAT_D32F:
 		case FORMAT_D32F_COMPLEMENTARY:
 		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32F_TEXTURE:
-		case FORMAT_D32F_SHADOW:
+		case FORMAT_D32FS8_TEXTURE:
+		case FORMAT_D32FS8_SHADOW:
 			return true;
 		default:
 			ASSERT(false);
@@ -1918,8 +1912,8 @@
 		case FORMAT_D32F:
 		case FORMAT_D32F_COMPLEMENTARY:
 		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32F_TEXTURE:
-		case FORMAT_D32F_SHADOW:
+		case FORMAT_D32FS8_TEXTURE:
+		case FORMAT_D32FS8_SHADOW:
 		case FORMAT_A8:
 		case FORMAT_R8:
 		case FORMAT_L8:
@@ -1996,9 +1990,9 @@
 		case FORMAT_DXT1:
 		case FORMAT_DXT3:
 		case FORMAT_DXT5:
+		#endif
 		case FORMAT_ATI1:
 		case FORMAT_ATI2:
-		#endif
 			return true;
 		default:
 			return false;
@@ -2032,10 +2026,10 @@
 		case FORMAT_DXT1:
 		case FORMAT_DXT3:
 		case FORMAT_DXT5:
+		#endif
 		case FORMAT_ATI1:
 		case FORMAT_ATI2:
 			return true;
-		#endif
 		default:
 			return false;
 		}
@@ -2060,8 +2054,8 @@
 		case FORMAT_G32R32F:		return 2;
 		case FORMAT_A32B32G32R32F:	return 4;
 		case FORMAT_D32F_LOCKABLE:	return 1;
-		case FORMAT_D32F_TEXTURE:	return 1;
-		case FORMAT_D32F_SHADOW:	return 1;
+		case FORMAT_D32FS8_TEXTURE:	return 1;
+		case FORMAT_D32FS8_SHADOW:	return 1;
 		case FORMAT_A8:				return 1;
 		case FORMAT_R8:				return 1;
 		case FORMAT_L8:				return 1;
@@ -2466,8 +2460,8 @@
 		int y1 = y0 + height;
 
 		if(internal.format == FORMAT_D32F_LOCKABLE ||
-		   internal.format == FORMAT_D32F_TEXTURE ||
-		   internal.format == FORMAT_D32F_SHADOW)
+		   internal.format == FORMAT_D32FS8_TEXTURE ||
+		   internal.format == FORMAT_D32FS8_SHADOW)
 		{
 			float *target = (float*)lockInternal(0, 0, 0, lock, PUBLIC) + x0 + width2 * y0;
 
@@ -2837,12 +2831,12 @@
 
 	bool Surface::identicalFormats() const
 	{
-		return external.format  == internal.format &&
-		       external.width   == internal.width &&
-			   external.height  == internal.height &&
-			   external.depth   == internal.depth &&
-			   external.pitchB  == internal.pitchB &&
-			   external.sliceB  == internal.sliceB;
+		return external.format == internal.format &&
+		       external.width  == internal.width &&
+			   external.height == internal.height &&
+			   external.depth  == internal.depth &&
+			   external.pitchB == internal.pitchB &&
+			   external.sliceB == internal.sliceB;
 	}
 
 	Format Surface::selectInternalFormat(Format format) const
@@ -2900,11 +2894,11 @@
 		case FORMAT_DXT3:
 		case FORMAT_DXT5:
 			return FORMAT_A8R8G8B8;
+		#endif
 		case FORMAT_ATI1:
 			return FORMAT_R8;
 		case FORMAT_ATI2:
 			return FORMAT_G8R8;
-		#endif
 		// Bumpmap formats
 		case FORMAT_V8U8:			return FORMAT_V8U8;
 		case FORMAT_L6V5U5:			return FORMAT_X8L8V8U8;
@@ -2933,7 +2927,7 @@
 		case FORMAT_D24FS8:
 			if(hasParent)   // Texture
 			{
-				return FORMAT_D32F_SHADOW;
+				return FORMAT_D32FS8_SHADOW;
 			}
 			else if(complementaryDepthBuffer)
 			{
@@ -2943,10 +2937,11 @@
 			{
 				return FORMAT_D32F;
 			}
-		case FORMAT_D32F_LOCKABLE:	return FORMAT_D32F_LOCKABLE;
-		case FORMAT_INTZ:			return FORMAT_D32F_TEXTURE;
-		case FORMAT_DF24:			return FORMAT_D32F_SHADOW;
-		case FORMAT_DF16:			return FORMAT_D32F_SHADOW;
+		case FORMAT_D32F_LOCKABLE:  return FORMAT_D32F_LOCKABLE;
+		case FORMAT_D32FS8_TEXTURE: return FORMAT_D32FS8_TEXTURE;
+		case FORMAT_INTZ:           return FORMAT_D32FS8_TEXTURE;
+		case FORMAT_DF24S8:         return FORMAT_D32FS8_SHADOW;
+		case FORMAT_DF16S8:         return FORMAT_D32FS8_SHADOW;
 		default:
 			ASSERT(false);
 		}