diff --git a/src/Device/Blitter.cpp b/src/Device/Blitter.cpp
index c3b7b08..a4be043 100644
--- a/src/Device/Blitter.cpp
+++ b/src/Device/Blitter.cpp
@@ -67,13 +67,6 @@
 			         ((uint16_t)(63 * g + 0.5f) << 5) |
 			         ((uint16_t)(31 * r + 0.5f) << 11);
 			break;
-		case FORMAT_X8B8G8R8:
-			if((rgbaMask & 0x7) != 0x7) return false;
-			packed = ((uint32_t)(255) << 24) |
-			         ((uint32_t)(255 * b + 0.5f) << 16) |
-			         ((uint32_t)(255 * g + 0.5f) << 8) |
-			         ((uint32_t)(255 * r + 0.5f) << 0);
-			break;
 		case FORMAT_A8B8G8R8:
 			if((rgbaMask & 0xF) != 0xF) return false;
 			packed = ((uint32_t)(255 * a + 0.5f) << 24) |
@@ -81,13 +74,6 @@
 			         ((uint32_t)(255 * g + 0.5f) << 8) |
 			         ((uint32_t)(255 * r + 0.5f) << 0);
 			break;
-		case FORMAT_X8R8G8B8:
-			if((rgbaMask & 0x7) != 0x7) return false;
-			packed = ((uint32_t)(255) << 24) |
-			         ((uint32_t)(255 * r + 0.5f) << 16) |
-			         ((uint32_t)(255 * g + 0.5f) << 8) |
-			         ((uint32_t)(255 * b + 0.5f) << 0);
-			break;
 		case FORMAT_A8R8G8B8:
 			if((rgbaMask & 0xF) != 0xF) return false;
 			packed = ((uint32_t)(255 * a + 0.5f) << 24) |
@@ -225,13 +211,6 @@
 
 		switch(state.sourceFormat)
 		{
-		case FORMAT_L8:
-			c.xyz = Float(Int(*Pointer<Byte>(element)));
-			c.w = float(0xFF);
-			break;
-		case FORMAT_A8:
-			c.w = Float(Int(*Pointer<Byte>(element)));
-			break;
 		case FORMAT_R8I:
 		case FORMAT_R8_SNORM:
 			c.x = Float(Int(*Pointer<SByte>(element)));
@@ -270,33 +249,6 @@
 		case FORMAT_SRGB8_A8:
 			c = Float4(*Pointer<Byte4>(element));
 			break;
-		case FORMAT_X8R8G8B8:
-			c = Float4(*Pointer<Byte4>(element)).zyxw;
-			c.w = float(0xFF);
-			break;
-		case FORMAT_R8G8B8:
-			c.z = Float(Int(*Pointer<Byte>(element + 0)));
-			c.y = Float(Int(*Pointer<Byte>(element + 1)));
-			c.x = Float(Int(*Pointer<Byte>(element + 2)));
-			c.w = float(0xFF);
-			break;
-		case FORMAT_B8G8R8:
-			c.x = Float(Int(*Pointer<Byte>(element + 0)));
-			c.y = Float(Int(*Pointer<Byte>(element + 1)));
-			c.z = Float(Int(*Pointer<Byte>(element + 2)));
-			c.w = float(0xFF);
-			break;
-		case FORMAT_X8B8G8R8I:
-		case FORMAT_X8B8G8R8_SNORM:
-			c = Float4(*Pointer<SByte4>(element));
-			c.w = float(0x7F);
-			break;
-		case FORMAT_X8B8G8R8:
-		case FORMAT_X8B8G8R8UI:
-		case FORMAT_SRGB8_X8:
-			c = Float4(*Pointer<Byte4>(element));
-			c.w = float(0xFF);
-			break;
 		case FORMAT_A16B16G16R16I:
 			c = Float4(*Pointer<Short4>(element));
 			break;
@@ -304,28 +256,12 @@
 		case FORMAT_A16B16G16R16UI:
 			c = Float4(*Pointer<UShort4>(element));
 			break;
-		case FORMAT_X16B16G16R16I:
-			c = Float4(*Pointer<Short4>(element));
-			c.w = float(0x7FFF);
-			break;
-		case FORMAT_X16B16G16R16UI:
-			c = Float4(*Pointer<UShort4>(element));
-			c.w = float(0xFFFF);
-			break;
 		case FORMAT_A32B32G32R32I:
 			c = Float4(*Pointer<Int4>(element));
 			break;
 		case FORMAT_A32B32G32R32UI:
 			c = Float4(*Pointer<UInt4>(element));
 			break;
-		case FORMAT_X32B32G32R32I:
-			c = Float4(*Pointer<Int4>(element));
-			c.w = float(0x7FFFFFFF);
-			break;
-		case FORMAT_X32B32G32R32UI:
-			c = Float4(*Pointer<UInt4>(element));
-			c.w = float(0xFFFFFFFF);
-			break;
 		case FORMAT_G8R8I:
 		case FORMAT_G8R8_SNORM:
 			c.x = Float(Int(*Pointer<SByte>(element + 0)));
@@ -362,10 +298,6 @@
 		case FORMAT_A32B32G32R32F:
 			c = *Pointer<Float4>(element);
 			break;
-		case FORMAT_X32B32G32R32F:
-		case FORMAT_X32B32G32R32F_UNSIGNED:
-		case FORMAT_B32G32R32F:
-			c.z = *Pointer<Float>(element + 8);
 		case FORMAT_G32R32F:
 			c.x = *Pointer<Float>(element + 0);
 			c.y = *Pointer<Float>(element + 4);
@@ -392,19 +324,8 @@
 		case FORMAT_D24X8:
 			c.x = Float(Int((*Pointer<UInt>(element) & UInt(0xFFFFFF00)) >> 8));
 			break;
-		case FORMAT_D32:
-			c.x = Float(Int((*Pointer<UInt>(element))));
-			break;
-		case FORMAT_D32F_COMPLEMENTARY:
-		case FORMAT_D32FS8_COMPLEMENTARY:
-			c.x = 1.0f - *Pointer<Float>(element);
-			break;
 		case FORMAT_D32F:
 		case FORMAT_D32FS8:
-		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32FS8_TEXTURE:
-		case FORMAT_D32F_SHADOW:
-		case FORMAT_D32FS8_SHADOW:
 			c.x = *Pointer<Float>(element);
 			break;
 		case FORMAT_S8:
@@ -427,12 +348,6 @@
 
 		switch(state.destFormat)
 		{
-		case FORMAT_L8:
-			*Pointer<Byte>(element) = Byte(RoundInt(Float(c.x)));
-			break;
-		case FORMAT_A8:
-			if(writeA) { *Pointer<Byte>(element) = Byte(RoundInt(Float(c.w))); }
-			break;
 		case FORMAT_A8R8G8B8:
 			if(writeRGBA)
 			{
@@ -462,45 +377,6 @@
 				if(writeA) { *Pointer<Byte>(element + 3) = Byte(RoundInt(Float(c.w))); }
 			}
 			break;
-		case FORMAT_X8R8G8B8:
-			if(writeRGBA)
-			{
-				Short4 c0 = RoundShort4(c.zyxw) | Short4(0x0000, 0x0000, 0x0000, 0x00FF);
-				*Pointer<Byte4>(element) = Byte4(PackUnsigned(c0, c0));
-			}
-			else
-			{
-				if(writeB) { *Pointer<Byte>(element + 0) = Byte(RoundInt(Float(c.z))); }
-				if(writeG) { *Pointer<Byte>(element + 1) = Byte(RoundInt(Float(c.y))); }
-				if(writeR) { *Pointer<Byte>(element + 2) = Byte(RoundInt(Float(c.x))); }
-				if(writeA) { *Pointer<Byte>(element + 3) = Byte(0xFF); }
-			}
-			break;
-		case FORMAT_X8B8G8R8:
-		case FORMAT_SRGB8_X8:
-			if(writeRGBA)
-			{
-				Short4 c0 = RoundShort4(c) | Short4(0x0000, 0x0000, 0x0000, 0x00FF);
-				*Pointer<Byte4>(element) = Byte4(PackUnsigned(c0, c0));
-			}
-			else
-			{
-				if(writeR) { *Pointer<Byte>(element + 0) = Byte(RoundInt(Float(c.x))); }
-				if(writeG) { *Pointer<Byte>(element + 1) = Byte(RoundInt(Float(c.y))); }
-				if(writeB) { *Pointer<Byte>(element + 2) = Byte(RoundInt(Float(c.z))); }
-				if(writeA) { *Pointer<Byte>(element + 3) = Byte(0xFF); }
-			}
-			break;
-		case FORMAT_R8G8B8:
-			if(writeR) { *Pointer<Byte>(element + 2) = Byte(RoundInt(Float(c.x))); }
-			if(writeG) { *Pointer<Byte>(element + 1) = Byte(RoundInt(Float(c.y))); }
-			if(writeB) { *Pointer<Byte>(element + 0) = Byte(RoundInt(Float(c.z))); }
-			break;
-		case FORMAT_B8G8R8:
-			if(writeR) { *Pointer<Byte>(element + 0) = Byte(RoundInt(Float(c.x))); }
-			if(writeG) { *Pointer<Byte>(element + 1) = Byte(RoundInt(Float(c.y))); }
-			if(writeB) { *Pointer<Byte>(element + 2) = Byte(RoundInt(Float(c.z))); }
-			break;
 		case FORMAT_A32B32G32R32F:
 			if(writeRGBA)
 			{
@@ -514,14 +390,6 @@
 				if(writeA) { *Pointer<Float>(element + 12) = c.w; }
 			}
 			break;
-		case FORMAT_X32B32G32R32F:
-		case FORMAT_X32B32G32R32F_UNSIGNED:
-			if(writeA) { *Pointer<Float>(element + 12) = 1.0f; }
-		case FORMAT_B32G32R32F:
-			if(writeR) { *Pointer<Float>(element) = c.x; }
-			if(writeG) { *Pointer<Float>(element + 4) = c.y; }
-			if(writeB) { *Pointer<Float>(element + 8) = c.z; }
-			break;
 		case FORMAT_G32R32F:
 			if(writeR && writeG)
 			{
@@ -539,12 +407,6 @@
 		case FORMAT_A8B8G8R8I:
 		case FORMAT_A8B8G8R8_SNORM:
 			if(writeA) { *Pointer<SByte>(element + 3) = SByte(RoundInt(Float(c.w))); }
-		case FORMAT_X8B8G8R8I:
-		case FORMAT_X8B8G8R8_SNORM:
-			if(writeA && (state.destFormat == FORMAT_X8B8G8R8I || state.destFormat == FORMAT_X8B8G8R8_SNORM))
-			{
-				*Pointer<SByte>(element + 3) = SByte(0x7F);
-			}
 			if(writeB) { *Pointer<SByte>(element + 2) = SByte(RoundInt(Float(c.z))); }
 		case FORMAT_G8R8I:
 		case FORMAT_G8R8_SNORM:
@@ -555,11 +417,6 @@
 			break;
 		case FORMAT_A8B8G8R8UI:
 			if(writeA) { *Pointer<Byte>(element + 3) = Byte(RoundInt(Float(c.w))); }
-		case FORMAT_X8B8G8R8UI:
-			if(writeA && (state.destFormat == FORMAT_X8B8G8R8UI))
-			{
-				*Pointer<Byte>(element + 3) = Byte(0xFF);
-			}
 			if(writeB) { *Pointer<Byte>(element + 2) = Byte(RoundInt(Float(c.z))); }
 		case FORMAT_G8R8UI:
 		case FORMAT_G8R8:
@@ -581,19 +438,6 @@
 				if(writeA) { *Pointer<Short>(element + 6) = Short(RoundInt(Float(c.w))); }
 			}
 			break;
-		case FORMAT_X16B16G16R16I:
-			if(writeRGBA)
-			{
-				*Pointer<Short4>(element) = Short4(RoundInt(c));
-			}
-			else
-			{
-				if(writeR) { *Pointer<Short>(element) = Short(RoundInt(Float(c.x))); }
-				if(writeG) { *Pointer<Short>(element + 2) = Short(RoundInt(Float(c.y))); }
-				if(writeB) { *Pointer<Short>(element + 4) = Short(RoundInt(Float(c.z))); }
-			}
-			if(writeA) { *Pointer<Short>(element + 6) = Short(0x7F); }
-			break;
 		case FORMAT_G16R16I:
 			if(writeR && writeG)
 			{
@@ -622,19 +466,6 @@
 				if(writeA) { *Pointer<UShort>(element + 6) = UShort(RoundInt(Float(c.w))); }
 			}
 			break;
-		case FORMAT_X16B16G16R16UI:
-			if(writeRGBA)
-			{
-				*Pointer<UShort4>(element) = UShort4(RoundInt(c));
-			}
-			else
-			{
-				if(writeR) { *Pointer<UShort>(element) = UShort(RoundInt(Float(c.x))); }
-				if(writeG) { *Pointer<UShort>(element + 2) = UShort(RoundInt(Float(c.y))); }
-				if(writeB) { *Pointer<UShort>(element + 4) = UShort(RoundInt(Float(c.z))); }
-			}
-			if(writeA) { *Pointer<UShort>(element + 6) = UShort(0xFF); }
-			break;
 		case FORMAT_G16R16UI:
 		case FORMAT_G16R16:
 			if(writeR && writeG)
@@ -663,19 +494,6 @@
 				if(writeA) { *Pointer<Int>(element + 12) = RoundInt(Float(c.w)); }
 			}
 			break;
-		case FORMAT_X32B32G32R32I:
-			if(writeRGBA)
-			{
-				*Pointer<Int4>(element) = RoundInt(c);
-			}
-			else
-			{
-				if(writeR) { *Pointer<Int>(element) = RoundInt(Float(c.x)); }
-				if(writeG) { *Pointer<Int>(element + 4) = RoundInt(Float(c.y)); }
-				if(writeB) { *Pointer<Int>(element + 8) = RoundInt(Float(c.z)); }
-			}
-			if(writeA) { *Pointer<Int>(element + 12) = Int(0x7FFFFFFF); }
-			break;
 		case FORMAT_G32R32I:
 			if(writeG) { *Pointer<Int>(element + 4) = RoundInt(Float(c.y)); }
 		case FORMAT_R32I:
@@ -694,19 +512,6 @@
 				if(writeA) { *Pointer<UInt>(element + 12) = As<UInt>(RoundInt(Float(c.w))); }
 			}
 			break;
-		case FORMAT_X32B32G32R32UI:
-			if(writeRGBA)
-			{
-				*Pointer<UInt4>(element) = UInt4(RoundInt(c));
-			}
-			else
-			{
-				if(writeR) { *Pointer<UInt>(element) = As<UInt>(RoundInt(Float(c.x))); }
-				if(writeG) { *Pointer<UInt>(element + 4) = As<UInt>(RoundInt(Float(c.y))); }
-				if(writeB) { *Pointer<UInt>(element + 8) = As<UInt>(RoundInt(Float(c.z))); }
-			}
-			if(writeA) { *Pointer<UInt4>(element + 12) = UInt4(0xFFFFFFFF); }
-			break;
 		case FORMAT_G32R32UI:
 			if(writeG) { *Pointer<UInt>(element + 4) = As<UInt>(RoundInt(Float(c.y))); }
 		case FORMAT_R32UI:
@@ -759,19 +564,8 @@
 		case FORMAT_D24X8:
 			*Pointer<UInt>(element) = UInt(RoundInt(Float(c.x)) << 8);
 			break;
-		case FORMAT_D32:
-			*Pointer<UInt>(element) = UInt(RoundInt(Float(c.x)));
-			break;
-		case FORMAT_D32F_COMPLEMENTARY:
-		case FORMAT_D32FS8_COMPLEMENTARY:
-			*Pointer<Float>(element) = 1.0f - c.x;
-			break;
 		case FORMAT_D32F:
 		case FORMAT_D32FS8:
-		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32FS8_TEXTURE:
-		case FORMAT_D32F_SHADOW:
-		case FORMAT_D32FS8_SHADOW:
 			*Pointer<Float>(element) = c.x;
 			break;
 		case FORMAT_S8:
@@ -791,8 +585,6 @@
 		{
 		case FORMAT_A8B8G8R8I:
 			c = Insert(c, Int(*Pointer<SByte>(element + 3)), 3);
-		case FORMAT_X8B8G8R8I:
-			c = Insert(c, Int(*Pointer<SByte>(element + 2)), 2);
 		case FORMAT_G8R8I:
 			c = Insert(c, Int(*Pointer<SByte>(element + 1)), 1);
 		case FORMAT_R8I:
@@ -800,8 +592,6 @@
 			break;
 		case FORMAT_A8B8G8R8UI:
 			c = Insert(c, Int(*Pointer<Byte>(element + 3)), 3);
-		case FORMAT_X8B8G8R8UI:
-			c = Insert(c, Int(*Pointer<Byte>(element + 2)), 2);
 		case FORMAT_G8R8UI:
 			c = Insert(c, Int(*Pointer<Byte>(element + 1)), 1);
 		case FORMAT_R8UI:
@@ -809,8 +599,6 @@
 			break;
 		case FORMAT_A16B16G16R16I:
 			c = Insert(c, Int(*Pointer<Short>(element + 6)), 3);
-		case FORMAT_X16B16G16R16I:
-			c = Insert(c, Int(*Pointer<Short>(element + 4)), 2);
 		case FORMAT_G16R16I:
 			c = Insert(c, Int(*Pointer<Short>(element + 2)), 1);
 		case FORMAT_R16I:
@@ -818,8 +606,6 @@
 			break;
 		case FORMAT_A16B16G16R16UI:
 			c = Insert(c, Int(*Pointer<UShort>(element + 6)), 3);
-		case FORMAT_X16B16G16R16UI:
-			c = Insert(c, Int(*Pointer<UShort>(element + 4)), 2);
 		case FORMAT_G16R16UI:
 			c = Insert(c, Int(*Pointer<UShort>(element + 2)), 1);
 		case FORMAT_R16UI:
@@ -829,9 +615,6 @@
 		case FORMAT_A32B32G32R32UI:
 			c = *Pointer<Int4>(element);
 			break;
-		case FORMAT_X32B32G32R32I:
-		case FORMAT_X32B32G32R32UI:
-			c = Insert(c, *Pointer<Int>(element + 8), 2);
 		case FORMAT_G32R32I:
 		case FORMAT_G32R32UI:
 			c = Insert(c, *Pointer<Int>(element + 4), 1);
@@ -858,11 +641,6 @@
 		{
 		case FORMAT_A8B8G8R8I:
 			if(writeA) { *Pointer<SByte>(element + 3) = SByte(Extract(c, 3)); }
-		case FORMAT_X8B8G8R8I:
-			if(writeA && (state.destFormat != FORMAT_A8B8G8R8I))
-			{
-				*Pointer<SByte>(element + 3) = SByte(0x7F);
-			}
 			if(writeB) { *Pointer<SByte>(element + 2) = SByte(Extract(c, 2)); }
 		case FORMAT_G8R8I:
 			if(writeG) { *Pointer<SByte>(element + 1) = SByte(Extract(c, 1)); }
@@ -871,11 +649,6 @@
 			break;
 		case FORMAT_A8B8G8R8UI:
 			if(writeA) { *Pointer<Byte>(element + 3) = Byte(Extract(c, 3)); }
-		case FORMAT_X8B8G8R8UI:
-			if(writeA && (state.destFormat != FORMAT_A8B8G8R8UI))
-			{
-				*Pointer<Byte>(element + 3) = Byte(0xFF);
-			}
 			if(writeB) { *Pointer<Byte>(element + 2) = Byte(Extract(c, 2)); }
 		case FORMAT_G8R8UI:
 			if(writeG) { *Pointer<Byte>(element + 1) = Byte(Extract(c, 1)); }
@@ -884,11 +657,6 @@
 			break;
 		case FORMAT_A16B16G16R16I:
 			if(writeA) { *Pointer<Short>(element + 6) = Short(Extract(c, 3)); }
-		case FORMAT_X16B16G16R16I:
-			if(writeA && (state.destFormat != FORMAT_A16B16G16R16I))
-			{
-				*Pointer<Short>(element + 6) = Short(0x7FFF);
-			}
 			if(writeB) { *Pointer<Short>(element + 4) = Short(Extract(c, 2)); }
 		case FORMAT_G16R16I:
 			if(writeG) { *Pointer<Short>(element + 2) = Short(Extract(c, 1)); }
@@ -897,11 +665,6 @@
 			break;
 		case FORMAT_A16B16G16R16UI:
 			if(writeA) { *Pointer<UShort>(element + 6) = UShort(Extract(c, 3)); }
-		case FORMAT_X16B16G16R16UI:
-			if(writeA && (state.destFormat != FORMAT_A16B16G16R16UI))
-			{
-				*Pointer<UShort>(element + 6) = UShort(0xFFFF);
-			}
 			if(writeB) { *Pointer<UShort>(element + 4) = UShort(Extract(c, 2)); }
 		case FORMAT_G16R16UI:
 			if(writeG) { *Pointer<UShort>(element + 2) = UShort(Extract(c, 1)); }
@@ -921,19 +684,6 @@
 				if(writeA) { *Pointer<Int>(element + 12) = Extract(c, 3); }
 			}
 			break;
-		case FORMAT_X32B32G32R32I:
-			if(writeRGBA)
-			{
-				*Pointer<Int4>(element) = c;
-			}
-			else
-			{
-				if(writeR) { *Pointer<Int>(element) = Extract(c, 0); }
-				if(writeG) { *Pointer<Int>(element + 4) = Extract(c, 1); }
-				if(writeB) { *Pointer<Int>(element + 8) = Extract(c, 2); }
-			}
-			if(writeA) { *Pointer<Int>(element + 12) = Int(0x7FFFFFFF); }
-			break;
 		case FORMAT_G32R32I:
 			if(writeR) { *Pointer<Int>(element) = Extract(c, 0); }
 			if(writeG) { *Pointer<Int>(element + 4) = Extract(c, 1); }
@@ -954,19 +704,6 @@
 				if(writeA) { *Pointer<UInt>(element + 12) = As<UInt>(Extract(c, 3)); }
 			}
 			break;
-		case FORMAT_X32B32G32R32UI:
-			if(writeRGBA)
-			{
-				*Pointer<UInt4>(element) = As<UInt4>(c);
-			}
-			else
-			{
-				if(writeR) { *Pointer<UInt>(element) = As<UInt>(Extract(c, 0)); }
-				if(writeG) { *Pointer<UInt>(element + 4) = As<UInt>(Extract(c, 1)); }
-				if(writeB) { *Pointer<UInt>(element + 8) = As<UInt>(Extract(c, 2)); }
-			}
-			if(writeA) { *Pointer<UInt>(element + 3) = UInt(0xFFFFFFFF); }
-			break;
 		case FORMAT_G32R32UI:
 			if(writeR) { *Pointer<UInt>(element) = As<UInt>(Extract(c, 0)); }
 			if(writeG) { *Pointer<UInt>(element + 4) = As<UInt>(Extract(c, 1)); }
@@ -985,23 +722,15 @@
 	{
 		switch(format)
 		{
-		case FORMAT_L8:
-		case FORMAT_A8:
 		case FORMAT_A8R8G8B8:
-		case FORMAT_X8R8G8B8:
 		case FORMAT_R8:
 		case FORMAT_G8R8:
-		case FORMAT_R8G8B8:
-		case FORMAT_B8G8R8:
-		case FORMAT_X8B8G8R8:
 		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_X8:
 		case FORMAT_SRGB8_A8:
 			scale = vector(0xFF, 0xFF, 0xFF, 0xFF);
 			break;
 		case FORMAT_R8_SNORM:
 		case FORMAT_G8R8_SNORM:
-		case FORMAT_X8B8G8R8_SNORM:
 		case FORMAT_A8B8G8R8_SNORM:
 			scale = vector(0x7F, 0x7F, 0x7F, 0x7F);
 			break;
@@ -1012,8 +741,6 @@
 		case FORMAT_R8UI:
 		case FORMAT_G8R8I:
 		case FORMAT_G8R8UI:
-		case FORMAT_X8B8G8R8I:
-		case FORMAT_X8B8G8R8UI:
 		case FORMAT_A8B8G8R8I:
 		case FORMAT_A8B8G8R8UI:
 		case FORMAT_R16I:
@@ -1021,22 +748,15 @@
 		case FORMAT_G16R16:
 		case FORMAT_G16R16I:
 		case FORMAT_G16R16UI:
-		case FORMAT_X16B16G16R16I:
-		case FORMAT_X16B16G16R16UI:
 		case FORMAT_A16B16G16R16I:
 		case FORMAT_A16B16G16R16UI:
 		case FORMAT_R32I:
 		case FORMAT_R32UI:
 		case FORMAT_G32R32I:
 		case FORMAT_G32R32UI:
-		case FORMAT_X32B32G32R32I:
-		case FORMAT_X32B32G32R32UI:
 		case FORMAT_A32B32G32R32I:
 		case FORMAT_A32B32G32R32UI:
 		case FORMAT_A32B32G32R32F:
-		case FORMAT_X32B32G32R32F:
-		case FORMAT_X32B32G32R32F_UNSIGNED:
-		case FORMAT_B32G32R32F:
 		case FORMAT_G32R32F:
 		case FORMAT_R32F:
 		case FORMAT_A2B10G10R10UI:
@@ -1055,17 +775,8 @@
 		case FORMAT_D24X8:
 			scale = vector(0xFFFFFF, 0.0f, 0.0f, 0.0f);
 			break;
-		case FORMAT_D32:
-			scale = vector(static_cast<float>(0xFFFFFFFF), 0.0f, 0.0f, 0.0f);
-			break;
 		case FORMAT_D32F:
 		case FORMAT_D32FS8:
-		case FORMAT_D32F_COMPLEMENTARY:
-		case FORMAT_D32FS8_COMPLEMENTARY:
-		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32FS8_TEXTURE:
-		case FORMAT_D32F_SHADOW:
-		case FORMAT_D32FS8_SHADOW:
 		case FORMAT_S8:
 			scale = vector(1.0f, 1.0f, 1.0f, 1.0f);
 			break;
@@ -1122,11 +833,7 @@
 			value *= Float4(scale.x / unscale.x, scale.y / unscale.y, scale.z / unscale.z, scale.w / unscale.w);
 		}
 
-		if(state.destFormat == FORMAT_X32B32G32R32F_UNSIGNED)
-		{
-			value = Max(value, Float4(0.0f));  // TODO: Only necessary if source is signed.
-		}
-		else if(Surface::isFloatFormat(state.sourceFormat) && !Surface::isFloatFormat(state.destFormat))
+		if(Surface::isFloatFormat(state.sourceFormat) && !Surface::isFloatFormat(state.destFormat))
 		{
 			value = Min(value, Float4(scale.x, scale.y, scale.z, scale.w));
 
diff --git a/src/Device/Sampler.cpp b/src/Device/Sampler.cpp
index 2f33684..2fc1bb1 100644
--- a/src/Device/Sampler.cpp
+++ b/src/Device/Sampler.cpp
@@ -494,11 +494,6 @@
 			return COMPARE_BYPASS;
 		}
 
-		if(internalTextureFormat == FORMAT_D32FS8_SHADOW)
-		{
-			return COMPARE_LESSEQUAL;
-		}
-
 		return compare;
 	}
 }
diff --git a/src/Device/Surface.cpp b/src/Device/Surface.cpp
index 15e1c77..ea3f488 100644
--- a/src/Device/Surface.cpp
+++ b/src/Device/Surface.cpp
@@ -39,9 +39,6 @@
 	extern bool complementaryDepthBuffer;
 	extern TranscendentalPrecision logPrecision;
 
-	unsigned int *Surface::palette = 0;
-	unsigned int Surface::paletteID = 0;
-
 	void Surface::Buffer::write(int x, int y, int z, const Color<float> &color)
 	{
 		ASSERT((x >= -border) && (x < (width + border)));
@@ -87,9 +84,6 @@
 
 		switch(format)
 		{
-		case FORMAT_A8:
-			*(unsigned char*)element = unorm<8>(a);
-			break;
 		case FORMAT_R8_SNORM:
 			*(char*)element = snorm<8>(r);
 			break;
@@ -114,18 +108,6 @@
 		case FORMAT_R32UI:
 			*(unsigned int*)element = static_cast<unsigned int>(r);
 			break;
-		case FORMAT_R3G3B2:
-			*(unsigned char*)element = (unorm<3>(r) << 5) | (unorm<3>(g) << 2) | (unorm<2>(b) << 0);
-			break;
-		case FORMAT_A8R3G3B2:
-			*(unsigned short*)element = (unorm<8>(a) << 8) | (unorm<3>(r) << 5) | (unorm<3>(g) << 2) | (unorm<2>(b) << 0);
-			break;
-		case FORMAT_X4R4G4B4:
-			*(unsigned short*)element = 0xF000 | (unorm<4>(r) << 8) | (unorm<4>(g) << 4) | (unorm<4>(b) << 0);
-			break;
-		case FORMAT_A4R4G4B4:
-			*(unsigned short*)element = (unorm<4>(a) << 12) | (unorm<4>(r) << 8) | (unorm<4>(g) << 4) | (unorm<4>(b) << 0);
-			break;
 		case FORMAT_R4G4B4A4:
 			*(unsigned short*)element = (unorm<4>(r) << 12) | (unorm<4>(g) << 8) | (unorm<4>(b) << 4) | (unorm<4>(a) << 0);
 			break;
@@ -138,15 +120,9 @@
 		case FORMAT_R5G5B5A1:
 			*(unsigned short*)element = (unorm<5>(r) << 11) | (unorm<5>(g) << 6) | (unorm<5>(b) << 1) | (unorm<5>(a) << 0);
 			break;
-		case FORMAT_X1R5G5B5:
-			*(unsigned short*)element = 0x8000 | (unorm<5>(r) << 10) | (unorm<5>(g) << 5) | (unorm<5>(b) << 0);
-			break;
 		case FORMAT_A8R8G8B8:
 			*(unsigned int*)element = (unorm<8>(a) << 24) | (unorm<8>(r) << 16) | (unorm<8>(g) << 8) | (unorm<8>(b) << 0);
 			break;
-		case FORMAT_X8R8G8B8:
-			*(unsigned int*)element = 0xFF000000 | (unorm<8>(r) << 16) | (unorm<8>(g) << 8) | (unorm<8>(b) << 0);
-			break;
 		case FORMAT_A8B8G8R8_SNORM:
 			*(unsigned int*)element = (static_cast<unsigned int>(snorm<8>(a)) << 24) |
 			                          (static_cast<unsigned int>(snorm<8>(b)) << 16) |
@@ -166,24 +142,6 @@
 		case FORMAT_A8B8G8R8UI:
 			*(unsigned int*)element = (ucast<8>(a) << 24) | (ucast<8>(b) << 16) | (ucast<8>(g) << 8) | (ucast<8>(r) << 0);
 			break;
-		case FORMAT_X8B8G8R8_SNORM:
-			*(unsigned int*)element = 0x7F000000 |
-			                          (static_cast<unsigned int>(snorm<8>(b)) << 16) |
-			                          (static_cast<unsigned int>(snorm<8>(g)) << 8) |
-			                          (static_cast<unsigned int>(snorm<8>(r)) << 0);
-			break;
-		case FORMAT_X8B8G8R8:
-		case FORMAT_SRGB8_X8:
-			*(unsigned int*)element = 0xFF000000 | (unorm<8>(b) << 16) | (unorm<8>(g) << 8) | (unorm<8>(r) << 0);
-			break;
-		case FORMAT_X8B8G8R8I:
-			*(unsigned int*)element = 0x7F000000 |
-			                          (static_cast<unsigned int>(scast<8>(b)) << 16) |
-			                          (static_cast<unsigned int>(scast<8>(g)) << 8) |
-			                          (static_cast<unsigned int>(scast<8>(r)) << 0);
-		case FORMAT_X8B8G8R8UI:
-			*(unsigned int*)element = 0xFF000000 | (ucast<8>(b) << 16) | (ucast<8>(g) << 8) | (ucast<8>(r) << 0);
-			break;
 		case FORMAT_A2R10G10B10:
 			*(unsigned int*)element = (unorm<2>(a) << 30) | (unorm<10>(r) << 20) | (unorm<10>(g) << 10) | (unorm<10>(b) << 0);
 			break;
@@ -238,16 +196,6 @@
 			((unsigned short*)element)[2] = static_cast<unsigned short>(ucast<16>(b));
 			((unsigned short*)element)[3] = static_cast<unsigned short>(ucast<16>(a));
 			break;
-		case FORMAT_X16B16G16R16I:
-			((unsigned short*)element)[0] = static_cast<unsigned short>(scast<16>(r));
-			((unsigned short*)element)[1] = static_cast<unsigned short>(scast<16>(g));
-			((unsigned short*)element)[2] = static_cast<unsigned short>(scast<16>(b));
-			break;
-		case FORMAT_X16B16G16R16UI:
-			((unsigned short*)element)[0] = static_cast<unsigned short>(ucast<16>(r));
-			((unsigned short*)element)[1] = static_cast<unsigned short>(ucast<16>(g));
-			((unsigned short*)element)[2] = static_cast<unsigned short>(ucast<16>(b));
-			break;
 		case FORMAT_A32B32G32R32I:
 		case FORMAT_A32B32G32R32UI:
 			((unsigned int*)element)[0] = static_cast<unsigned int>(r);
@@ -255,82 +203,19 @@
 			((unsigned int*)element)[2] = static_cast<unsigned int>(b);
 			((unsigned int*)element)[3] = static_cast<unsigned int>(a);
 			break;
-		case FORMAT_X32B32G32R32I:
-		case FORMAT_X32B32G32R32UI:
-			((unsigned int*)element)[0] = static_cast<unsigned int>(r);
-			((unsigned int*)element)[1] = static_cast<unsigned int>(g);
-			((unsigned int*)element)[2] = static_cast<unsigned int>(b);
-			break;
-		case FORMAT_V8U8:
-			*(unsigned short*)element = (snorm<8>(g) << 8) | (snorm<8>(r) << 0);
-			break;
-		case FORMAT_L6V5U5:
-			*(unsigned short*)element = (unorm<6>(b) << 10) | (snorm<5>(g) << 5) | (snorm<5>(r) << 0);
-			break;
-		case FORMAT_Q8W8V8U8:
-			*(unsigned int*)element = (snorm<8>(a) << 24) | (snorm<8>(b) << 16) | (snorm<8>(g) << 8) | (snorm<8>(r) << 0);
-			break;
-		case FORMAT_X8L8V8U8:
-			*(unsigned int*)element = 0xFF000000 | (unorm<8>(b) << 16) | (snorm<8>(g) << 8) | (snorm<8>(r) << 0);
-			break;
-		case FORMAT_V16U16:
-			*(unsigned int*)element = (snorm<16>(g) << 16) | (snorm<16>(r) << 0);
-			break;
-		case FORMAT_A2W10V10U10:
-			*(unsigned int*)element = (unorm<2>(a) << 30) | (snorm<10>(b) << 20) | (snorm<10>(g) << 10) | (snorm<10>(r) << 0);
-			break;
-		case FORMAT_A16W16V16U16:
-			((unsigned short*)element)[0] = snorm<16>(r);
-			((unsigned short*)element)[1] = snorm<16>(g);
-			((unsigned short*)element)[2] = snorm<16>(b);
-			((unsigned short*)element)[3] = unorm<16>(a);
-			break;
-		case FORMAT_Q16W16V16U16:
-			((unsigned short*)element)[0] = snorm<16>(r);
-			((unsigned short*)element)[1] = snorm<16>(g);
-			((unsigned short*)element)[2] = snorm<16>(b);
-			((unsigned short*)element)[3] = snorm<16>(a);
-			break;
-		case FORMAT_R8G8B8:
-			((unsigned char*)element)[0] = unorm<8>(b);
-			((unsigned char*)element)[1] = unorm<8>(g);
-			((unsigned char*)element)[2] = unorm<8>(r);
-			break;
-		case FORMAT_B8G8R8:
-			((unsigned char*)element)[0] = unorm<8>(r);
-			((unsigned char*)element)[1] = unorm<8>(g);
-			((unsigned char*)element)[2] = unorm<8>(b);
-			break;
 		case FORMAT_R16F:
 			*(half*)element = (half)r;
 			break;
-		case FORMAT_A16F:
-			*(half*)element = (half)a;
-			break;
 		case FORMAT_G16R16F:
 			((half*)element)[0] = (half)r;
 			((half*)element)[1] = (half)g;
 			break;
-		case FORMAT_X16B16G16R16F_UNSIGNED:
-			r = max(r, 0.0f); g = max(g, 0.0f); b = max(b, 0.0f);
-			// Fall through to FORMAT_X16B16G16R16F.
-		case FORMAT_X16B16G16R16F:
-			((half*)element)[3] = 1.0f;
-			// Fall through to FORMAT_B16G16R16F.
-		case FORMAT_B16G16R16F:
-			((half*)element)[0] = (half)r;
-			((half*)element)[1] = (half)g;
-			((half*)element)[2] = (half)b;
-			break;
 		case FORMAT_A16B16G16R16F:
 			((half*)element)[0] = (half)r;
 			((half*)element)[1] = (half)g;
 			((half*)element)[2] = (half)b;
 			((half*)element)[3] = (half)a;
 			break;
-		case FORMAT_A32F:
-			*(float*)element = a;
-			break;
 		case FORMAT_R32F:
 			*(float*)element = r;
 			break;
@@ -338,17 +223,6 @@
 			((float*)element)[0] = r;
 			((float*)element)[1] = g;
 			break;
-		case FORMAT_X32B32G32R32F_UNSIGNED:
-			r = max(r, 0.0f); g = max(g, 0.0f); b = max(b, 0.0f);
-			// Fall through to FORMAT_X32B32G32R32F.
-		case FORMAT_X32B32G32R32F:
-			((float*)element)[3] = 1.0f;
-			// Fall through to FORMAT_B32G32R32F.
-		case FORMAT_B32G32R32F:
-			((float*)element)[0] = r;
-			((float*)element)[1] = g;
-			((float*)element)[2] = b;
-			break;
 		case FORMAT_A32B32G32R32F:
 			((float*)element)[0] = r;
 			((float*)element)[1] = g;
@@ -357,45 +231,11 @@
 			break;
 		case FORMAT_D32F:
 		case FORMAT_D32FS8:
-		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32FS8_TEXTURE:
-		case FORMAT_D32F_SHADOW:
-		case FORMAT_D32FS8_SHADOW:
 			*((float*)element) = r;
 			break;
-		case FORMAT_D32F_COMPLEMENTARY:
-		case FORMAT_D32FS8_COMPLEMENTARY:
-			*((float*)element) = 1 - r;
-			break;
 		case FORMAT_S8:
 			*((unsigned char*)element) = unorm<8>(r);
 			break;
-		case FORMAT_L8:
-			*(unsigned char*)element = unorm<8>(r);
-			break;
-		case FORMAT_A4L4:
-			*(unsigned char*)element = (unorm<4>(a) << 4) | (unorm<4>(r) << 0);
-			break;
-		case FORMAT_L16:
-			*(unsigned short*)element = unorm<16>(r);
-			break;
-		case FORMAT_A8L8:
-			*(unsigned short*)element = (unorm<8>(a) << 8) | (unorm<8>(r) << 0);
-			break;
-		case FORMAT_L16F:
-			*(half*)element = (half)r;
-			break;
-		case FORMAT_A16L16F:
-			((half*)element)[0] = (half)r;
-			((half*)element)[1] = (half)a;
-			break;
-		case FORMAT_L32F:
-			*(float*)element = r;
-			break;
-		case FORMAT_A32L32F:
-			((float*)element)[0] = r;
-			((float*)element)[1] = a;
-			break;
 		default:
 			ASSERT(false);
 		}
@@ -431,36 +271,6 @@
 
 		switch(format)
 		{
-		case FORMAT_P8:
-			{
-				ASSERT(palette);
-
-				unsigned int abgr = palette[*(unsigned char*)element];
-
-				r = (abgr & 0x000000FF) * (1.0f / 0x000000FF);
-				g = (abgr & 0x0000FF00) * (1.0f / 0x0000FF00);
-				b = (abgr & 0x00FF0000) * (1.0f / 0x00FF0000);
-				a = (abgr & 0xFF000000) * (1.0f / 0xFF000000);
-			}
-			break;
-		case FORMAT_A8P8:
-			{
-				ASSERT(palette);
-
-				unsigned int bgr = palette[((unsigned char*)element)[0]];
-
-				r = (bgr & 0x000000FF) * (1.0f / 0x000000FF);
-				g = (bgr & 0x0000FF00) * (1.0f / 0x0000FF00);
-				b = (bgr & 0x00FF0000) * (1.0f / 0x00FF0000);
-				a = ((unsigned char*)element)[1] * (1.0f / 0xFF);
-			}
-			break;
-		case FORMAT_A8:
-			r = 0;
-			g = 0;
-			b = 0;
-			a = *(unsigned char*)element * (1.0f / 0xFF);
-			break;
 		case FORMAT_R8_SNORM:
 			r = max((*(signed char*)element) * (1.0f / 0x7F), -1.0f);
 			break;
@@ -473,44 +283,6 @@
 		case FORMAT_R8UI:
 			r = *(unsigned char*)element;
 			break;
-		case FORMAT_R3G3B2:
-			{
-				unsigned char rgb = *(unsigned char*)element;
-
-				r = (rgb & 0xE0) * (1.0f / 0xE0);
-				g = (rgb & 0x1C) * (1.0f / 0x1C);
-				b = (rgb & 0x03) * (1.0f / 0x03);
-			}
-			break;
-		case FORMAT_A8R3G3B2:
-			{
-				unsigned short argb = *(unsigned short*)element;
-
-				a = (argb & 0xFF00) * (1.0f / 0xFF00);
-				r = (argb & 0x00E0) * (1.0f / 0x00E0);
-				g = (argb & 0x001C) * (1.0f / 0x001C);
-				b = (argb & 0x0003) * (1.0f / 0x0003);
-			}
-			break;
-		case FORMAT_X4R4G4B4:
-			{
-				unsigned short rgb = *(unsigned short*)element;
-
-				r = (rgb & 0x0F00) * (1.0f / 0x0F00);
-				g = (rgb & 0x00F0) * (1.0f / 0x00F0);
-				b = (rgb & 0x000F) * (1.0f / 0x000F);
-			}
-			break;
-		case FORMAT_A4R4G4B4:
-			{
-				unsigned short argb = *(unsigned short*)element;
-
-				a = (argb & 0xF000) * (1.0f / 0xF000);
-				r = (argb & 0x0F00) * (1.0f / 0x0F00);
-				g = (argb & 0x00F0) * (1.0f / 0x00F0);
-				b = (argb & 0x000F) * (1.0f / 0x000F);
-			}
-			break;
 		case FORMAT_R4G4B4A4:
 			{
 				unsigned short rgba = *(unsigned short*)element;
@@ -550,15 +322,6 @@
 				a = (rgba & 0x0001) * (1.0f / 0x0001);
 			}
 			break;
-		case FORMAT_X1R5G5B5:
-			{
-				unsigned short xrgb = *(unsigned short*)element;
-
-				r = (xrgb & 0x7C00) * (1.0f / 0x7C00);
-				g = (xrgb & 0x03E0) * (1.0f / 0x03E0);
-				b = (xrgb & 0x001F) * (1.0f / 0x001F);
-			}
-			break;
 		case FORMAT_A8R8G8B8:
 			{
 				unsigned int argb = *(unsigned int*)element;
@@ -569,15 +332,6 @@
 				b = (argb & 0x000000FF) * (1.0f / 0x000000FF);
 			}
 			break;
-		case FORMAT_X8R8G8B8:
-			{
-				unsigned int xrgb = *(unsigned int*)element;
-
-				r = (xrgb & 0x00FF0000) * (1.0f / 0x00FF0000);
-				g = (xrgb & 0x0000FF00) * (1.0f / 0x0000FF00);
-				b = (xrgb & 0x000000FF) * (1.0f / 0x000000FF);
-			}
-			break;
 		case FORMAT_A8B8G8R8_SNORM:
 			{
 				signed char* abgr = (signed char*)element;
@@ -619,43 +373,6 @@
 				a = abgr[3];
 			}
 			break;
-		case FORMAT_X8B8G8R8_SNORM:
-			{
-				signed char* bgr = (signed char*)element;
-
-				r = max(bgr[0] * (1.0f / 0x7F), -1.0f);
-				g = max(bgr[1] * (1.0f / 0x7F), -1.0f);
-				b = max(bgr[2] * (1.0f / 0x7F), -1.0f);
-			}
-			break;
-		case FORMAT_X8B8G8R8:
-		case FORMAT_SRGB8_X8:
-			{
-				unsigned int xbgr = *(unsigned int*)element;
-
-				b = (xbgr & 0x00FF0000) * (1.0f / 0x00FF0000);
-				g = (xbgr & 0x0000FF00) * (1.0f / 0x0000FF00);
-				r = (xbgr & 0x000000FF) * (1.0f / 0x000000FF);
-			}
-			break;
-		case FORMAT_X8B8G8R8I:
-			{
-				signed char* bgr = (signed char*)element;
-
-				r = bgr[0];
-				g = bgr[1];
-				b = bgr[2];
-			}
-			break;
-		case FORMAT_X8B8G8R8UI:
-			{
-				unsigned char* bgr = (unsigned char*)element;
-
-				r = bgr[0];
-				g = bgr[1];
-				b = bgr[2];
-			}
-			break;
 		case FORMAT_G8R8_SNORM:
 			{
 				signed char* gr = (signed char*)element;
@@ -774,24 +491,6 @@
 				a = abgr[3];
 			}
 			break;
-		case FORMAT_X16B16G16R16I:
-			{
-				short* bgr = (short*)element;
-
-				r = bgr[0];
-				g = bgr[1];
-				b = bgr[2];
-			}
-			break;
-		case FORMAT_X16B16G16R16UI:
-			{
-				unsigned short* bgr = (unsigned short*)element;
-
-				r = bgr[0];
-				g = bgr[1];
-				b = bgr[2];
-			}
-			break;
 		case FORMAT_A32B32G32R32I:
 			{
 				int* abgr = (int*)element;
@@ -812,24 +511,6 @@
 				a = static_cast<float>(abgr[3]);
 			}
 			break;
-		case FORMAT_X32B32G32R32I:
-			{
-				int* bgr = (int*)element;
-
-				r = static_cast<float>(bgr[0]);
-				g = static_cast<float>(bgr[1]);
-				b = static_cast<float>(bgr[2]);
-			}
-			break;
-		case FORMAT_X32B32G32R32UI:
-			{
-				unsigned int* bgr = (unsigned int*)element;
-
-				r = static_cast<float>(bgr[0]);
-				g = static_cast<float>(bgr[1]);
-				b = static_cast<float>(bgr[2]);
-			}
-			break;
 		case FORMAT_G32R32I:
 			{
 				int* gr = (int*)element;
@@ -852,133 +533,6 @@
 		case FORMAT_R32UI:
 			r = static_cast<float>(*((unsigned int*)element));
 			break;
-		case FORMAT_V8U8:
-			{
-				unsigned short vu = *(unsigned short*)element;
-
-				r = ((int)(vu & 0x00FF) << 24) * (1.0f / 0x7F000000);
-				g = ((int)(vu & 0xFF00) << 16) * (1.0f / 0x7F000000);
-			}
-			break;
-		case FORMAT_L6V5U5:
-			{
-				unsigned short lvu = *(unsigned short*)element;
-
-				r = ((int)(lvu & 0x001F) << 27) * (1.0f / 0x78000000);
-				g = ((int)(lvu & 0x03E0) << 22) * (1.0f / 0x78000000);
-				b = (lvu & 0xFC00) * (1.0f / 0xFC00);
-			}
-			break;
-		case FORMAT_Q8W8V8U8:
-			{
-				unsigned int qwvu = *(unsigned int*)element;
-
-				r = ((int)(qwvu & 0x000000FF) << 24) * (1.0f / 0x7F000000);
-				g = ((int)(qwvu & 0x0000FF00) << 16) * (1.0f / 0x7F000000);
-				b = ((int)(qwvu & 0x00FF0000) << 8)  * (1.0f / 0x7F000000);
-				a = ((int)(qwvu & 0xFF000000) << 0)  * (1.0f / 0x7F000000);
-			}
-			break;
-		case FORMAT_X8L8V8U8:
-			{
-				unsigned int xlvu = *(unsigned int*)element;
-
-				r = ((int)(xlvu & 0x000000FF) << 24) * (1.0f / 0x7F000000);
-				g = ((int)(xlvu & 0x0000FF00) << 16) * (1.0f / 0x7F000000);
-				b = (xlvu & 0x00FF0000) * (1.0f / 0x00FF0000);
-			}
-			break;
-		case FORMAT_R8G8B8:
-			r = ((unsigned char*)element)[2] * (1.0f / 0xFF);
-			g = ((unsigned char*)element)[1] * (1.0f / 0xFF);
-			b = ((unsigned char*)element)[0] * (1.0f / 0xFF);
-			break;
-		case FORMAT_B8G8R8:
-			r = ((unsigned char*)element)[0] * (1.0f / 0xFF);
-			g = ((unsigned char*)element)[1] * (1.0f / 0xFF);
-			b = ((unsigned char*)element)[2] * (1.0f / 0xFF);
-			break;
-		case FORMAT_V16U16:
-			{
-				unsigned int vu = *(unsigned int*)element;
-
-				r = ((int)(vu & 0x0000FFFF) << 16) * (1.0f / 0x7FFF0000);
-				g = ((int)(vu & 0xFFFF0000) << 0)  * (1.0f / 0x7FFF0000);
-			}
-			break;
-		case FORMAT_A2W10V10U10:
-			{
-				unsigned int awvu = *(unsigned int*)element;
-
-				r = ((int)(awvu & 0x000003FF) << 22) * (1.0f / 0x7FC00000);
-				g = ((int)(awvu & 0x000FFC00) << 12) * (1.0f / 0x7FC00000);
-				b = ((int)(awvu & 0x3FF00000) << 2)  * (1.0f / 0x7FC00000);
-				a = (awvu & 0xC0000000) * (1.0f / 0xC0000000);
-			}
-			break;
-		case FORMAT_A16W16V16U16:
-			r = ((signed short*)element)[0] * (1.0f / 0x7FFF);
-			g = ((signed short*)element)[1] * (1.0f / 0x7FFF);
-			b = ((signed short*)element)[2] * (1.0f / 0x7FFF);
-			a = ((unsigned short*)element)[3] * (1.0f / 0xFFFF);
-			break;
-		case FORMAT_Q16W16V16U16:
-			r = ((signed short*)element)[0] * (1.0f / 0x7FFF);
-			g = ((signed short*)element)[1] * (1.0f / 0x7FFF);
-			b = ((signed short*)element)[2] * (1.0f / 0x7FFF);
-			a = ((signed short*)element)[3] * (1.0f / 0x7FFF);
-			break;
-		case FORMAT_L8:
-			r =
-			g =
-			b = *(unsigned char*)element * (1.0f / 0xFF);
-			break;
-		case FORMAT_A4L4:
-			{
-				unsigned char al = *(unsigned char*)element;
-
-				r =
-				g =
-				b = (al & 0x0F) * (1.0f / 0x0F);
-				a = (al & 0xF0) * (1.0f / 0xF0);
-			}
-			break;
-		case FORMAT_L16:
-			r =
-			g =
-			b = *(unsigned short*)element * (1.0f / 0xFFFF);
-			break;
-		case FORMAT_A8L8:
-			r =
-			g =
-			b = ((unsigned char*)element)[0] * (1.0f / 0xFF);
-			a = ((unsigned char*)element)[1] * (1.0f / 0xFF);
-			break;
-		case FORMAT_L16F:
-			r =
-			g =
-			b = *(half*)element;
-			break;
-		case FORMAT_A16L16F:
-			r =
-			g =
-			b = ((half*)element)[0];
-			a = ((half*)element)[1];
-			break;
-		case FORMAT_L32F:
-			r =
-			g =
-			b = *(float*)element;
-			break;
-		case FORMAT_A32L32F:
-			r =
-			g =
-			b = ((float*)element)[0];
-			a = ((float*)element)[1];
-			break;
-		case FORMAT_A16F:
-			a = *(half*)element;
-			break;
 		case FORMAT_R16F:
 			r = *(half*)element;
 			break;
@@ -986,22 +540,12 @@
 			r = ((half*)element)[0];
 			g = ((half*)element)[1];
 			break;
-		case FORMAT_X16B16G16R16F:
-		case FORMAT_X16B16G16R16F_UNSIGNED:
-		case FORMAT_B16G16R16F:
-			r = ((half*)element)[0];
-			g = ((half*)element)[1];
-			b = ((half*)element)[2];
-			break;
 		case FORMAT_A16B16G16R16F:
 			r = ((half*)element)[0];
 			g = ((half*)element)[1];
 			b = ((half*)element)[2];
 			a = ((half*)element)[3];
 			break;
-		case FORMAT_A32F:
-			a = *(float*)element;
-			break;
 		case FORMAT_R32F:
 			r = *(float*)element;
 			break;
@@ -1009,13 +553,6 @@
 			r = ((float*)element)[0];
 			g = ((float*)element)[1];
 			break;
-		case FORMAT_X32B32G32R32F:
-		case FORMAT_X32B32G32R32F_UNSIGNED:
-		case FORMAT_B32G32R32F:
-			r = ((float*)element)[0];
-			g = ((float*)element)[1];
-			b = ((float*)element)[2];
-			break;
 		case FORMAT_A32B32G32R32F:
 			r = ((float*)element)[0];
 			g = ((float*)element)[1];
@@ -1024,22 +561,11 @@
 			break;
 		case FORMAT_D32F:
 		case FORMAT_D32FS8:
-		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32FS8_TEXTURE:
-		case FORMAT_D32F_SHADOW:
-		case FORMAT_D32FS8_SHADOW:
 			r = *(float*)element;
 			g = r;
 			b = r;
 			a = r;
 			break;
-		case FORMAT_D32F_COMPLEMENTARY:
-		case FORMAT_D32FS8_COMPLEMENTARY:
-			r = 1.0f - *(float*)element;
-			g = r;
-			b = r;
-			a = r;
-			break;
 		case FORMAT_S8:
 			r = *(unsigned char*)element * (1.0f / 0xFF);
 			break;
@@ -1150,9 +676,6 @@
 
 			switch(format)
 			{
-			case FORMAT_DXT1:
-			case FORMAT_ATI1:
-			case FORMAT_ETC1:
 			case FORMAT_R11_EAC:
 			case FORMAT_SIGNED_R11_EAC:
 			case FORMAT_RGB8_ETC2:
@@ -1206,10 +729,6 @@
 			case FORMAT_RGBA_ASTC_12x12_KHR:
 			case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
 				return (unsigned char*)buffer + 16 * (x / 12) + (y / 12) * pitchB + z * sliceB;
-			case FORMAT_DXT3:
-			case FORMAT_DXT5:
-			case FORMAT_ATI2:
-				return (unsigned char*)buffer + 16 * (x / 4) + (y / 4) * pitchB + z * sliceB;
 			default:
 				return (unsigned char*)buffer + x * bytes + y * pitchB + z * samples * sliceB;
 			}
@@ -1306,7 +825,6 @@
 		stencil.dirty = false;
 
 		dirtyContents = true;
-		paletteUsed = 0;
 	}
 
 	Surface::Surface(Resource *texture, int width, int height, int depth, int border, int samples, Format format, bool lockable, bool renderTarget, int pitchPprovided) : lockable(lockable), renderTarget(renderTarget)
@@ -1363,7 +881,6 @@
 		stencil.dirty = false;
 
 		dirtyContents = true;
-		paletteUsed = 0;
 	}
 
 	Surface::~Surface()
@@ -1471,8 +988,6 @@
 				{
 					switch(external.format)
 					{
-					case FORMAT_R3G3B2:
-					case FORMAT_A8R3G3B2:
 					case FORMAT_A1R5G5B5:
 					case FORMAT_A2R10G10B10:
 					case FORMAT_A2B10G10R10:
@@ -1487,7 +1002,7 @@
 			}
 		}
 
-		if(external.dirty || (isPalette(external.format) && paletteUsed != Surface::paletteID))
+		if(external.dirty)
 		{
 			if(lock != LOCK_DISCARD)
 			{
@@ -1495,7 +1010,6 @@
 			}
 
 			external.dirty = false;
-			paletteUsed = Surface::paletteID;
 		}
 
 		switch(lock)
@@ -1556,44 +1070,26 @@
 		switch(format)
 		{
 		case FORMAT_NULL:				return 0;
-		case FORMAT_P8:					return 1;
-		case FORMAT_A8P8:				return 2;
-		case FORMAT_A8:					return 1;
 		case FORMAT_R8I:				return 1;
 		case FORMAT_R8:					return 1;
-		case FORMAT_R3G3B2:				return 1;
 		case FORMAT_R16I:				return 2;
 		case FORMAT_R16UI:				return 2;
-		case FORMAT_A8R3G3B2:			return 2;
 		case FORMAT_R5G6B5:				return 2;
 		case FORMAT_A1R5G5B5:			return 2;
-		case FORMAT_X1R5G5B5:			return 2;
-		case FORMAT_R5G5B5A1:           return 2;
-		case FORMAT_X4R4G4B4:			return 2;
-		case FORMAT_A4R4G4B4:			return 2;
-		case FORMAT_R4G4B4A4:           return 2;
-		case FORMAT_R8G8B8:				return 3;
-		case FORMAT_B8G8R8:             return 3;
+		case FORMAT_R5G5B5A1:			return 2;
+		case FORMAT_R4G4B4A4:			return 2;
 		case FORMAT_R32I:				return 4;
 		case FORMAT_R32UI:				return 4;
-		case FORMAT_X8R8G8B8:			return 4;
-	//	case FORMAT_X8G8R8B8Q:			return 4;
 		case FORMAT_A8R8G8B8:			return 4;
-	//	case FORMAT_A8G8R8B8Q:			return 4;
-		case FORMAT_X8B8G8R8I:			return 4;
-		case FORMAT_X8B8G8R8:			return 4;
-		case FORMAT_SRGB8_X8:			return 4;
 		case FORMAT_SRGB8_A8:			return 4;
 		case FORMAT_A8B8G8R8I:			return 4;
 		case FORMAT_R8UI:				return 1;
 		case FORMAT_G8R8UI:				return 2;
-		case FORMAT_X8B8G8R8UI:			return 4;
 		case FORMAT_A8B8G8R8UI:			return 4;
 		case FORMAT_A8B8G8R8:			return 4;
 		case FORMAT_R8_SNORM:			return 1;
-		case FORMAT_G8R8_SNORM:		return 2;
-		case FORMAT_X8B8G8R8_SNORM:	return 4;
-		case FORMAT_A8B8G8R8_SNORM:	return 4;
+		case FORMAT_G8R8_SNORM:			return 2;
+		case FORMAT_A8B8G8R8_SNORM:		return 4;
 		case FORMAT_A2R10G10B10:		return 4;
 		case FORMAT_A2B10G10R10:		return 4;
 		case FORMAT_A2B10G10R10UI:		return 4;
@@ -1604,22 +1100,12 @@
 		case FORMAT_G16R16:				return 4;
 		case FORMAT_G32R32I:			return 8;
 		case FORMAT_G32R32UI:			return 8;
-		case FORMAT_X16B16G16R16I:		return 8;
-		case FORMAT_X16B16G16R16UI:		return 8;
 		case FORMAT_A16B16G16R16I:		return 8;
 		case FORMAT_A16B16G16R16UI:		return 8;
 		case FORMAT_A16B16G16R16:		return 8;
-		case FORMAT_X32B32G32R32I:		return 16;
-		case FORMAT_X32B32G32R32UI:		return 16;
 		case FORMAT_A32B32G32R32I:		return 16;
 		case FORMAT_A32B32G32R32UI:		return 16;
 		// Compressed formats
-		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
-		case FORMAT_ATI1:				return 2;   // Column of four pixels
-		case FORMAT_ATI2:				return 4;   // Column of four pixels
-		case FORMAT_ETC1:				return 2;   // Column of four pixels
 		case FORMAT_R11_EAC:			return 2;
 		case FORMAT_SIGNED_R11_EAC:		return 2;
 		case FORMAT_RG11_EAC:			return 4;
@@ -1658,56 +1144,19 @@
 		case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR:
 		case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR:
 		case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR: return 0; // FIXME
-		// Bumpmap formats
-		case FORMAT_V8U8:				return 2;
-		case FORMAT_L6V5U5:				return 2;
-		case FORMAT_Q8W8V8U8:			return 4;
-		case FORMAT_X8L8V8U8:			return 4;
-		case FORMAT_A2W10V10U10:		return 4;
-		case FORMAT_V16U16:				return 4;
-		case FORMAT_A16W16V16U16:		return 8;
-		case FORMAT_Q16W16V16U16:		return 8;
-		// Luminance formats
-		case FORMAT_L8:					return 1;
-		case FORMAT_A4L4:				return 1;
-		case FORMAT_L16:				return 2;
-		case FORMAT_A8L8:				return 2;
-		case FORMAT_L16F:               return 2;
-		case FORMAT_A16L16F:            return 4;
-		case FORMAT_L32F:               return 4;
-		case FORMAT_A32L32F:            return 8;
 		// Floating-point formats
-		case FORMAT_A16F:				return 2;
 		case FORMAT_R16F:				return 2;
 		case FORMAT_G16R16F:			return 4;
-		case FORMAT_B16G16R16F:			return 6;
-		case FORMAT_X16B16G16R16F:		return 8;
 		case FORMAT_A16B16G16R16F:		return 8;
-		case FORMAT_X16B16G16R16F_UNSIGNED: return 8;
-		case FORMAT_A32F:				return 4;
 		case FORMAT_R32F:				return 4;
 		case FORMAT_G32R32F:			return 8;
-		case FORMAT_B32G32R32F:			return 12;
-		case FORMAT_X32B32G32R32F:		return 16;
 		case FORMAT_A32B32G32R32F:		return 16;
-		case FORMAT_X32B32G32R32F_UNSIGNED: return 16;
 		// Depth/stencil formats
 		case FORMAT_D16:				return 2;
-		case FORMAT_D32:				return 4;
 		case FORMAT_D24X8:				return 4;
 		case FORMAT_D24S8:				return 4;
-		case FORMAT_D24FS8:				return 4;
 		case FORMAT_D32F:				return 4;
 		case FORMAT_D32FS8:				return 4;
-		case FORMAT_D32F_COMPLEMENTARY:	return 4;
-		case FORMAT_D32FS8_COMPLEMENTARY: return 4;
-		case FORMAT_D32F_LOCKABLE:		return 4;
-		case FORMAT_D32FS8_TEXTURE:		return 4;
-		case FORMAT_D32F_SHADOW:		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;
 		case FORMAT_YV12_BT601:         return 1;   // Y plane only
 		case FORMAT_YV12_BT709:         return 1;   // Y plane only
@@ -1731,8 +1180,6 @@
 
 		switch(format)
 		{
-		case FORMAT_DXT1:
-		case FORMAT_ETC1:
 		case FORMAT_R11_EAC:
 		case FORMAT_SIGNED_R11_EAC:
 		case FORMAT_RGB8_ETC2:
@@ -1778,13 +1225,6 @@
 		case FORMAT_RGBA_ASTC_12x12_KHR:
 		case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
 			return 16 * ((width + 11) / 12);
-		case FORMAT_DXT3:
-		case FORMAT_DXT5:
-			return 16 * ((width + 3) / 4);   // 128 bit per 4x4 block, computed per 4 rows
-		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
 		case FORMAT_YV12_BT601:
 		case FORMAT_YV12_BT709:
 		case FORMAT_YV12_JFIF:
@@ -1813,10 +1253,6 @@
 
 		switch(format)
 		{
-		case FORMAT_DXT1:
-		case FORMAT_DXT3:
-		case FORMAT_DXT5:
-		case FORMAT_ETC1:
 		case FORMAT_R11_EAC:
 		case FORMAT_SIGNED_R11_EAC:
 		case FORMAT_RG11_EAC:
@@ -1861,9 +1297,6 @@
 		case FORMAT_RGBA_ASTC_12x12_KHR:
 		case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
 			return pitchB(width, border, format, target) * ((height + 11) / 12);   // Pitch computed per 12 rows
-		case FORMAT_ATI1:
-		case FORMAT_ATI2:
-			return pitchB(width, border, format, target) * align<4>(height);   // Pitch computed per row
 		default:
 			return pitchB(width, border, format, target) * height;   // Pitch computed per row
 		}
@@ -1887,22 +1320,10 @@
 
 			switch(source.format)
 			{
-			case FORMAT_R8G8B8:		decodeR8G8B8(destination, source);		break;   // FIXME: Check destination format
-			case FORMAT_X1R5G5B5:	decodeX1R5G5B5(destination, source);	break;   // FIXME: Check destination format
-			case FORMAT_A1R5G5B5:	decodeA1R5G5B5(destination, source);	break;   // FIXME: Check destination format
-			case FORMAT_X4R4G4B4:	decodeX4R4G4B4(destination, source);	break;   // FIXME: Check destination format
-			case FORMAT_A4R4G4B4:	decodeA4R4G4B4(destination, source);	break;   // FIXME: Check destination format
-			case FORMAT_P8:			decodeP8(destination, source);			break;   // FIXME: Check destination format
-			case FORMAT_DXT1:		decodeDXT1(destination, source);		break;   // FIXME: Check destination format
-			case FORMAT_DXT3:		decodeDXT3(destination, source);		break;   // FIXME: Check destination format
-			case FORMAT_DXT5:		decodeDXT5(destination, source);		break;   // FIXME: Check destination format
-			case FORMAT_ATI1:		decodeATI1(destination, source);		break;   // FIXME: Check destination format
-			case FORMAT_ATI2:		decodeATI2(destination, source);		break;   // FIXME: Check destination format
 			case FORMAT_R11_EAC:         decodeEAC(destination, source, 1, false); break; // FIXME: Check destination format
 			case FORMAT_SIGNED_R11_EAC:  decodeEAC(destination, source, 1, true);  break; // FIXME: Check destination format
 			case FORMAT_RG11_EAC:        decodeEAC(destination, source, 2, false); break; // FIXME: Check destination format
 			case FORMAT_SIGNED_RG11_EAC: decodeEAC(destination, source, 2, true);  break; // FIXME: Check destination format
-			case FORMAT_ETC1:
 			case FORMAT_RGB8_ETC2:                      decodeETC2(destination, source, 0, false); break; // FIXME: Check destination format
 			case FORMAT_SRGB8_ETC2:                     decodeETC2(destination, source, 0, true);  break; // FIXME: Check destination format
 			case FORMAT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:  decodeETC2(destination, source, 1, false); break; // FIXME: Check destination format
@@ -1990,277 +1411,6 @@
 		destination.unlockRect();
 	}
 
-	void Surface::decodeR8G8B8(Buffer &destination, Buffer &source)
-	{
-		unsigned char *sourceSlice = (unsigned char*)source.lockRect(0, 0, 0, sw::LOCK_READONLY);
-		unsigned char *destinationSlice = (unsigned char*)destination.lockRect(0, 0, 0, sw::LOCK_UPDATE);
-
-		int depth = min(destination.depth, source.depth);
-		int height = min(destination.height, source.height);
-		int width = min(destination.width, source.width);
-
-		for(int z = 0; z < depth; z++)
-		{
-			unsigned char *sourceRow = sourceSlice;
-			unsigned char *destinationRow = destinationSlice;
-
-			for(int y = 0; y < height; y++)
-			{
-				unsigned char *sourceElement = sourceRow;
-				unsigned char *destinationElement = destinationRow;
-
-				for(int x = 0; x < width; x++)
-				{
-					unsigned int b = sourceElement[0];
-					unsigned int g = sourceElement[1];
-					unsigned int r = sourceElement[2];
-
-					*(unsigned int*)destinationElement = 0xFF000000 | (r << 16) | (g << 8) | (b << 0);
-
-					sourceElement += source.bytes;
-					destinationElement += destination.bytes;
-				}
-
-				sourceRow += source.pitchB;
-				destinationRow += destination.pitchB;
-			}
-
-			sourceSlice += source.sliceB;
-			destinationSlice += destination.sliceB;
-		}
-
-		source.unlockRect();
-		destination.unlockRect();
-	}
-
-	void Surface::decodeX1R5G5B5(Buffer &destination, Buffer &source)
-	{
-		unsigned char *sourceSlice = (unsigned char*)source.lockRect(0, 0, 0, sw::LOCK_READONLY);
-		unsigned char *destinationSlice = (unsigned char*)destination.lockRect(0, 0, 0, sw::LOCK_UPDATE);
-
-		int depth = min(destination.depth, source.depth);
-		int height = min(destination.height, source.height);
-		int width = min(destination.width, source.width);
-
-		for(int z = 0; z < depth; z++)
-		{
-			unsigned char *sourceRow = sourceSlice;
-			unsigned char *destinationRow = destinationSlice;
-
-			for(int y = 0; y < height; y++)
-			{
-				unsigned char *sourceElement = sourceRow;
-				unsigned char *destinationElement = destinationRow;
-
-				for(int x = 0; x < width; x++)
-				{
-					unsigned int xrgb = *(unsigned short*)sourceElement;
-
-					unsigned int r = (((xrgb & 0x7C00) * 134771 + 0x800000) >> 8) & 0x00FF0000;
-					unsigned int g = (((xrgb & 0x03E0) * 16846 + 0x8000) >> 8) & 0x0000FF00;
-					unsigned int b = (((xrgb & 0x001F) * 2106  + 0x80) >> 8);
-
-					*(unsigned int*)destinationElement = 0xFF000000 | r | g | b;
-
-					sourceElement += source.bytes;
-					destinationElement += destination.bytes;
-				}
-
-				sourceRow += source.pitchB;
-				destinationRow += destination.pitchB;
-			}
-
-			sourceSlice += source.sliceB;
-			destinationSlice += destination.sliceB;
-		}
-
-		source.unlockRect();
-		destination.unlockRect();
-	}
-
-	void Surface::decodeA1R5G5B5(Buffer &destination, Buffer &source)
-	{
-		unsigned char *sourceSlice = (unsigned char*)source.lockRect(0, 0, 0, sw::LOCK_READONLY);
-		unsigned char *destinationSlice = (unsigned char*)destination.lockRect(0, 0, 0, sw::LOCK_UPDATE);
-
-		int depth = min(destination.depth, source.depth);
-		int height = min(destination.height, source.height);
-		int width = min(destination.width, source.width);
-
-		for(int z = 0; z < depth; z++)
-		{
-			unsigned char *sourceRow = sourceSlice;
-			unsigned char *destinationRow = destinationSlice;
-
-			for(int y = 0; y < height; y++)
-			{
-				unsigned char *sourceElement = sourceRow;
-				unsigned char *destinationElement = destinationRow;
-
-				for(int x = 0; x < width; x++)
-				{
-					unsigned int argb = *(unsigned short*)sourceElement;
-
-					unsigned int a =   (argb & 0x8000) * 130560;
-					unsigned int r = (((argb & 0x7C00) * 134771 + 0x800000) >> 8) & 0x00FF0000;
-					unsigned int g = (((argb & 0x03E0) * 16846  + 0x8000) >> 8) & 0x0000FF00;
-					unsigned int b = (((argb & 0x001F) * 2106   + 0x80) >> 8);
-
-					*(unsigned int*)destinationElement = a | r | g | b;
-
-					sourceElement += source.bytes;
-					destinationElement += destination.bytes;
-				}
-
-				sourceRow += source.pitchB;
-				destinationRow += destination.pitchB;
-			}
-
-			sourceSlice += source.sliceB;
-			destinationSlice += destination.sliceB;
-		}
-
-		source.unlockRect();
-		destination.unlockRect();
-	}
-
-	void Surface::decodeX4R4G4B4(Buffer &destination, Buffer &source)
-	{
-		unsigned char *sourceSlice = (unsigned char*)source.lockRect(0, 0, 0, sw::LOCK_READONLY);
-		unsigned char *destinationSlice = (unsigned char*)destination.lockRect(0, 0, 0, sw::LOCK_UPDATE);
-
-		int depth = min(destination.depth, source.depth);
-		int height = min(destination.height, source.height);
-		int width = min(destination.width, source.width);
-
-		for(int z = 0; z < depth; z++)
-		{
-			unsigned char *sourceRow = sourceSlice;
-			unsigned char *destinationRow = destinationSlice;
-
-			for(int y = 0; y < height; y++)
-			{
-				unsigned char *sourceElement = sourceRow;
-				unsigned char *destinationElement = destinationRow;
-
-				for(int x = 0; x < width; x++)
-				{
-					unsigned int xrgb = *(unsigned short*)sourceElement;
-
-					unsigned int r = ((xrgb & 0x0F00) * 0x00001100) & 0x00FF0000;
-					unsigned int g = ((xrgb & 0x00F0) * 0x00000110) & 0x0000FF00;
-					unsigned int b =  (xrgb & 0x000F) * 0x00000011;
-
-					*(unsigned int*)destinationElement = 0xFF000000 | r | g | b;
-
-					sourceElement += source.bytes;
-					destinationElement += destination.bytes;
-				}
-
-				sourceRow += source.pitchB;
-				destinationRow += destination.pitchB;
-			}
-
-			sourceSlice += source.sliceB;
-			destinationSlice += destination.sliceB;
-		}
-
-		source.unlockRect();
-		destination.unlockRect();
-	}
-
-	void Surface::decodeA4R4G4B4(Buffer &destination, Buffer &source)
-	{
-		unsigned char *sourceSlice = (unsigned char*)source.lockRect(0, 0, 0, sw::LOCK_READONLY);
-		unsigned char *destinationSlice = (unsigned char*)destination.lockRect(0, 0, 0, sw::LOCK_UPDATE);
-
-		int depth = min(destination.depth, source.depth);
-		int height = min(destination.height, source.height);
-		int width = min(destination.width, source.width);
-
-		for(int z = 0; z < depth; z++)
-		{
-			unsigned char *sourceRow = sourceSlice;
-			unsigned char *destinationRow = destinationSlice;
-
-			for(int y = 0; y < height; y++)
-			{
-				unsigned char *sourceElement = sourceRow;
-				unsigned char *destinationElement = destinationRow;
-
-				for(int x = 0; x < width; x++)
-				{
-					unsigned int argb = *(unsigned short*)sourceElement;
-
-					unsigned int a = ((argb & 0xF000) * 0x00011000) & 0xFF000000;
-					unsigned int r = ((argb & 0x0F00) * 0x00001100) & 0x00FF0000;
-					unsigned int g = ((argb & 0x00F0) * 0x00000110) & 0x0000FF00;
-					unsigned int b =  (argb & 0x000F) * 0x00000011;
-
-					*(unsigned int*)destinationElement = a | r | g | b;
-
-					sourceElement += source.bytes;
-					destinationElement += destination.bytes;
-				}
-
-				sourceRow += source.pitchB;
-				destinationRow += destination.pitchB;
-			}
-
-			sourceSlice += source.sliceB;
-			destinationSlice += destination.sliceB;
-		}
-
-		source.unlockRect();
-		destination.unlockRect();
-	}
-
-	void Surface::decodeP8(Buffer &destination, Buffer &source)
-	{
-		unsigned char *sourceSlice = (unsigned char*)source.lockRect(0, 0, 0, sw::LOCK_READONLY);
-		unsigned char *destinationSlice = (unsigned char*)destination.lockRect(0, 0, 0, sw::LOCK_UPDATE);
-
-		int depth = min(destination.depth, source.depth);
-		int height = min(destination.height, source.height);
-		int width = min(destination.width, source.width);
-
-		for(int z = 0; z < depth; z++)
-		{
-			unsigned char *sourceRow = sourceSlice;
-			unsigned char *destinationRow = destinationSlice;
-
-			for(int y = 0; y < height; y++)
-			{
-				unsigned char *sourceElement = sourceRow;
-				unsigned char *destinationElement = destinationRow;
-
-				for(int x = 0; x < width; x++)
-				{
-					unsigned int abgr = palette[*(unsigned char*)sourceElement];
-
-					unsigned int r = (abgr & 0x000000FF) << 16;
-					unsigned int g = (abgr & 0x0000FF00) << 0;
-					unsigned int b = (abgr & 0x00FF0000) >> 16;
-					unsigned int a = (abgr & 0xFF000000) >> 0;
-
-					*(unsigned int*)destinationElement = a | r | g | b;
-
-					sourceElement += source.bytes;
-					destinationElement += destination.bytes;
-				}
-
-				sourceRow += source.pitchB;
-				destinationRow += destination.pitchB;
-			}
-
-			sourceSlice += source.sliceB;
-			destinationSlice += destination.sliceB;
-		}
-
-		source.unlockRect();
-		destination.unlockRect();
-	}
-
 	void Surface::decodeDXT1(Buffer &internal, Buffer &external)
 	{
 		unsigned int *destSlice = (unsigned int*)internal.lockRect(0, 0, 0, LOCK_UPDATE);
@@ -2670,13 +1820,13 @@
 			{
 				uint64_t size = (uint64_t)sliceB(width, height, border, format, true) * depth * samples;
 
-				// FIXME: Unpacking byte4 to short4 in the sampler currently involves reading 8 bytes,
-				// and stencil operations also read 8 bytes per four 8-bit stencil values,
-				// so we have to allocate 4 extra bytes to avoid buffer overruns.
+								// FIXME: Unpacking byte4 to short4 in the sampler currently involves reading 8 bytes,
+								// and stencil operations also read 8 bytes per four 8-bit stencil values,
+								// so we have to allocate 4 extra bytes to avoid buffer overruns.
 				size += 4;
 
-				// We can only sample buffers smaller than 2 GiB.
-				// Force an out-of-memory if larger, or let the caller report an error.
+							// We can only sample buffers smaller than 2 GiB.
+								// Force an out-of-memory if larger, or let the caller report an error.
 				return size < 0x80000000u ? (size_t)size : std::numeric_limits<size_t>::max();
 			}
 		case FORMAT_YV12_BT601:
@@ -2700,24 +1850,13 @@
 	{
 		switch(format)
 		{
-		case FORMAT_D32:
 		case FORMAT_D16:
 		case FORMAT_D24X8:
 		case FORMAT_D32F:
-		case FORMAT_D32F_COMPLEMENTARY:
-		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32F_SHADOW:
 			return false;
 		case FORMAT_D24S8:
-		case FORMAT_D24FS8:
 		case FORMAT_S8:
-		case FORMAT_DF24S8:
-		case FORMAT_DF16S8:
-		case FORMAT_D32FS8_TEXTURE:
-		case FORMAT_D32FS8_SHADOW:
 		case FORMAT_D32FS8:
-		case FORMAT_D32FS8_COMPLEMENTARY:
-		case FORMAT_INTZ:
 			return true;
 		default:
 			return false;
@@ -2728,22 +1867,11 @@
 	{
 		switch(format)
 		{
-		case FORMAT_D32:
 		case FORMAT_D16:
 		case FORMAT_D24X8:
 		case FORMAT_D24S8:
-		case FORMAT_D24FS8:
 		case FORMAT_D32F:
 		case FORMAT_D32FS8:
-		case FORMAT_D32F_COMPLEMENTARY:
-		case FORMAT_D32FS8_COMPLEMENTARY:
-		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_DF24S8:
-		case FORMAT_DF16S8:
-		case FORMAT_D32FS8_TEXTURE:
-		case FORMAT_D32F_SHADOW:
-		case FORMAT_D32FS8_SHADOW:
-		case FORMAT_INTZ:
 			return true;
 		case FORMAT_S8:
 			return false;
@@ -2756,26 +1884,13 @@
 	{
 		switch(format)
 		{
-		case FORMAT_D32:
 		case FORMAT_D16:
 		case FORMAT_D24X8:
 		case FORMAT_D24S8:
-		case FORMAT_D24FS8:
 		case FORMAT_D32F:
 		case FORMAT_D32FS8:
-		case FORMAT_D32F_COMPLEMENTARY:
-		case FORMAT_D32FS8_COMPLEMENTARY:
-		case FORMAT_DF24S8:
-		case FORMAT_DF16S8:
-		case FORMAT_INTZ:
 		case FORMAT_S8:
-		case FORMAT_A8G8R8B8Q:
-		case FORMAT_X8G8R8B8Q:
 			return true;
-		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32FS8_TEXTURE:
-		case FORMAT_D32F_SHADOW:
-		case FORMAT_D32FS8_SHADOW:
 		default:
 			break;
 		}
@@ -2783,35 +1898,16 @@
 		return false;
 	}
 
-	bool Surface::isPalette(Format format)
-	{
-		switch(format)
-		{
-		case FORMAT_P8:
-		case FORMAT_A8P8:
-			return true;
-		default:
-			return false;
-		}
-	}
-
 	bool Surface::isFloatFormat(Format format)
 	{
 		switch(format)
 		{
 		case FORMAT_R5G6B5:
-		case FORMAT_R8G8B8:
-		case FORMAT_B8G8R8:
-		case FORMAT_X8R8G8B8:
-		case FORMAT_X8B8G8R8I:
-		case FORMAT_X8B8G8R8:
 		case FORMAT_A8R8G8B8:
-		case FORMAT_SRGB8_X8:
 		case FORMAT_SRGB8_A8:
 		case FORMAT_A8B8G8R8I:
 		case FORMAT_R8UI:
 		case FORMAT_G8R8UI:
-		case FORMAT_X8B8G8R8UI:
 		case FORMAT_A8B8G8R8UI:
 		case FORMAT_A8B8G8R8:
 		case FORMAT_G8R8I:
@@ -2820,31 +1916,18 @@
 		case FORMAT_A2B10G10R10UI:
 		case FORMAT_R8_SNORM:
 		case FORMAT_G8R8_SNORM:
-		case FORMAT_X8B8G8R8_SNORM:
 		case FORMAT_A8B8G8R8_SNORM:
 		case FORMAT_R16I:
 		case FORMAT_R16UI:
 		case FORMAT_G16R16I:
 		case FORMAT_G16R16UI:
 		case FORMAT_G16R16:
-		case FORMAT_X16B16G16R16I:
-		case FORMAT_X16B16G16R16UI:
 		case FORMAT_A16B16G16R16I:
 		case FORMAT_A16B16G16R16UI:
 		case FORMAT_A16B16G16R16:
-		case FORMAT_V8U8:
-		case FORMAT_Q8W8V8U8:
-		case FORMAT_X8L8V8U8:
-		case FORMAT_V16U16:
-		case FORMAT_A16W16V16U16:
-		case FORMAT_Q16W16V16U16:
-		case FORMAT_A8:
 		case FORMAT_R8I:
 		case FORMAT_R8:
 		case FORMAT_S8:
-		case FORMAT_L8:
-		case FORMAT_L16:
-		case FORMAT_A8L8:
 		case FORMAT_YV12_BT601:
 		case FORMAT_YV12_BT709:
 		case FORMAT_YV12_JFIF:
@@ -2852,35 +1935,17 @@
 		case FORMAT_R32UI:
 		case FORMAT_G32R32I:
 		case FORMAT_G32R32UI:
-		case FORMAT_X32B32G32R32I:
-		case FORMAT_X32B32G32R32UI:
 		case FORMAT_A32B32G32R32I:
 		case FORMAT_A32B32G32R32UI:
 			return false;
 		case FORMAT_R16F:
 		case FORMAT_G16R16F:
-		case FORMAT_B16G16R16F:
-		case FORMAT_X16B16G16R16F:
 		case FORMAT_A16B16G16R16F:
-		case FORMAT_X16B16G16R16F_UNSIGNED:
 		case FORMAT_R32F:
 		case FORMAT_G32R32F:
-		case FORMAT_B32G32R32F:
-		case FORMAT_X32B32G32R32F:
 		case FORMAT_A32B32G32R32F:
-		case FORMAT_X32B32G32R32F_UNSIGNED:
 		case FORMAT_D32F:
 		case FORMAT_D32FS8:
-		case FORMAT_D32F_COMPLEMENTARY:
-		case FORMAT_D32FS8_COMPLEMENTARY:
-		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32FS8_TEXTURE:
-		case FORMAT_D32F_SHADOW:
-		case FORMAT_D32FS8_SHADOW:
-		case FORMAT_L16F:
-		case FORMAT_A16L16F:
-		case FORMAT_L32F:
-		case FORMAT_A32L32F:
 			return true;
 		default:
 			ASSERT(false);
@@ -2895,13 +1960,8 @@
 		{
 		case FORMAT_NULL:
 		case FORMAT_R5G6B5:
-		case FORMAT_R8G8B8:
-		case FORMAT_B8G8R8:
-		case FORMAT_X8R8G8B8:
-		case FORMAT_X8B8G8R8:
 		case FORMAT_A8R8G8B8:
 		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_X8:
 		case FORMAT_SRGB8_A8:
 		case FORMAT_G8R8:
 		case FORMAT_A2B10G10R10:
@@ -2909,31 +1969,17 @@
 		case FORMAT_R16UI:
 		case FORMAT_G16R16:
 		case FORMAT_G16R16UI:
-		case FORMAT_X16B16G16R16UI:
 		case FORMAT_A16B16G16R16:
 		case FORMAT_A16B16G16R16UI:
 		case FORMAT_R32UI:
 		case FORMAT_G32R32UI:
-		case FORMAT_X32B32G32R32UI:
 		case FORMAT_A32B32G32R32UI:
-		case FORMAT_X32B32G32R32F_UNSIGNED:
 		case FORMAT_R8UI:
 		case FORMAT_G8R8UI:
-		case FORMAT_X8B8G8R8UI:
 		case FORMAT_A8B8G8R8UI:
 		case FORMAT_D32F:
 		case FORMAT_D32FS8:
-		case FORMAT_D32F_COMPLEMENTARY:
-		case FORMAT_D32FS8_COMPLEMENTARY:
-		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32FS8_TEXTURE:
-		case FORMAT_D32F_SHADOW:
-		case FORMAT_D32FS8_SHADOW:
-		case FORMAT_A8:
 		case FORMAT_R8:
-		case FORMAT_L8:
-		case FORMAT_L16:
-		case FORMAT_A8L8:
 		case FORMAT_YV12_BT601:
 		case FORMAT_YV12_BT709:
 		case FORMAT_YV12_JFIF:
@@ -2942,8 +1988,6 @@
 		case FORMAT_A16B16G16R16I:
 		case FORMAT_A32B32G32R32I:
 		case FORMAT_A8B8G8R8_SNORM:
-		case FORMAT_Q8W8V8U8:
-		case FORMAT_Q16W16V16U16:
 		case FORMAT_A32B32G32R32F:
 			return false;
 		case FORMAT_R32F:
@@ -2952,23 +1996,12 @@
 		case FORMAT_R32I:
 		case FORMAT_R8_SNORM:
 			return component >= 1;
-		case FORMAT_V8U8:
-		case FORMAT_X8L8V8U8:
-		case FORMAT_V16U16:
 		case FORMAT_G32R32F:
 		case FORMAT_G8R8I:
 		case FORMAT_G16R16I:
 		case FORMAT_G32R32I:
 		case FORMAT_G8R8_SNORM:
 			return component >= 2;
-		case FORMAT_A16W16V16U16:
-		case FORMAT_B32G32R32F:
-		case FORMAT_X32B32G32R32F:
-		case FORMAT_X8B8G8R8I:
-		case FORMAT_X16B16G16R16I:
-		case FORMAT_X32B32G32R32I:
-		case FORMAT_X8B8G8R8_SNORM:
-			return component >= 3;
 		default:
 			ASSERT(false);
 		}
@@ -2981,24 +2014,11 @@
 		// Keep in sync with Capabilities::isSRGBreadable
 		switch(format)
 		{
-		case FORMAT_L8:
-		case FORMAT_A8L8:
-		case FORMAT_R8G8B8:
 		case FORMAT_A8R8G8B8:
-		case FORMAT_X8R8G8B8:
 		case FORMAT_A8B8G8R8:
-		case FORMAT_X8B8G8R8:
-		case FORMAT_SRGB8_X8:
 		case FORMAT_SRGB8_A8:
 		case FORMAT_R5G6B5:
-		case FORMAT_X1R5G5B5:
 		case FORMAT_A1R5G5B5:
-		case FORMAT_A4R4G4B4:
-		case FORMAT_DXT1:
-		case FORMAT_DXT3:
-		case FORMAT_DXT5:
-		case FORMAT_ATI1:
-		case FORMAT_ATI2:
 			return true;
 		default:
 			return false;
@@ -3012,10 +2032,7 @@
 		{
 		case FORMAT_NULL:
 		case FORMAT_A8R8G8B8:
-		case FORMAT_X8R8G8B8:
 		case FORMAT_A8B8G8R8:
-		case FORMAT_X8B8G8R8:
-		case FORMAT_SRGB8_X8:
 		case FORMAT_SRGB8_A8:
 		case FORMAT_R5G6B5:
 			return true;
@@ -3028,7 +2045,6 @@
 	{
 		switch(format)
 		{
-		case FORMAT_SRGB8_X8:
 		case FORMAT_SRGB8_A8:
 			return true;
 		default:
@@ -3040,12 +2056,6 @@
 	{
 		switch(format)
 		{
-		case FORMAT_DXT1:
-		case FORMAT_DXT3:
-		case FORMAT_DXT5:
-		case FORMAT_ATI1:
-		case FORMAT_ATI2:
-		case FORMAT_ETC1:
 		case FORMAT_R11_EAC:
 		case FORMAT_SIGNED_R11_EAC:
 		case FORMAT_RG11_EAC:
@@ -3095,15 +2105,12 @@
 		switch(format)
 		{
 		case FORMAT_A8B8G8R8I:
-		case FORMAT_X8B8G8R8I:
 		case FORMAT_G8R8I:
 		case FORMAT_R8I:
 		case FORMAT_A16B16G16R16I:
-		case FORMAT_X16B16G16R16I:
 		case FORMAT_G16R16I:
 		case FORMAT_R16I:
 		case FORMAT_A32B32G32R32I:
-		case FORMAT_X32B32G32R32I:
 		case FORMAT_G32R32I:
 		case FORMAT_R32I:
 			return true;
@@ -3117,15 +2124,12 @@
 		switch(format)
 		{
 		case FORMAT_A8B8G8R8UI:
-		case FORMAT_X8B8G8R8UI:
 		case FORMAT_G8R8UI:
 		case FORMAT_R8UI:
 		case FORMAT_A16B16G16R16UI:
-		case FORMAT_X16B16G16R16UI:
 		case FORMAT_G16R16UI:
 		case FORMAT_R16UI:
 		case FORMAT_A32B32G32R32UI:
-		case FORMAT_X32B32G32R32UI:
 		case FORMAT_G32R32UI:
 		case FORMAT_R32UI:
 			return true;
@@ -3154,11 +2158,7 @@
 		switch(format)
 		{
 		case FORMAT_R5G6B5:         return 3;
-		case FORMAT_X8R8G8B8:       return 3;
-		case FORMAT_X8B8G8R8I:      return 3;
-		case FORMAT_X8B8G8R8:       return 3;
 		case FORMAT_A8R8G8B8:       return 4;
-		case FORMAT_SRGB8_X8:       return 3;
 		case FORMAT_SRGB8_A8:       return 4;
 		case FORMAT_A8B8G8R8I:      return 4;
 		case FORMAT_A8B8G8R8:       return 4;
@@ -3166,11 +2166,9 @@
 		case FORMAT_G8R8:           return 2;
 		case FORMAT_R8_SNORM:      return 1;
 		case FORMAT_G8R8_SNORM:    return 2;
-		case FORMAT_X8B8G8R8_SNORM:return 3;
 		case FORMAT_A8B8G8R8_SNORM:return 4;
 		case FORMAT_R8UI:           return 1;
 		case FORMAT_G8R8UI:         return 2;
-		case FORMAT_X8B8G8R8UI:     return 3;
 		case FORMAT_A8B8G8R8UI:     return 4;
 		case FORMAT_A2B10G10R10:    return 4;
 		case FORMAT_A2B10G10R10UI:  return 4;
@@ -3179,42 +2177,22 @@
 		case FORMAT_G16R16:         return 2;
 		case FORMAT_G32R32I:        return 2;
 		case FORMAT_G32R32UI:       return 2;
-		case FORMAT_X16B16G16R16I:  return 3;
-		case FORMAT_X16B16G16R16UI: return 3;
 		case FORMAT_A16B16G16R16I:  return 4;
 		case FORMAT_A16B16G16R16UI: return 4;
 		case FORMAT_A16B16G16R16:   return 4;
-		case FORMAT_X32B32G32R32I:  return 3;
-		case FORMAT_X32B32G32R32UI: return 3;
 		case FORMAT_A32B32G32R32I:  return 4;
 		case FORMAT_A32B32G32R32UI: return 4;
-		case FORMAT_V8U8:           return 2;
-		case FORMAT_Q8W8V8U8:       return 4;
-		case FORMAT_X8L8V8U8:       return 3;
-		case FORMAT_V16U16:         return 2;
-		case FORMAT_A16W16V16U16:   return 4;
-		case FORMAT_Q16W16V16U16:   return 4;
 		case FORMAT_R32F:           return 1;
 		case FORMAT_G32R32F:        return 2;
-		case FORMAT_X32B32G32R32F:  return 3;
 		case FORMAT_A32B32G32R32F:  return 4;
-		case FORMAT_X32B32G32R32F_UNSIGNED: return 3;
 		case FORMAT_D32F:           return 1;
 		case FORMAT_D32FS8:         return 1;
-		case FORMAT_D32F_LOCKABLE:  return 1;
-		case FORMAT_D32FS8_TEXTURE: return 1;
-		case FORMAT_D32F_SHADOW:    return 1;
-		case FORMAT_D32FS8_SHADOW:  return 1;
-		case FORMAT_A8:             return 1;
 		case FORMAT_R8I:            return 1;
 		case FORMAT_R8:             return 1;
 		case FORMAT_R16I:           return 1;
 		case FORMAT_R16UI:          return 1;
 		case FORMAT_R32I:           return 1;
 		case FORMAT_R32UI:          return 1;
-		case FORMAT_L8:             return 1;
-		case FORMAT_L16:            return 1;
-		case FORMAT_A8L8:           return 2;
 		case FORMAT_YV12_BT601:     return 3;
 		case FORMAT_YV12_BT709:     return 3;
 		case FORMAT_YV12_JFIF:      return 3;
@@ -3704,11 +2682,6 @@
 		return isDepth(external.format);
 	}
 
-	bool Surface::hasPalette() const
-	{
-		return isPalette(external.format);
-	}
-
 	bool Surface::isRenderTarget() const
 	{
 		return renderTarget;
@@ -3747,14 +2720,8 @@
 		{
 		case FORMAT_NULL:
 			return FORMAT_NULL;
-		case FORMAT_P8:
-		case FORMAT_A8P8:
-		case FORMAT_A4R4G4B4:
 		case FORMAT_A1R5G5B5:
-		case FORMAT_A8R3G3B2:
 			return FORMAT_A8R8G8B8;
-		case FORMAT_A8:
-			return FORMAT_A8;
 		case FORMAT_R8I:
 			return FORMAT_R8I;
 		case FORMAT_R8UI:
@@ -3771,12 +2738,8 @@
 			return FORMAT_R32I;
 		case FORMAT_R32UI:
 			return FORMAT_R32UI;
-		case FORMAT_X16B16G16R16I:
-			return FORMAT_X16B16G16R16I;
 		case FORMAT_A16B16G16R16I:
 			return FORMAT_A16B16G16R16I;
-		case FORMAT_X16B16G16R16UI:
-			return FORMAT_X16B16G16R16UI;
 		case FORMAT_A16B16G16R16UI:
 			return FORMAT_A16B16G16R16UI;
 		case FORMAT_A2R10G10B10:
@@ -3785,12 +2748,8 @@
 			return FORMAT_A16B16G16R16;
 		case FORMAT_A2B10G10R10UI:
 			return FORMAT_A16B16G16R16UI;
-		case FORMAT_X32B32G32R32I:
-			return FORMAT_X32B32G32R32I;
 		case FORMAT_A32B32G32R32I:
 			return FORMAT_A32B32G32R32I;
-		case FORMAT_X32B32G32R32UI:
-			return FORMAT_X32B32G32R32UI;
 		case FORMAT_A32B32G32R32UI:
 			return FORMAT_A32B32G32R32UI;
 		case FORMAT_G8R8I:
@@ -3812,14 +2771,7 @@
 		case FORMAT_G32R32UI:
 			return FORMAT_G32R32UI;
 		case FORMAT_A8R8G8B8:
-			if(lockable || !quadLayoutEnabled)
-			{
-				return FORMAT_A8R8G8B8;
-			}
-			else
-			{
-				return FORMAT_A8G8R8B8Q;
-			}
+			return FORMAT_A8R8G8B8;
 		case FORMAT_A8B8G8R8I:
 			return FORMAT_A8B8G8R8I;
 		case FORMAT_A8B8G8R8UI:
@@ -3832,36 +2784,9 @@
 			return FORMAT_A8B8G8R8;
 		case FORMAT_R5G6B5:
 			return FORMAT_R5G6B5;
-		case FORMAT_R3G3B2:
-		case FORMAT_R8G8B8:
-		case FORMAT_X4R4G4B4:
-		case FORMAT_X1R5G5B5:
-		case FORMAT_X8R8G8B8:
-			if(lockable || !quadLayoutEnabled)
-			{
-				return FORMAT_X8R8G8B8;
-			}
-			else
-			{
-				return FORMAT_X8G8R8B8Q;
-			}
-		case FORMAT_X8B8G8R8I:
-			return FORMAT_X8B8G8R8I;
-		case FORMAT_X8B8G8R8UI:
-			return FORMAT_X8B8G8R8UI;
-		case FORMAT_X8B8G8R8_SNORM:
-			return FORMAT_X8B8G8R8_SNORM;
-		case FORMAT_B8G8R8:
-		case FORMAT_X8B8G8R8:
-			return FORMAT_X8B8G8R8;
-		case FORMAT_SRGB8_X8:
-			return FORMAT_SRGB8_X8;
 		case FORMAT_SRGB8_A8:
 			return FORMAT_SRGB8_A8;
 		// Compressed formats
-		case FORMAT_DXT1:
-		case FORMAT_DXT3:
-		case FORMAT_DXT5:
 		case FORMAT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
 		case FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
 		case FORMAT_RGBA8_ETC2_EAC:
@@ -3897,89 +2822,30 @@
 		case FORMAT_RGBA_ASTC_12x12_KHR:
 			// ASTC supports HDR, so a floating point format is required to represent it properly
 			return FORMAT_A32B32G32R32F; // FIXME: 16FP is probably sufficient, but it's currently unsupported
-		case FORMAT_ATI1:
-			return FORMAT_R8;
 		case FORMAT_R11_EAC:
 		case FORMAT_SIGNED_R11_EAC:
 			return FORMAT_R32F; // FIXME: Signed 8bit format would be sufficient
-		case FORMAT_ATI2:
-			return FORMAT_G8R8;
 		case FORMAT_RG11_EAC:
 		case FORMAT_SIGNED_RG11_EAC:
 			return FORMAT_G32R32F; // FIXME: Signed 8bit format would be sufficient
-		case FORMAT_ETC1:
 		case FORMAT_RGB8_ETC2:
 		case FORMAT_SRGB8_ETC2:
-			return FORMAT_X8R8G8B8;
-		// Bumpmap formats
-		case FORMAT_V8U8:			return FORMAT_V8U8;
-		case FORMAT_L6V5U5:			return FORMAT_X8L8V8U8;
-		case FORMAT_Q8W8V8U8:		return FORMAT_Q8W8V8U8;
-		case FORMAT_X8L8V8U8:		return FORMAT_X8L8V8U8;
-		case FORMAT_V16U16:			return FORMAT_V16U16;
-		case FORMAT_A2W10V10U10:	return FORMAT_A16W16V16U16;
-		case FORMAT_Q16W16V16U16:	return FORMAT_Q16W16V16U16;
+			return FORMAT_A8R8G8B8;
 		// Floating-point formats
-		case FORMAT_A16F:			return FORMAT_A32B32G32R32F;
 		case FORMAT_R16F:			return FORMAT_R32F;
 		case FORMAT_G16R16F:		return FORMAT_G32R32F;
-		case FORMAT_B16G16R16F:     return FORMAT_X32B32G32R32F;
-		case FORMAT_X16B16G16R16F:	return FORMAT_X32B32G32R32F;
 		case FORMAT_A16B16G16R16F:	return FORMAT_A32B32G32R32F;
-		case FORMAT_X16B16G16R16F_UNSIGNED: return FORMAT_X32B32G32R32F_UNSIGNED;
-		case FORMAT_A32F:			return FORMAT_A32B32G32R32F;
 		case FORMAT_R32F:			return FORMAT_R32F;
 		case FORMAT_G32R32F:		return FORMAT_G32R32F;
-		case FORMAT_B32G32R32F:     return FORMAT_X32B32G32R32F;
-		case FORMAT_X32B32G32R32F:  return FORMAT_X32B32G32R32F;
 		case FORMAT_A32B32G32R32F:	return FORMAT_A32B32G32R32F;
-		case FORMAT_X32B32G32R32F_UNSIGNED: return FORMAT_X32B32G32R32F_UNSIGNED;
-		// Luminance formats
-		case FORMAT_L8:				return FORMAT_L8;
-		case FORMAT_A4L4:			return FORMAT_A8L8;
-		case FORMAT_L16:			return FORMAT_L16;
-		case FORMAT_A8L8:			return FORMAT_A8L8;
-		case FORMAT_L16F:           return FORMAT_X32B32G32R32F;
-		case FORMAT_A16L16F:        return FORMAT_A32B32G32R32F;
-		case FORMAT_L32F:           return FORMAT_X32B32G32R32F;
-		case FORMAT_A32L32F:        return FORMAT_A32B32G32R32F;
 		// Depth/stencil formats
 		case FORMAT_D16:
-		case FORMAT_D32:
 		case FORMAT_D24X8:
-			if(hasParent)   // Texture
-			{
-				return FORMAT_D32F_SHADOW;
-			}
-			else if(complementaryDepthBuffer)
-			{
-				return FORMAT_D32F_COMPLEMENTARY;
-			}
-			else
-			{
-				return FORMAT_D32F;
-			}
+			return FORMAT_D32F;
 		case FORMAT_D24S8:
-		case FORMAT_D24FS8:
-			if(hasParent)   // Texture
-			{
-				return FORMAT_D32FS8_SHADOW;
-			}
-			else if(complementaryDepthBuffer)
-			{
-				return FORMAT_D32FS8_COMPLEMENTARY;
-			}
-			else
-			{
-				return FORMAT_D32FS8;
-			}
+			return FORMAT_D32FS8;
 		case FORMAT_D32F:           return FORMAT_D32F;
 		case FORMAT_D32FS8:         return FORMAT_D32FS8;
-		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;
 		case FORMAT_S8:             return FORMAT_S8;
 		// YUV formats
 		case FORMAT_YV12_BT601:     return FORMAT_YV12_BT601;
@@ -3992,12 +2858,6 @@
 		return FORMAT_NULL;
 	}
 
-	void Surface::setTexturePalette(unsigned int *palette)
-	{
-		Surface::palette = palette;
-		Surface::paletteID++;
-	}
-
 	void Surface::resolve()
 	{
 		if(internal.samples <= 1 || !internal.dirty || !renderTarget || internal.format == FORMAT_NULL)
@@ -4031,9 +2891,9 @@
 		unsigned char *sourceE = sourceD + slice;
 		unsigned char *sourceF = sourceE + slice;
 
-		if(internal.format == FORMAT_X8R8G8B8 || internal.format == FORMAT_A8R8G8B8 ||
-		   internal.format == FORMAT_X8B8G8R8 || internal.format == FORMAT_A8B8G8R8 ||
-		   internal.format == FORMAT_SRGB8_X8 || internal.format == FORMAT_SRGB8_A8)
+		if(internal.format == FORMAT_A8R8G8B8 ||
+		   internal.format == FORMAT_A8B8G8R8 ||
+		   internal.format == FORMAT_SRGB8_A8)
 		{
 			#if defined(__i386__) || defined(__x86_64__)
 				if(CPUID::supportsSSE2() && (width % 4) == 0)
@@ -5507,9 +4367,7 @@
 				else ASSERT(false);
 			}
 		}
-		else if(internal.format == FORMAT_A32B32G32R32F ||
-		        internal.format == FORMAT_X32B32G32R32F ||
-		        internal.format == FORMAT_X32B32G32R32F_UNSIGNED)
+		else if(internal.format == FORMAT_A32B32G32R32F)
 		{
 			#if defined(__i386__) || defined(__x86_64__)
 				if(CPUID::supportsSSE())
diff --git a/src/Device/Surface.hpp b/src/Device/Surface.hpp
index 5b5ee68..c24c57b 100644
--- a/src/Device/Surface.hpp
+++ b/src/Device/Surface.hpp
@@ -18,6 +18,7 @@
 #include "Color.hpp"
 #include "Device/Config.hpp"
 #include "System/Resource.hpp"
+#include <vulkan/vulkan.h>
 
 namespace sw
 {
@@ -62,167 +63,244 @@
 
 	enum Format : unsigned char
 	{
-		FORMAT_NULL,
+		FORMAT_NULL = VK_FORMAT_UNDEFINED,
+		// VK_FORMAT_R4G4_UNORM_PACK8,
+		// VK_FORMAT_R4G4B4A4_UNORM_PACK16,
+		FORMAT_R4G4B4A4 = VK_FORMAT_B4G4R4A4_UNORM_PACK16, // Mandatory
+		FORMAT_R5G6B5 = VK_FORMAT_R5G6B5_UNORM_PACK16, // Mandatory
+		// VK_FORMAT_B5G6R5_UNORM_PACK16,
+		FORMAT_R5G5B5A1 = VK_FORMAT_R5G5B5A1_UNORM_PACK16,
+		// VK_FORMAT_B5G5R5A1_UNORM_PACK16,
+		FORMAT_A1R5G5B5 = VK_FORMAT_A1R5G5B5_UNORM_PACK16, // Mandatory
+		FORMAT_R8 = VK_FORMAT_R8_UNORM, // Mandatory
+		FORMAT_R8_SNORM = VK_FORMAT_R8_SNORM, // Mandatory
+		// VK_FORMAT_R8_USCALED,
+		// VK_FORMAT_R8_SSCALED,
+		FORMAT_R8UI = VK_FORMAT_R8_UINT, // Mandatory
+		FORMAT_R8I = VK_FORMAT_R8_SINT, // Mandatory
+		// VK_FORMAT_R8_SRGB,
+		FORMAT_G8R8 = VK_FORMAT_R8G8_UNORM, // Mandatory
+		FORMAT_G8R8_SNORM = VK_FORMAT_R8G8_SNORM, // Mandatory
+		// VK_FORMAT_R8G8_USCALED,
+		// VK_FORMAT_R8G8_SSCALED,
+		FORMAT_G8R8UI = VK_FORMAT_R8G8_UINT, // Mandatory
+		FORMAT_G8R8I = VK_FORMAT_R8G8_SINT, // Mandatory
+		// VK_FORMAT_R8G8_SRGB,
+		// VK_FORMAT_R8G8B8_UNORM,
+		// VK_FORMAT_R8G8B8_SNORM,
+		// VK_FORMAT_R8G8B8_USCALED,
+		// VK_FORMAT_R8G8B8_SSCALED,
+		// VK_FORMAT_R8G8B8_UINT,
+		// VK_FORMAT_R8G8B8_SINT,
+		// VK_FORMAT_R8G8B8_SRGB,
+		// VK_FORMAT_B8G8R8_UNORM,
+		// VK_FORMAT_B8G8R8_SNORM,
+		// VK_FORMAT_B8G8R8_USCALED,
+		// VK_FORMAT_B8G8R8_SSCALED,
+		// VK_FORMAT_B8G8R8_UINT,
+		// VK_FORMAT_B8G8R8_SINT,
+		// VK_FORMAT_B8G8R8_SRGB,
+		FORMAT_A8B8G8R8 = VK_FORMAT_R8G8B8A8_UNORM, // Mandatory
+		FORMAT_A8B8G8R8_SNORM = VK_FORMAT_R8G8B8A8_SNORM, // Mandatory
+		// VK_FORMAT_R8G8B8A8_USCALED,
+		// VK_FORMAT_R8G8B8A8_SSCALED,
+		FORMAT_A8B8G8R8UI = VK_FORMAT_R8G8B8A8_UINT, // Mandatory
+		FORMAT_A8B8G8R8I = VK_FORMAT_R8G8B8A8_SINT, // Mandatory
+		FORMAT_SRGB8_A8 = VK_FORMAT_R8G8B8A8_SRGB, // Mandatory
+		FORMAT_A8R8G8B8 = VK_FORMAT_B8G8R8A8_UNORM, // Mandatory
+		// VK_FORMAT_B8G8R8A8_SNORM,
+		// VK_FORMAT_B8G8R8A8_USCALED,
+		// VK_FORMAT_B8G8R8A8_SSCALED,
+		// VK_FORMAT_B8G8R8A8_UINT,
+		// VK_FORMAT_B8G8R8A8_SINT,
+		// VK_FORMAT_B8G8R8A8_SRGB, // TODO: Mandatory
+		// VK_FORMAT_A8B8G8R8_UNORM_PACK32, // TODO: Mandatory
+		// VK_FORMAT_A8B8G8R8_SNORM_PACK32, // TODO: Mandatory
+		// VK_FORMAT_A8B8G8R8_USCALED_PACK32,
+		// VK_FORMAT_A8B8G8R8_SSCALED_PACK32,
+		// VK_FORMAT_A8B8G8R8_UINT_PACK32, // TODO: Mandatory
+		// VK_FORMAT_A8B8G8R8_SINT_PACK32, // TODO: Mandatory
+		// VK_FORMAT_A8B8G8R8_SRGB_PACK32, // TODO: Mandatory
+		FORMAT_A2R10G10B10 = VK_FORMAT_A2R10G10B10_UNORM_PACK32,
+		// VK_FORMAT_A2R10G10B10_SNORM_PACK32,
+		// VK_FORMAT_A2R10G10B10_USCALED_PACK32,
+		// VK_FORMAT_A2R10G10B10_SSCALED_PACK32,
+		// VK_FORMAT_A2R10G10B10_UINT_PACK32,
+		// VK_FORMAT_A2R10G10B10_SINT_PACK32,
+		FORMAT_A2B10G10R10 = VK_FORMAT_A2B10G10R10_UNORM_PACK32, // Mandatory
+		// VK_FORMAT_A2B10G10R10_SNORM_PACK32,
+		// VK_FORMAT_A2B10G10R10_USCALED_PACK32,
+		// VK_FORMAT_A2B10G10R10_SSCALED_PACK32,
+		FORMAT_A2B10G10R10UI = VK_FORMAT_A2B10G10R10_UINT_PACK32, // Mandatory
+		// VK_FORMAT_A2B10G10R10_SINT_PACK32,
+		// VK_FORMAT_R16_UNORM, // Mandatory (Vertex buffer only)
+		// VK_FORMAT_R16_SNORM, // Mandatory (Vertex buffer only)
+		// VK_FORMAT_R16_USCALED,
+		// VK_FORMAT_R16_SSCALED,
+		FORMAT_R16UI = VK_FORMAT_R16_UINT, // Mandatory
+		FORMAT_R16I = VK_FORMAT_R16_SINT, // Mandatory
+		FORMAT_R16F = VK_FORMAT_R16_SFLOAT, // Mandatory
+		FORMAT_G16R16 = VK_FORMAT_R16G16_UNORM, // Mandatory (Vertex buffer only)
+		// VK_FORMAT_R16G16_SNORM, // Mandatory (Vertex buffer only)
+		// VK_FORMAT_R16G16_USCALED,
+		// VK_FORMAT_R16G16_SSCALED,
+		FORMAT_G16R16UI = VK_FORMAT_R16G16_UINT, // Mandatory
+		FORMAT_G16R16I = VK_FORMAT_R16G16_SINT, // Mandatory
+		FORMAT_G16R16F = VK_FORMAT_R16G16_SFLOAT, // Mandatory
+		// VK_FORMAT_R16G16B16_UNORM,
+		// VK_FORMAT_R16G16B16_SNORM,
+		// VK_FORMAT_R16G16B16_USCALED,
+		// VK_FORMAT_R16G16B16_SSCALED,
+		// VK_FORMAT_R16G16B16_UINT,
+		// VK_FORMAT_R16G16B16_SINT,
+		// VK_FORMAT_R16G16B16_SFLOAT,
+		FORMAT_A16B16G16R16 = VK_FORMAT_R16G16B16A16_UNORM, // Mandatory (Vertex buffer only)
+		// VK_FORMAT_R16G16B16A16_SNORM, // Mandatory (Vertex buffer only)
+		// VK_FORMAT_R16G16B16A16_USCALED,
+		// VK_FORMAT_R16G16B16A16_SSCALED,
+		FORMAT_A16B16G16R16UI = VK_FORMAT_R16G16B16A16_UINT, // Mandatory
+		FORMAT_A16B16G16R16I = VK_FORMAT_R16G16B16A16_SINT, // Mandatory
+		FORMAT_A16B16G16R16F = VK_FORMAT_R16G16B16A16_SFLOAT, // Mandatory
+		FORMAT_R32UI = VK_FORMAT_R32_UINT, // Mandatory
+		FORMAT_R32I = VK_FORMAT_R32_SINT, // Mandatory
+		FORMAT_R32F = VK_FORMAT_R32_SFLOAT, // Mandatory
+		FORMAT_G32R32UI = VK_FORMAT_R32G32_UINT, // Mandatory
+		FORMAT_G32R32I = VK_FORMAT_R32G32_SINT, // Mandatory
+		FORMAT_G32R32F = VK_FORMAT_R32G32_SFLOAT, // Mandatory
+		// VK_FORMAT_R32G32B32_UINT, // Mandatory (Vertex buffer only)
+		// VK_FORMAT_R32G32B32_SINT, // Mandatory (Vertex buffer only)
+		// VK_FORMAT_R32G32B32_SFLOAT, // Mandatory (Vertex buffer only)
+		FORMAT_A32B32G32R32UI = VK_FORMAT_R32G32B32A32_UINT, // Mandatory
+		FORMAT_A32B32G32R32I = VK_FORMAT_R32G32B32A32_SINT, // Mandatory
+		FORMAT_A32B32G32R32F = VK_FORMAT_R32G32B32A32_SFLOAT, // Mandatory
+		// VK_FORMAT_R64_UINT,
+		// VK_FORMAT_R64_SINT,
+		// VK_FORMAT_R64_SFLOAT,
+		// VK_FORMAT_R64G64_UINT,
+		// VK_FORMAT_R64G64_SINT,
+		// VK_FORMAT_R64G64_SFLOAT,
+		// VK_FORMAT_R64G64B64_UINT,
+		// VK_FORMAT_R64G64B64_SINT,
+		// VK_FORMAT_R64G64B64_SFLOAT,
+		// VK_FORMAT_R64G64B64A64_UINT,
+		// VK_FORMAT_R64G64B64A64_SINT,
+		// VK_FORMAT_R64G64B64A64_SFLOAT,
+		// VK_FORMAT_B10G11R11_UFLOAT_PACK32, // TODO: Mandatory
+		// VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, // TODO: Mandatory
+		FORMAT_D16 = VK_FORMAT_D16_UNORM, // Mandatory
+		FORMAT_D24X8 = VK_FORMAT_X8_D24_UNORM_PACK32, // Feature specific
+		FORMAT_D32F = VK_FORMAT_D32_SFLOAT, // Mandatory
+		FORMAT_S8 = VK_FORMAT_S8_UINT,
+		// VK_FORMAT_D16_UNORM_S8_UINT,
+		FORMAT_D24S8 = VK_FORMAT_D24_UNORM_S8_UINT, // Feature specific
+		FORMAT_D32FS8 = VK_FORMAT_D32_SFLOAT_S8_UINT, // Feature specific
+		// VK_FORMAT_BC1_RGB_UNORM_BLOCK, // Feature specific
+		// VK_FORMAT_BC1_RGB_SRGB_BLOCK, // Feature specific
+		// VK_FORMAT_BC1_RGBA_UNORM_BLOCK, // Feature specific
+		// VK_FORMAT_BC1_RGBA_SRGB_BLOCK, // Feature specific
+		// VK_FORMAT_BC2_UNORM_BLOCK, // Feature specific
+		// VK_FORMAT_BC2_SRGB_BLOCK, // Feature specific
+		// VK_FORMAT_BC3_UNORM_BLOCK, // Feature specific
+		// VK_FORMAT_BC3_SRGB_BLOCK, // Feature specific
+		// VK_FORMAT_BC4_UNORM_BLOCK, // Feature specific
+		// VK_FORMAT_BC4_SNORM_BLOCK, // Feature specific
+		// VK_FORMAT_BC5_UNORM_BLOCK, // Feature specific
+		// VK_FORMAT_BC5_SNORM_BLOCK, // Feature specific
+		// VK_FORMAT_BC6H_UFLOAT_BLOCK, // Feature specific
+		// VK_FORMAT_BC6H_SFLOAT_BLOCK, // Feature specific
+		// VK_FORMAT_BC7_UNORM_BLOCK, // Feature specific
+		// VK_FORMAT_BC7_SRGB_BLOCK, // Feature specific
+		FORMAT_RGB8_ETC2 = VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ETC2 = VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK, // Feature specific
+		FORMAT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK, // Feature specific
+		FORMAT_RGBA8_ETC2_EAC = VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ALPHA8_ETC2_EAC = VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK, // Feature specific
+		FORMAT_R11_EAC = VK_FORMAT_EAC_R11_UNORM_BLOCK, // Feature specific
+		FORMAT_SIGNED_R11_EAC = VK_FORMAT_EAC_R11_SNORM_BLOCK, // Feature specific
+		FORMAT_RG11_EAC = VK_FORMAT_EAC_R11G11_UNORM_BLOCK, // Feature specific
+		FORMAT_SIGNED_RG11_EAC = VK_FORMAT_EAC_R11G11_SNORM_BLOCK, // Feature specific
+		FORMAT_RGBA_ASTC_4x4_KHR = VK_FORMAT_ASTC_4x4_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR = VK_FORMAT_ASTC_4x4_SRGB_BLOCK, // Feature specific
+		FORMAT_RGBA_ASTC_5x4_KHR = VK_FORMAT_ASTC_5x4_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR = VK_FORMAT_ASTC_5x4_SRGB_BLOCK, // Feature specific
+		FORMAT_RGBA_ASTC_5x5_KHR = VK_FORMAT_ASTC_5x5_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR = VK_FORMAT_ASTC_5x5_SRGB_BLOCK, // Feature specific
+		FORMAT_RGBA_ASTC_6x5_KHR = VK_FORMAT_ASTC_6x5_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR = VK_FORMAT_ASTC_6x5_SRGB_BLOCK, // Feature specific
+		FORMAT_RGBA_ASTC_6x6_KHR = VK_FORMAT_ASTC_6x6_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR = VK_FORMAT_ASTC_6x6_SRGB_BLOCK, // Feature specific
+		FORMAT_RGBA_ASTC_8x5_KHR = VK_FORMAT_ASTC_8x5_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR = VK_FORMAT_ASTC_8x5_SRGB_BLOCK, // Feature specific
+		FORMAT_RGBA_ASTC_8x6_KHR = VK_FORMAT_ASTC_8x6_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR = VK_FORMAT_ASTC_8x6_SRGB_BLOCK, // Feature specific
+		FORMAT_RGBA_ASTC_8x8_KHR = VK_FORMAT_ASTC_8x8_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR = VK_FORMAT_ASTC_8x8_SRGB_BLOCK, // Feature specific
+		FORMAT_RGBA_ASTC_10x5_KHR = VK_FORMAT_ASTC_10x5_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR = VK_FORMAT_ASTC_10x5_SRGB_BLOCK, // Feature specific
+		FORMAT_RGBA_ASTC_10x6_KHR = VK_FORMAT_ASTC_10x6_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR = VK_FORMAT_ASTC_10x6_SRGB_BLOCK, // Feature specific
+		FORMAT_RGBA_ASTC_10x8_KHR = VK_FORMAT_ASTC_10x8_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR = VK_FORMAT_ASTC_10x8_SRGB_BLOCK, // Feature specific
+		FORMAT_RGBA_ASTC_10x10_KHR = VK_FORMAT_ASTC_10x10_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR = VK_FORMAT_ASTC_10x10_SRGB_BLOCK, // Feature specific
+		FORMAT_RGBA_ASTC_12x10_KHR = VK_FORMAT_ASTC_12x10_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR = VK_FORMAT_ASTC_12x10_SRGB_BLOCK, // Feature specific
+		FORMAT_RGBA_ASTC_12x12_KHR = VK_FORMAT_ASTC_12x12_UNORM_BLOCK, // Feature specific
+		FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR = VK_FORMAT_ASTC_12x12_SRGB_BLOCK, // Feature specific
 
-		FORMAT_A8,
-		FORMAT_R8I,
-		FORMAT_R8UI,
-		FORMAT_R8_SNORM,
-		FORMAT_R8,
-		FORMAT_R16I,
-		FORMAT_R16UI,
-		FORMAT_R32I,
-		FORMAT_R32UI,
-		FORMAT_R3G3B2,
-		FORMAT_A8R3G3B2,
-		FORMAT_X4R4G4B4,
-		FORMAT_A4R4G4B4,
-		FORMAT_R4G4B4A4,
-		FORMAT_R5G6B5,
-		FORMAT_R8G8B8,
-		FORMAT_B8G8R8,
-		FORMAT_X8R8G8B8,
-		FORMAT_A8R8G8B8,
-		FORMAT_X8B8G8R8I,
-		FORMAT_X8B8G8R8UI,
-		FORMAT_X8B8G8R8_SNORM,
-		FORMAT_X8B8G8R8,
-		FORMAT_A8B8G8R8I,
-		FORMAT_A8B8G8R8UI,
-		FORMAT_A8B8G8R8_SNORM,
-		FORMAT_A8B8G8R8,
-		FORMAT_SRGB8_X8,
-		FORMAT_SRGB8_A8,
-		FORMAT_X1R5G5B5,
-		FORMAT_A1R5G5B5,
-		FORMAT_R5G5B5A1,
-		FORMAT_G8R8I,
-		FORMAT_G8R8UI,
-		FORMAT_G8R8_SNORM,
-		FORMAT_G8R8,
-		FORMAT_G16R16,
-		FORMAT_G16R16I,
-		FORMAT_G16R16UI,
-		FORMAT_G32R32I,
-		FORMAT_G32R32UI,
-		FORMAT_A2R10G10B10,
-		FORMAT_A2B10G10R10,
-		FORMAT_A2B10G10R10UI,
-		FORMAT_A16B16G16R16,
-		FORMAT_X16B16G16R16I,
-		FORMAT_X16B16G16R16UI,
-		FORMAT_A16B16G16R16I,
-		FORMAT_A16B16G16R16UI,
-		FORMAT_X32B32G32R32I,
-		FORMAT_X32B32G32R32UI,
-		FORMAT_A32B32G32R32I,
-		FORMAT_A32B32G32R32UI,
-		// Paletted formats
-		FORMAT_P8,
-		FORMAT_A8P8,
-		// Compressed formats
-		FORMAT_DXT1,
-		FORMAT_DXT3,
-		FORMAT_DXT5,
-		FORMAT_ATI1,
-		FORMAT_ATI2,
-		FORMAT_ETC1,
-		FORMAT_R11_EAC,
-		FORMAT_SIGNED_R11_EAC,
-		FORMAT_RG11_EAC,
-		FORMAT_SIGNED_RG11_EAC,
-		FORMAT_RGB8_ETC2,
-		FORMAT_SRGB8_ETC2,
-		FORMAT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
-		FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
-		FORMAT_RGBA8_ETC2_EAC,
-		FORMAT_SRGB8_ALPHA8_ETC2_EAC,
-		FORMAT_RGBA_ASTC_4x4_KHR,
-		FORMAT_RGBA_ASTC_5x4_KHR,
-		FORMAT_RGBA_ASTC_5x5_KHR,
-		FORMAT_RGBA_ASTC_6x5_KHR,
-		FORMAT_RGBA_ASTC_6x6_KHR,
-		FORMAT_RGBA_ASTC_8x5_KHR,
-		FORMAT_RGBA_ASTC_8x6_KHR,
-		FORMAT_RGBA_ASTC_8x8_KHR,
-		FORMAT_RGBA_ASTC_10x5_KHR,
-		FORMAT_RGBA_ASTC_10x6_KHR,
-		FORMAT_RGBA_ASTC_10x8_KHR,
-		FORMAT_RGBA_ASTC_10x10_KHR,
-		FORMAT_RGBA_ASTC_12x10_KHR,
-		FORMAT_RGBA_ASTC_12x12_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR,
-		FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR,
-		// Floating-point formats
-		FORMAT_A16F,
-		FORMAT_R16F,
-		FORMAT_G16R16F,
-		FORMAT_B16G16R16F,
-		FORMAT_X16B16G16R16F,
-		FORMAT_A16B16G16R16F,
-		FORMAT_X16B16G16R16F_UNSIGNED,
-		FORMAT_A32F,
-		FORMAT_R32F,
-		FORMAT_G32R32F,
-		FORMAT_B32G32R32F,
-		FORMAT_X32B32G32R32F,
-		FORMAT_A32B32G32R32F,
-		FORMAT_X32B32G32R32F_UNSIGNED,
-		// Bump map formats
-		FORMAT_V8U8,
-		FORMAT_L6V5U5,
-		FORMAT_Q8W8V8U8,
-		FORMAT_X8L8V8U8,
-		FORMAT_A2W10V10U10,
-		FORMAT_V16U16,
-		FORMAT_A16W16V16U16,
-		FORMAT_Q16W16V16U16,
-		// Luminance formats
-		FORMAT_L8,
-		FORMAT_A4L4,
-		FORMAT_L16,
-		FORMAT_A8L8,
-		FORMAT_L16F,
-		FORMAT_A16L16F,
-		FORMAT_L32F,
-		FORMAT_A32L32F,
-		// Depth/stencil formats
-		FORMAT_D16,
-		FORMAT_D32,
-		FORMAT_D24X8,
-		FORMAT_D24S8,
-		FORMAT_D24FS8,
-		FORMAT_D32F,                 // Quad layout
-		FORMAT_D32FS8,               // Quad layout
-		FORMAT_D32F_COMPLEMENTARY,   // Quad layout, 1 - z
-		FORMAT_D32FS8_COMPLEMENTARY, // Quad layout, 1 - z
-		FORMAT_D32F_LOCKABLE,        // Linear layout
-		FORMAT_D32FS8_TEXTURE,       // Linear layout, no PCF
-		FORMAT_D32F_SHADOW,          // Linear layout, PCF
-		FORMAT_D32FS8_SHADOW,        // Linear layout, PCF
-		FORMAT_DF24S8,
-		FORMAT_DF16S8,
-		FORMAT_INTZ,
-		FORMAT_S8,
-		// Quad layout framebuffer
-		FORMAT_X8G8R8B8Q,
-		FORMAT_A8G8R8B8Q,
+		// EXTENSION FORMATS:
+		// IMPORTANT: if any of these formats are added, this enum needs
+		// to go from "unsigned char" to "unsigned int" and FORMAT_LAST
+		// below needs to be updated to take extensions into account.
+
+		// VK_FORMAT_G8B8G8R8_422_UNORM,
+		// VK_FORMAT_B8G8R8G8_422_UNORM,
+		// VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, // TODO: Mandatory
+		// VK_FORMAT_G8_B8R8_2PLANE_420_UNORM, // TODO: Mandatory
+		// VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM,
+		// VK_FORMAT_G8_B8R8_2PLANE_422_UNORM,
+		// VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM,
+		// VK_FORMAT_R10X6_UNORM_PACK16,
+		// VK_FORMAT_R10X6G10X6_UNORM_2PACK16,
+		// VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
+		// VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
+		// VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,
+		// VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16,
+		// VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
+		// VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16,
+		// VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16,
+		// VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
+		// VK_FORMAT_R12X4_UNORM_PACK16,
+		// VK_FORMAT_R12X4G12X4_UNORM_2PACK16,
+		// VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16,
+		// VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
+		// VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,
+		// VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16,
+		// VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16,
+		// VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16,
+		// VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16,
+		// VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
+		// VK_FORMAT_G16B16G16R16_422_UNORM,
+		// VK_FORMAT_B16G16R16G16_422_UNORM,
+		// VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM,
+		// VK_FORMAT_G16_B16R16_2PLANE_420_UNORM,
+		// VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM,
+		// VK_FORMAT_G16_B16R16_2PLANE_422_UNORM,
+		// VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM,
+		// VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,
+		// VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,
+		// VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG,
+		// VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG,
+		// VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG,
+		// VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,
+		// VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG,
+		// VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG,
+
 		// YUV formats
-		FORMAT_YV12_BT601,
-		FORMAT_YV12_BT709,
-		FORMAT_YV12_JFIF,    // Full-swing BT.601
+		FORMAT_YV12_BT601 = VK_FORMAT_END_RANGE + 1, // TODO: VK_FORMAT_G8_B8R8_2PLANE_420_UNORM + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601
+		FORMAT_YV12_BT709,                           // TODO: VK_FORMAT_G8_B8R8_2PLANE_420_UNORM + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709
+		FORMAT_YV12_JFIF,                            // TODO: VK_FORMAT_G8_B8R8_2PLANE_420_UNORM + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020
 
 		FORMAT_LAST = FORMAT_YV12_JFIF
 	};
@@ -350,7 +428,6 @@
 
 		bool hasStencil() const;
 		bool hasDepth() const;
-		bool hasPalette() const;
 		bool isRenderTarget() const;
 
 		bool hasDirtyContents() const;
@@ -368,7 +445,6 @@
 		static bool isStencil(Format format);
 		static bool isDepth(Format format);
 		static bool hasQuadLayout(Format format);
-		static bool isPalette(Format format);
 
 		static bool isFloatFormat(Format format);
 		static bool isUnsignedComponent(Format format, int component);
@@ -382,8 +458,6 @@
 		static bool isNormalizedInteger(Format format);
 		static int componentCount(Format format);
 
-		static void setTexturePalette(unsigned int *palette);
-
 	private:
 		sw::Resource *resource;
 
@@ -465,13 +539,6 @@
 			};
 		};
 
-		static void decodeR8G8B8(Buffer &destination, Buffer &source);
-		static void decodeX1R5G5B5(Buffer &destination, Buffer &source);
-		static void decodeA1R5G5B5(Buffer &destination, Buffer &source);
-		static void decodeX4R4G4B4(Buffer &destination, Buffer &source);
-		static void decodeA4R4G4B4(Buffer &destination, Buffer &source);
-		static void decodeP8(Buffer &destination, Buffer &source);
-
 		static void decodeDXT1(Buffer &internal, Buffer &external);
 		static void decodeDXT3(Buffer &internal, Buffer &external);
 		static void decodeDXT5(Buffer &internal, Buffer &external);
@@ -499,10 +566,6 @@
 		const bool renderTarget;
 
 		bool dirtyContents;   // Sibling surfaces need updating (mipmaps / cube borders).
-		unsigned int paletteUsed;
-
-		static unsigned int *palette;   // FIXME: Not multi-device safe
-		static unsigned int paletteID;
 
 		bool hasParent;
 		bool ownExternal;
diff --git a/src/Pipeline/PixelProgram.cpp b/src/Pipeline/PixelProgram.cpp
index 3d9cfe7..7137a7d 100644
--- a/src/Pipeline/PixelProgram.cpp
+++ b/src/Pipeline/PixelProgram.cpp
@@ -630,15 +630,11 @@
 			switch(state.targetFormat[index])
 			{
 			case FORMAT_R5G6B5:
-			case FORMAT_X8R8G8B8:
-			case FORMAT_X8B8G8R8:
 			case FORMAT_A8R8G8B8:
 			case FORMAT_A8B8G8R8:
-			case FORMAT_SRGB8_X8:
 			case FORMAT_SRGB8_A8:
 			case FORMAT_G8R8:
 			case FORMAT_R8:
-			case FORMAT_A8:
 			case FORMAT_G16R16:
 			case FORMAT_A16B16G16R16:
 				for(unsigned int q = 0; q < state.multiSample; q++)
@@ -671,9 +667,7 @@
 				break;
 			case FORMAT_R32F:
 			case FORMAT_G32R32F:
-			case FORMAT_X32B32G32R32F:
 			case FORMAT_A32B32G32R32F:
-			case FORMAT_X32B32G32R32F_UNSIGNED:
 			case FORMAT_R32I:
 			case FORMAT_G32R32I:
 			case FORMAT_A32B32G32R32I:
@@ -776,13 +770,9 @@
 			case FORMAT_R5G6B5:
 			case FORMAT_A8R8G8B8:
 			case FORMAT_A8B8G8R8:
-			case FORMAT_X8R8G8B8:
-			case FORMAT_X8B8G8R8:
-			case FORMAT_SRGB8_X8:
 			case FORMAT_SRGB8_A8:
 			case FORMAT_G8R8:
 			case FORMAT_R8:
-			case FORMAT_A8:
 			case FORMAT_G16R16:
 			case FORMAT_A16B16G16R16:
 				oC[index].x = Max(oC[index].x, Float4(0.0f)); oC[index].x = Min(oC[index].x, Float4(1.0f));
@@ -792,7 +782,6 @@
 				break;
 			case FORMAT_R32F:
 			case FORMAT_G32R32F:
-			case FORMAT_X32B32G32R32F:
 			case FORMAT_A32B32G32R32F:
 			case FORMAT_R32I:
 			case FORMAT_G32R32I:
@@ -813,12 +802,6 @@
 			case FORMAT_G8R8UI:
 			case FORMAT_A8B8G8R8UI:
 				break;
-			case FORMAT_X32B32G32R32F_UNSIGNED:
-				oC[index].x = Max(oC[index].x, Float4(0.0f));
-				oC[index].y = Max(oC[index].y, Float4(0.0f));
-				oC[index].z = Max(oC[index].z, Float4(0.0f));
-				oC[index].w = Max(oC[index].w, Float4(0.0f));
-				break;
 			default:
 				ASSERT(false);
 			}
diff --git a/src/Pipeline/PixelRoutine.cpp b/src/Pipeline/PixelRoutine.cpp
index 0cf82cb..0519735 100644
--- a/src/Pipeline/PixelRoutine.cpp
+++ b/src/Pipeline/PixelRoutine.cpp
@@ -980,16 +980,6 @@
 			pixel.z = UnpackLow(As<Byte8>(pixel.w), As<Byte8>(pixel.w));
 			pixel.w = UnpackHigh(As<Byte8>(pixel.w), As<Byte8>(pixel.w));
 			break;
-		case FORMAT_A8:
-			buffer = cBuffer + 1 * x;
-			pixel.w = Insert(pixel.w, *Pointer<Short>(buffer), 0);
-			buffer += *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
-			pixel.w = Insert(pixel.w, *Pointer<Short>(buffer), 1);
-			pixel.w = UnpackLow(As<Byte8>(pixel.w), As<Byte8>(pixel.w));
-			pixel.x = Short4(0x0000);
-			pixel.y = Short4(0x0000);
-			pixel.z = Short4(0x0000);
-			break;
 		case FORMAT_R8:
 			buffer = cBuffer + 1 * x;
 			pixel.x = Insert(pixel.x, *Pointer<Short>(buffer), 0);
@@ -1000,24 +990,6 @@
 			pixel.z = Short4(0x0000);
 			pixel.w = Short4(0xFFFFu);
 			break;
-		case FORMAT_X8R8G8B8:
-			buffer = cBuffer + 4 * x;
-			c01 = *Pointer<Short4>(buffer);
-			buffer += *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
-			c23 = *Pointer<Short4>(buffer);
-			pixel.z = c01;
-			pixel.y = c01;
-			pixel.z = UnpackLow(As<Byte8>(pixel.z), As<Byte8>(c23));
-			pixel.y = UnpackHigh(As<Byte8>(pixel.y), As<Byte8>(c23));
-			pixel.x = pixel.z;
-			pixel.z = UnpackLow(As<Byte8>(pixel.z), As<Byte8>(pixel.y));
-			pixel.x = UnpackHigh(As<Byte8>(pixel.x), As<Byte8>(pixel.y));
-			pixel.y = pixel.z;
-			pixel.x = UnpackLow(As<Byte8>(pixel.x), As<Byte8>(pixel.x));
-			pixel.y = UnpackHigh(As<Byte8>(pixel.y), As<Byte8>(pixel.y));
-			pixel.z = UnpackLow(As<Byte8>(pixel.z), As<Byte8>(pixel.z));
-			pixel.w = Short4(0xFFFFu);
-			break;
 		case FORMAT_G8R8:
 			buffer = cBuffer + 2 * x;
 			c01 = As<Short4>(Insert(As<Int2>(c01), *Pointer<Int>(buffer), 0));
@@ -1028,40 +1000,6 @@
 			pixel.z = Short4(0x0000u);
 			pixel.w = Short4(0xFFFFu);
 			break;
-		case FORMAT_X8B8G8R8:
-		case FORMAT_SRGB8_X8:
-			buffer = cBuffer + 4 * x;
-			c01 = *Pointer<Short4>(buffer);
-			buffer += *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
-			c23 = *Pointer<Short4>(buffer);
-			pixel.z = c01;
-			pixel.y = c01;
-			pixel.z = UnpackLow(As<Byte8>(pixel.z), As<Byte8>(c23));
-			pixel.y = UnpackHigh(As<Byte8>(pixel.y), As<Byte8>(c23));
-			pixel.x = pixel.z;
-			pixel.z = UnpackLow(As<Byte8>(pixel.z), As<Byte8>(pixel.y));
-			pixel.x = UnpackHigh(As<Byte8>(pixel.x), As<Byte8>(pixel.y));
-			pixel.y = pixel.z;
-			pixel.w = pixel.x;
-			pixel.x = UnpackLow(As<Byte8>(pixel.z), As<Byte8>(pixel.z));
-			pixel.y = UnpackHigh(As<Byte8>(pixel.y), As<Byte8>(pixel.y));
-			pixel.z = UnpackLow(As<Byte8>(pixel.w), As<Byte8>(pixel.w));
-			pixel.w = Short4(0xFFFFu);
-			break;
-		case FORMAT_A8G8R8B8Q:
-			UNIMPLEMENTED();
-		//	pixel.z = UnpackLow(As<Byte8>(pixel.z), *Pointer<Byte8>(cBuffer + 8 * x + 0));
-		//	pixel.x = UnpackHigh(As<Byte8>(pixel.x), *Pointer<Byte8>(cBuffer + 8 * x + 0));
-		//	pixel.y = UnpackLow(As<Byte8>(pixel.y), *Pointer<Byte8>(cBuffer + 8 * x + 8));
-		//	pixel.w = UnpackHigh(As<Byte8>(pixel.w), *Pointer<Byte8>(cBuffer + 8 * x + 8));
-			break;
-		case FORMAT_X8G8R8B8Q:
-			UNIMPLEMENTED();
-		//	pixel.z = UnpackLow(As<Byte8>(pixel.z), *Pointer<Byte8>(cBuffer + 8 * x + 0));
-		//	pixel.x = UnpackHigh(As<Byte8>(pixel.x), *Pointer<Byte8>(cBuffer + 8 * x + 0));
-		//	pixel.y = UnpackLow(As<Byte8>(pixel.y), *Pointer<Byte8>(cBuffer + 8 * x + 8));
-		//	pixel.w = Short4(0xFFFFu);
-			break;
 		case FORMAT_A16B16G16R16:
 			buffer = cBuffer;
 			pixel.x = *Pointer<Short4>(buffer + 8 * x);
@@ -1325,13 +1263,8 @@
 				current.y = AddSat(As<UShort4>(current.y), UShort4(0x0200));
 				current.z = AddSat(As<UShort4>(current.z), UShort4(0x0400));
 				break;
-			case FORMAT_X8G8R8B8Q:
-			case FORMAT_A8G8R8B8Q:
-			case FORMAT_X8R8G8B8:
-			case FORMAT_X8B8G8R8:
 			case FORMAT_A8R8G8B8:
 			case FORMAT_A8B8G8R8:
-			case FORMAT_SRGB8_X8:
 			case FORMAT_SRGB8_A8:
 			case FORMAT_G8R8:
 			case FORMAT_R8:
@@ -1359,28 +1292,8 @@
 				current.x = current.x | current.y | current.z;
 			}
 			break;
-		case FORMAT_X8G8R8B8Q:
-			UNIMPLEMENTED();
-		//	current.x = As<Short4>(As<UShort4>(current.x) >> 8);
-		//	current.y = As<Short4>(As<UShort4>(current.y) >> 8);
-		//	current.z = As<Short4>(As<UShort4>(current.z) >> 8);
-
-		//	current.z = As<Short4>(Pack(As<UShort4>(current.z), As<UShort4>(current.x)));
-		//	current.y = As<Short4>(Pack(As<UShort4>(current.y), As<UShort4>(current.y)));
-			break;
-		case FORMAT_A8G8R8B8Q:
-			UNIMPLEMENTED();
-		//	current.x = As<Short4>(As<UShort4>(current.x) >> 8);
-		//	current.y = As<Short4>(As<UShort4>(current.y) >> 8);
-		//	current.z = As<Short4>(As<UShort4>(current.z) >> 8);
-		//	current.w = As<Short4>(As<UShort4>(current.w) >> 8);
-
-		//	current.z = As<Short4>(Pack(As<UShort4>(current.z), As<UShort4>(current.x)));
-		//	current.y = As<Short4>(Pack(As<UShort4>(current.y), As<UShort4>(current.w)));
-			break;
-		case FORMAT_X8R8G8B8:
 		case FORMAT_A8R8G8B8:
-			if(state.targetFormat[index] == FORMAT_X8R8G8B8 || rgbaWriteMask == 0x7)
+			if(rgbaWriteMask == 0x7)
 			{
 				current.x = As<Short4>(As<UShort4>(current.x) >> 8);
 				current.y = As<Short4>(As<UShort4>(current.y) >> 8);
@@ -1414,11 +1327,9 @@
 				current.y = As<Short4>(UnpackHigh(current.y, current.x));
 			}
 			break;
-		case FORMAT_X8B8G8R8:
 		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_X8:
 		case FORMAT_SRGB8_A8:
-			if(state.targetFormat[index] == FORMAT_X8B8G8R8 || state.targetFormat[index] == FORMAT_SRGB8_X8 || rgbaWriteMask == 0x7)
+			if(rgbaWriteMask == 0x7)
 			{
 				current.x = As<Short4>(As<UShort4>(current.x) >> 8);
 				current.y = As<Short4>(As<UShort4>(current.y) >> 8);
@@ -1463,10 +1374,6 @@
 			current.x = As<Short4>(As<UShort4>(current.x) >> 8);
 			current.x = As<Short4>(PackUnsigned(current.x, current.x));
 			break;
-		case FORMAT_A8:
-			current.w = As<Short4>(As<UShort4>(current.w) >> 8);
-			current.w = As<Short4>(PackUnsigned(current.w, current.w));
-			break;
 		case FORMAT_G16R16:
 			current.z = current.x;
 			current.x = As<Short4>(UnpackLow(current.x, current.y));
@@ -1540,52 +1447,12 @@
 				*Pointer<Int>(buffer) = c23;
 			}
 			break;
-		case FORMAT_A8G8R8B8Q:
-		case FORMAT_X8G8R8B8Q:   // FIXME: Don't touch alpha?
-			UNIMPLEMENTED();
-		//	value = *Pointer<Short4>(cBuffer + 8 * x + 0);
-
-		//	if((state.targetFormat[index] == FORMAT_A8G8R8B8Q && bgraWriteMask != 0x0000000F) ||
-		//	   ((state.targetFormat[index] == FORMAT_X8G8R8B8Q && bgraWriteMask != 0x00000007) &&
-		//	    (state.targetFormat[index] == FORMAT_X8G8R8B8Q && bgraWriteMask != 0x0000000F)))   // FIXME: Need for masking when XRGB && Fh?
-		//	{
-		//		Short4 masked = value;
-		//		c01 &= *Pointer<Short4>(constants + OFFSET(Constants,maskB4Q[bgraWriteMask][0]));
-		//		masked &= *Pointer<Short4>(constants + OFFSET(Constants,invMaskB4Q[bgraWriteMask][0]));
-		//		c01 |= masked;
-		//	}
-
-		//	c01 &= *Pointer<Short4>(constants + OFFSET(Constants,maskD01Q) + xMask * 8);
-		//	value &= *Pointer<Short4>(constants + OFFSET(Constants,invMaskD01Q) + xMask * 8);
-		//	c01 |= value;
-		//	*Pointer<Short4>(cBuffer + 8 * x + 0) = c01;
-
-		//	value = *Pointer<Short4>(cBuffer + 8 * x + 8);
-
-		//	if((state.targetFormat[index] == FORMAT_A8G8R8B8Q && bgraWriteMask != 0x0000000F) ||
-		//	   ((state.targetFormat[index] == FORMAT_X8G8R8B8Q && bgraWriteMask != 0x00000007) &&
-		//	    (state.targetFormat[index] == FORMAT_X8G8R8B8Q && bgraWriteMask != 0x0000000F)))   // FIXME: Need for masking when XRGB && Fh?
-		//	{
-		//		Short4 masked = value;
-		//		c23 &= *Pointer<Short4>(constants + OFFSET(Constants,maskB4Q[bgraWriteMask][0]));
-		//		masked &= *Pointer<Short4>(constants + OFFSET(Constants,invMaskB4Q[bgraWriteMask][0]));
-		//		c23 |= masked;
-		//	}
-
-		//	c23 &= *Pointer<Short4>(constants + OFFSET(Constants,maskD23Q) + xMask * 8);
-		//	value &= *Pointer<Short4>(constants + OFFSET(Constants,invMaskD23Q) + xMask * 8);
-		//	c23 |= value;
-		//	*Pointer<Short4>(cBuffer + 8 * x + 8) = c23;
-			break;
 		case FORMAT_A8R8G8B8:
-		case FORMAT_X8R8G8B8:   // FIXME: Don't touch alpha?
 			{
 				Pointer<Byte> buffer = cBuffer + x * 4;
 				Short4 value = *Pointer<Short4>(buffer);
 
-				if((state.targetFormat[index] == FORMAT_A8R8G8B8 && bgraWriteMask != 0x0000000F) ||
-				   ((state.targetFormat[index] == FORMAT_X8R8G8B8 && bgraWriteMask != 0x00000007) &&
-					(state.targetFormat[index] == FORMAT_X8R8G8B8 && bgraWriteMask != 0x0000000F)))   // FIXME: Need for masking when XRGB && Fh?
+				if(state.targetFormat[index] == FORMAT_A8R8G8B8 && bgraWriteMask != 0x0000000F)   // FIXME: Need for masking when XRGB && Fh?
 				{
 					Short4 masked = value;
 					c01 &= *Pointer<Short4>(constants + OFFSET(Constants,maskB4Q[bgraWriteMask][0]));
@@ -1601,9 +1468,7 @@
 				buffer += *Pointer<Int>(data + OFFSET(DrawData,colorPitchB[index]));
 				value = *Pointer<Short4>(buffer);
 
-				if((state.targetFormat[index] == FORMAT_A8R8G8B8 && bgraWriteMask != 0x0000000F) ||
-				   ((state.targetFormat[index] == FORMAT_X8R8G8B8 && bgraWriteMask != 0x00000007) &&
-					(state.targetFormat[index] == FORMAT_X8R8G8B8 && bgraWriteMask != 0x0000000F)))   // FIXME: Need for masking when XRGB && Fh?
+				if(state.targetFormat[index] == FORMAT_A8R8G8B8 && bgraWriteMask != 0x0000000F)   // FIXME: Need for masking when XRGB && Fh?
 				{
 					Short4 masked = value;
 					c23 &= *Pointer<Short4>(constants + OFFSET(Constants,maskB4Q[bgraWriteMask][0]));
@@ -1618,16 +1483,12 @@
 			}
 			break;
 		case FORMAT_A8B8G8R8:
-		case FORMAT_X8B8G8R8:   // FIXME: Don't touch alpha?
-		case FORMAT_SRGB8_X8:
 		case FORMAT_SRGB8_A8:
 			{
 				Pointer<Byte> buffer = cBuffer + x * 4;
 				Short4 value = *Pointer<Short4>(buffer);
 
-				bool masked = (((state.targetFormat[index] == FORMAT_A8B8G8R8 || state.targetFormat[index] == FORMAT_SRGB8_A8) && rgbaWriteMask != 0x0000000F) ||
-				              (((state.targetFormat[index] == FORMAT_X8B8G8R8 || state.targetFormat[index] == FORMAT_SRGB8_X8) && rgbaWriteMask != 0x00000007) &&
-				               ((state.targetFormat[index] == FORMAT_X8B8G8R8 || state.targetFormat[index] == FORMAT_SRGB8_X8) && rgbaWriteMask != 0x0000000F))); // FIXME: Need for masking when XBGR && Fh?
+				bool masked = ((state.targetFormat[index] == FORMAT_A8B8G8R8 || state.targetFormat[index] == FORMAT_SRGB8_A8) && rgbaWriteMask != 0x0000000F); // FIXME: Need for masking when XBGR && Fh?
 
 				if(masked)
 				{
@@ -1701,23 +1562,6 @@
 				*Pointer<Short>(buffer + pitch) = Extract(current.x, 1);
 			}
 			break;
-		case FORMAT_A8:
-			if(rgbaWriteMask & 0x00000008)
-			{
-				Pointer<Byte> buffer = cBuffer + 1 * x;
-				Short4 value;
-				value = Insert(value, *Pointer<Short>(buffer), 0);
-				Int pitch = *Pointer<Int>(data + OFFSET(DrawData,colorPitchB[index]));
-				value = Insert(value, *Pointer<Short>(buffer + pitch), 1);
-
-				current.w &= *Pointer<Short4>(constants + OFFSET(Constants,maskB4Q) + 8 * xMask);
-				value &= *Pointer<Short4>(constants + OFFSET(Constants,invMaskB4Q) + 8 * xMask);
-				current.w |= value;
-
-				*Pointer<Short>(buffer) = Extract(current.w, 0);
-				*Pointer<Short>(buffer + pitch) = Extract(current.w, 1);
-			}
-			break;
 		case FORMAT_G16R16:
 			{
 				Pointer<Byte> buffer = cBuffer + 4 * x;
@@ -2006,9 +1850,7 @@
 			pixel.y = pixel.z;
 			pixel.z = pixel.w = one;
 			break;
-		case FORMAT_X32B32G32R32F:
 		case FORMAT_A32B32G32R32F:
-		case FORMAT_X32B32G32R32F_UNSIGNED:
 		case FORMAT_A32B32G32R32I:
 		case FORMAT_A32B32G32R32UI:
 			buffer = cBuffer;
@@ -2018,11 +1860,6 @@
 			pixel.z = *Pointer<Float4>(buffer + 16 * x, 16);
 			pixel.w = *Pointer<Float4>(buffer + 16 * x + 16, 16);
 			transpose4x4(pixel.x, pixel.y, pixel.z, pixel.w);
-			if(state.targetFormat[index] == FORMAT_X32B32G32R32F ||
-			   state.targetFormat[index] == FORMAT_X32B32G32R32F_UNSIGNED)
-			{
-				pixel.w = Float4(1.0f);
-			}
 			break;
 		default:
 			ASSERT(false);
@@ -2169,9 +2006,7 @@
 			oC.z = UnpackHigh(oC.z, oC.y);
 			oC.y = oC.z;
 			break;
-		case FORMAT_X32B32G32R32F:
 		case FORMAT_A32B32G32R32F:
-		case FORMAT_X32B32G32R32F_UNSIGNED:
 		case FORMAT_A32B32G32R32I:
 		case FORMAT_A32B32G32R32UI:
 		case FORMAT_A16B16G16R16I:
@@ -2423,9 +2258,7 @@
 				*Pointer<UInt>(buffer) = As<UInt>(Extract(packedCol, 0));
 			}
 			break;
-		case FORMAT_X32B32G32R32F:
 		case FORMAT_A32B32G32R32F:
-		case FORMAT_X32B32G32R32F_UNSIGNED:
 		case FORMAT_A32B32G32R32I:
 		case FORMAT_A32B32G32R32UI:
 			buffer = cBuffer + 16 * x;
diff --git a/src/Pipeline/SamplerCore.cpp b/src/Pipeline/SamplerCore.cpp
index a7acf2b..0b49d4e 100644
--- a/src/Pipeline/SamplerCore.cpp
+++ b/src/Pipeline/SamplerCore.cpp
@@ -166,7 +166,6 @@
 					{
 					case FORMAT_R8_SNORM:
 					case FORMAT_G8R8_SNORM:
-					case FORMAT_X8B8G8R8_SNORM:
 					case FORMAT_A8B8G8R8_SNORM:
 					case FORMAT_R8:
 					case FORMAT_R5G6B5:
@@ -175,8 +174,6 @@
 					case FORMAT_R8UI:
 					case FORMAT_G8R8I:
 					case FORMAT_G8R8UI:
-					case FORMAT_X8B8G8R8I:
-					case FORMAT_X8B8G8R8UI:
 					case FORMAT_A8B8G8R8I:
 					case FORMAT_A8B8G8R8UI:
 					case FORMAT_R16I:
@@ -184,8 +181,6 @@
 					case FORMAT_G16R16:
 					case FORMAT_G16R16I:
 					case FORMAT_G16R16UI:
-					case FORMAT_X16B16G16R16I:
-					case FORMAT_X16B16G16R16UI:
 					case FORMAT_A16B16G16R16:
 					case FORMAT_A16B16G16R16I:
 					case FORMAT_A16B16G16R16UI:
@@ -193,22 +188,11 @@
 					case FORMAT_R32UI:
 					case FORMAT_G32R32I:
 					case FORMAT_G32R32UI:
-					case FORMAT_X32B32G32R32I:
-					case FORMAT_X32B32G32R32UI:
 					case FORMAT_A32B32G32R32I:
 					case FORMAT_A32B32G32R32UI:
-					case FORMAT_X8R8G8B8:
-					case FORMAT_X8B8G8R8:
 					case FORMAT_A8R8G8B8:
 					case FORMAT_A8B8G8R8:
-					case FORMAT_SRGB8_X8:
 					case FORMAT_SRGB8_A8:
-					case FORMAT_V8U8:
-					case FORMAT_Q8W8V8U8:
-					case FORMAT_X8L8V8U8:
-					case FORMAT_V16U16:
-					case FORMAT_A16W16V16U16:
-					case FORMAT_Q16W16V16U16:
 					case FORMAT_YV12_BT601:
 					case FORMAT_YV12_BT709:
 					case FORMAT_YV12_JFIF:
@@ -216,40 +200,13 @@
 						if(componentCount < 3) c.z = Short4(defaultColorValue);
 						if(componentCount < 4) c.w = Short4(0x1000);
 						break;
-					case FORMAT_A8:
-						c.w = c.x;
-						c.x = Short4(0x0000);
-						c.y = Short4(0x0000);
-						c.z = Short4(0x0000);
-						break;
-					case FORMAT_L8:
-					case FORMAT_L16:
-						c.y = c.x;
-						c.z = c.x;
-						c.w = Short4(0x1000);
-						break;
-					case FORMAT_A8L8:
-						c.w = c.y;
-						c.y = c.x;
-						c.z = c.x;
-						break;
 					case FORMAT_R32F:
 						c.y = Short4(defaultColorValue);
 					case FORMAT_G32R32F:
 						c.z = Short4(defaultColorValue);
-					case FORMAT_X32B32G32R32F:
-					case FORMAT_X32B32G32R32F_UNSIGNED:
 						c.w = Short4(0x1000);
 					case FORMAT_A32B32G32R32F:
 						break;
-					case FORMAT_D32F_LOCKABLE:
-					case FORMAT_D32FS8_TEXTURE:
-					case FORMAT_D32F_SHADOW:
-					case FORMAT_D32FS8_SHADOW:
-						c.y = c.x;
-						c.z = c.x;
-						c.w = c.x;
-						break;
 					default:
 						ASSERT(false);
 					}
@@ -402,13 +359,6 @@
 				case FORMAT_G32R32I:
 				case FORMAT_G32R32UI:
 					c.z = As<Float4>(UInt4(0));
-				case FORMAT_X8B8G8R8I:
-				case FORMAT_X8B8G8R8UI:
-				case FORMAT_X16B16G16R16I:
-				case FORMAT_X16B16G16R16UI:
-				case FORMAT_X32B32G32R32I:
-				case FORMAT_X32B32G32R32UI:
-					c.w = As<Float4>(UInt4(1));
 				case FORMAT_A8B8G8R8I:
 				case FORMAT_A8B8G8R8UI:
 				case FORMAT_A16B16G16R16I:
@@ -418,25 +368,15 @@
 					break;
 				case FORMAT_R8_SNORM:
 				case FORMAT_G8R8_SNORM:
-				case FORMAT_X8B8G8R8_SNORM:
 				case FORMAT_A8B8G8R8_SNORM:
 				case FORMAT_R8:
 				case FORMAT_R5G6B5:
 				case FORMAT_G8R8:
 				case FORMAT_G16R16:
 				case FORMAT_A16B16G16R16:
-				case FORMAT_X8R8G8B8:
-				case FORMAT_X8B8G8R8:
 				case FORMAT_A8R8G8B8:
 				case FORMAT_A8B8G8R8:
-				case FORMAT_SRGB8_X8:
 				case FORMAT_SRGB8_A8:
-				case FORMAT_V8U8:
-				case FORMAT_Q8W8V8U8:
-				case FORMAT_X8L8V8U8:
-				case FORMAT_V16U16:
-				case FORMAT_A16W16V16U16:
-				case FORMAT_Q16W16V16U16:
 				case FORMAT_YV12_BT601:
 				case FORMAT_YV12_BT709:
 				case FORMAT_YV12_JFIF:
@@ -444,40 +384,13 @@
 					if(componentCount < 3) c.z = Float4(defaultColorValue);
 					if(componentCount < 4) c.w = Float4(1.0f);
 					break;
-				case FORMAT_A8:
-					c.w = c.x;
-					c.x = Float4(0.0f);
-					c.y = Float4(0.0f);
-					c.z = Float4(0.0f);
-					break;
-				case FORMAT_L8:
-				case FORMAT_L16:
-					c.y = c.x;
-					c.z = c.x;
-					c.w = Float4(1.0f);
-					break;
-				case FORMAT_A8L8:
-					c.w = c.y;
-					c.y = c.x;
-					c.z = c.x;
-					break;
 				case FORMAT_R32F:
 					c.y = Float4(defaultColorValue);
 				case FORMAT_G32R32F:
 					c.z = Float4(defaultColorValue);
-				case FORMAT_X32B32G32R32F:
-				case FORMAT_X32B32G32R32F_UNSIGNED:
 					c.w = Float4(1.0f);
 				case FORMAT_A32B32G32R32F:
 					break;
-				case FORMAT_D32F_LOCKABLE:
-				case FORMAT_D32FS8_TEXTURE:
-				case FORMAT_D32F_SHADOW:
-				case FORMAT_D32FS8_SHADOW:
-					c.y = Float4(0.0f);
-					c.z = Float4(0.0f);
-					c.w = Float4(1.0f);
-					break;
 				default:
 					ASSERT(false);
 				}
@@ -1796,7 +1709,6 @@
 					case FORMAT_A8B8G8R8:
 					case FORMAT_A8B8G8R8I:
 					case FORMAT_A8B8G8R8_SNORM:
-					case FORMAT_Q8W8V8U8:
 					case FORMAT_SRGB8_A8:
 						c.z = As<Short4>(UnpackHigh(c.x, c.y));
 						c.x = As<Short4>(UnpackLow(c.x, c.y));
@@ -1830,57 +1742,6 @@
 					}
 				}
 				break;
-			case 3:
-				{
-					Byte4 c0 = Pointer<Byte4>(buffer[f0])[index[0]];
-					Byte4 c1 = Pointer<Byte4>(buffer[f1])[index[1]];
-					Byte4 c2 = Pointer<Byte4>(buffer[f2])[index[2]];
-					Byte4 c3 = Pointer<Byte4>(buffer[f3])[index[3]];
-					c.x = Unpack(c0, c1);
-					c.y = Unpack(c2, c3);
-
-					switch(state.textureFormat)
-					{
-					case FORMAT_X8R8G8B8:
-						c.z = As<Short4>(UnpackLow(c.x, c.y));
-						c.x = As<Short4>(UnpackHigh(c.x, c.y));
-						c.y = c.z;
-						c.z = UnpackLow(As<Byte8>(c.z), As<Byte8>(c.z));
-						c.y = UnpackHigh(As<Byte8>(c.y), As<Byte8>(c.y));
-						c.x = UnpackLow(As<Byte8>(c.x), As<Byte8>(c.x));
-						break;
-					case FORMAT_X8B8G8R8_SNORM:
-					case FORMAT_X8B8G8R8I:
-					case FORMAT_X8B8G8R8:
-					case FORMAT_X8L8V8U8:
-					case FORMAT_SRGB8_X8:
-						c.z = As<Short4>(UnpackHigh(c.x, c.y));
-						c.x = As<Short4>(UnpackLow(c.x, c.y));
-						c.y = c.x;
-						c.x = UnpackLow(As<Byte8>(c.x), As<Byte8>(c.x));
-						c.y = UnpackHigh(As<Byte8>(c.y), As<Byte8>(c.y));
-						c.z = UnpackLow(As<Byte8>(c.z), As<Byte8>(c.z));
-						// Propagate sign bit
-						if(state.textureFormat == FORMAT_X8B8G8R8I)
-						{
-							c.x >>= 8;
-							c.y >>= 8;
-							c.z >>= 8;
-						}
-						break;
-					case FORMAT_X8B8G8R8UI:
-						c.z = As<Short4>(UnpackHigh(c.x, c.y));
-						c.x = As<Short4>(UnpackLow(c.x, c.y));
-						c.y = c.x;
-						c.x = UnpackLow(As<Byte8>(c.x), As<Byte8>(Short4(0)));
-						c.y = UnpackHigh(As<Byte8>(c.y), As<Byte8>(Short4(0)));
-						c.z = UnpackLow(As<Byte8>(c.z), As<Byte8>(Short4(0)));
-						break;
-					default:
-						ASSERT(false);
-					}
-				}
-				break;
 			case 2:
 				c.x = Insert(c.x, Pointer<Short>(buffer[f0])[index[0]], 0);
 				c.x = Insert(c.x, Pointer<Short>(buffer[f1])[index[1]], 1);
@@ -1891,8 +1752,6 @@
 				{
 				case FORMAT_G8R8:
 				case FORMAT_G8R8_SNORM:
-				case FORMAT_V8U8:
-				case FORMAT_A8L8:
 					c.y = (c.x & Short4(0xFF00u)) | As<Short4>(As<UShort4>(c.x) >> 8);
 					c.x = (c.x & Short4(0x00FFu)) | (c.x << 8);
 					break;
@@ -2012,9 +1871,9 @@
 		if(hasYuvFormat())
 		{
 			// Generic YPbPr to RGB transformation
-			// R = Y                               +           2 * (1 - Kr) * Pr
-			// G = Y - 2 * Kb * (1 - Kb) / Kg * Pb - 2 * Kr * (1 - Kr) / Kg * Pr
-			// B = Y +           2 * (1 - Kb) * Pb
+				// R = Y                               +           2 * (1 - Kr) * Pr
+				// G = Y - 2 * Kb * (1 - Kb) / Kg * Pb - 2 * Kr * (1 - Kr) / Kg * Pr
+				// B = Y +           2 * (1 - Kb) * Pb
 
 			float Kb = 0.114f;
 			float Kr = 0.299f;
@@ -2053,10 +1912,10 @@
 			const float Uu = studioSwing ? 255.0f / (240 - 16) : 1.0f;
 			const float Vv = studioSwing ? 255.0f / (240 - 16) : 1.0f;
 
-			const float Rv = Vv *  Rr;
-			const float Gu = Uu *  Gb;
-			const float Gv = Vv *  Gr;
-			const float Bu = Uu *  Bb;
+			const float Rv = Vv * Rr;
+			const float Gu = Uu * Gb;
+			const float Gv = Vv * Gr;
+			const float Bu = Uu * Bb;
 
 			const float R0 = (studioSwing * -16 * Yy - 128 * Rv) / 255;
 			const float G0 = (studioSwing * -16 * Yy - 128 * Gu - 128 * Gv) / 255;
@@ -2599,59 +2458,33 @@
 			return true;
 		case FORMAT_R8_SNORM:
 		case FORMAT_G8R8_SNORM:
-		case FORMAT_X8B8G8R8_SNORM:
 		case FORMAT_A8B8G8R8_SNORM:
 		case FORMAT_R8I:
 		case FORMAT_R8UI:
 		case FORMAT_G8R8I:
 		case FORMAT_G8R8UI:
-		case FORMAT_X8B8G8R8I:
-		case FORMAT_X8B8G8R8UI:
 		case FORMAT_A8B8G8R8I:
 		case FORMAT_A8B8G8R8UI:
 		case FORMAT_R32I:
 		case FORMAT_R32UI:
 		case FORMAT_G32R32I:
 		case FORMAT_G32R32UI:
-		case FORMAT_X32B32G32R32I:
-		case FORMAT_X32B32G32R32UI:
 		case FORMAT_A32B32G32R32I:
 		case FORMAT_A32B32G32R32UI:
 		case FORMAT_G8R8:
-		case FORMAT_X8R8G8B8:
-		case FORMAT_X8B8G8R8:
 		case FORMAT_A8R8G8B8:
 		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_X8:
 		case FORMAT_SRGB8_A8:
-		case FORMAT_V8U8:
-		case FORMAT_Q8W8V8U8:
-		case FORMAT_X8L8V8U8:
 		case FORMAT_R32F:
 		case FORMAT_G32R32F:
-		case FORMAT_X32B32G32R32F:
 		case FORMAT_A32B32G32R32F:
-		case FORMAT_X32B32G32R32F_UNSIGNED:
-		case FORMAT_A8:
 		case FORMAT_R8:
-		case FORMAT_L8:
-		case FORMAT_A8L8:
-		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32FS8_TEXTURE:
-		case FORMAT_D32F_SHADOW:
-		case FORMAT_D32FS8_SHADOW:
-		case FORMAT_L16:
 		case FORMAT_G16R16:
 		case FORMAT_A16B16G16R16:
-		case FORMAT_V16U16:
-		case FORMAT_A16W16V16U16:
-		case FORMAT_Q16W16V16U16:
 		case FORMAT_R16I:
 		case FORMAT_R16UI:
 		case FORMAT_G16R16I:
 		case FORMAT_G16R16UI:
-		case FORMAT_X16B16G16R16I:
-		case FORMAT_X16B16G16R16UI:
 		case FORMAT_A16B16G16R16I:
 		case FORMAT_A16B16G16R16UI:
 		case FORMAT_YV12_BT601:
@@ -2670,62 +2503,36 @@
 		switch(state.textureFormat)
 		{
 		case FORMAT_G8R8:
-		case FORMAT_X8R8G8B8:
-		case FORMAT_X8B8G8R8:
 		case FORMAT_A8R8G8B8:
 		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_X8:
 		case FORMAT_SRGB8_A8:
-		case FORMAT_V8U8:
-		case FORMAT_Q8W8V8U8:
-		case FORMAT_X8L8V8U8:
-		case FORMAT_A8:
 		case FORMAT_R8:
-		case FORMAT_L8:
-		case FORMAT_A8L8:
 		case FORMAT_R8_SNORM:
 		case FORMAT_G8R8_SNORM:
-		case FORMAT_X8B8G8R8_SNORM:
 		case FORMAT_A8B8G8R8_SNORM:
 		case FORMAT_R8I:
 		case FORMAT_R8UI:
 		case FORMAT_G8R8I:
 		case FORMAT_G8R8UI:
-		case FORMAT_X8B8G8R8I:
-		case FORMAT_X8B8G8R8UI:
 		case FORMAT_A8B8G8R8I:
 		case FORMAT_A8B8G8R8UI:
 			return true;
 		case FORMAT_R5G6B5:
 		case FORMAT_R32F:
 		case FORMAT_G32R32F:
-		case FORMAT_X32B32G32R32F:
 		case FORMAT_A32B32G32R32F:
-		case FORMAT_X32B32G32R32F_UNSIGNED:
-		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32FS8_TEXTURE:
-		case FORMAT_D32F_SHADOW:
-		case FORMAT_D32FS8_SHADOW:
-		case FORMAT_L16:
 		case FORMAT_G16R16:
 		case FORMAT_A16B16G16R16:
-		case FORMAT_V16U16:
-		case FORMAT_A16W16V16U16:
-		case FORMAT_Q16W16V16U16:
 		case FORMAT_R32I:
 		case FORMAT_R32UI:
 		case FORMAT_G32R32I:
 		case FORMAT_G32R32UI:
-		case FORMAT_X32B32G32R32I:
-		case FORMAT_X32B32G32R32UI:
 		case FORMAT_A32B32G32R32I:
 		case FORMAT_A32B32G32R32UI:
 		case FORMAT_R16I:
 		case FORMAT_R16UI:
 		case FORMAT_G16R16I:
 		case FORMAT_G16R16UI:
-		case FORMAT_X16B16G16R16I:
-		case FORMAT_X16B16G16R16UI:
 		case FORMAT_A16B16G16R16I:
 		case FORMAT_A16B16G16R16UI:
 		case FORMAT_YV12_BT601:
@@ -2746,65 +2553,39 @@
 		case FORMAT_R5G6B5:
 		case FORMAT_R8_SNORM:
 		case FORMAT_G8R8_SNORM:
-		case FORMAT_X8B8G8R8_SNORM:
 		case FORMAT_A8B8G8R8_SNORM:
 		case FORMAT_R8I:
 		case FORMAT_R8UI:
 		case FORMAT_G8R8I:
 		case FORMAT_G8R8UI:
-		case FORMAT_X8B8G8R8I:
-		case FORMAT_X8B8G8R8UI:
 		case FORMAT_A8B8G8R8I:
 		case FORMAT_A8B8G8R8UI:
 		case FORMAT_R32I:
 		case FORMAT_R32UI:
 		case FORMAT_G32R32I:
 		case FORMAT_G32R32UI:
-		case FORMAT_X32B32G32R32I:
-		case FORMAT_X32B32G32R32UI:
 		case FORMAT_A32B32G32R32I:
 		case FORMAT_A32B32G32R32UI:
 		case FORMAT_G8R8:
-		case FORMAT_X8R8G8B8:
-		case FORMAT_X8B8G8R8:
 		case FORMAT_A8R8G8B8:
 		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_X8:
 		case FORMAT_SRGB8_A8:
-		case FORMAT_V8U8:
-		case FORMAT_Q8W8V8U8:
-		case FORMAT_X8L8V8U8:
 		case FORMAT_R32F:
 		case FORMAT_G32R32F:
-		case FORMAT_X32B32G32R32F:
 		case FORMAT_A32B32G32R32F:
-		case FORMAT_X32B32G32R32F_UNSIGNED:
-		case FORMAT_A8:
 		case FORMAT_R8:
-		case FORMAT_L8:
-		case FORMAT_A8L8:
-		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32FS8_TEXTURE:
-		case FORMAT_D32F_SHADOW:
-		case FORMAT_D32FS8_SHADOW:
 		case FORMAT_YV12_BT601:
 		case FORMAT_YV12_BT709:
 		case FORMAT_YV12_JFIF:
 			return false;
-		case FORMAT_L16:
 		case FORMAT_G16R16:
 		case FORMAT_A16B16G16R16:
 		case FORMAT_R16I:
 		case FORMAT_R16UI:
 		case FORMAT_G16R16I:
 		case FORMAT_G16R16UI:
-		case FORMAT_X16B16G16R16I:
-		case FORMAT_X16B16G16R16UI:
 		case FORMAT_A16B16G16R16I:
 		case FORMAT_A16B16G16R16UI:
-		case FORMAT_V16U16:
-		case FORMAT_A16W16V16U16:
-		case FORMAT_Q16W16V16U16:
 			return true;
 		default:
 			ASSERT(false);
@@ -2820,53 +2601,29 @@
 		case FORMAT_R5G6B5:
 		case FORMAT_R8_SNORM:
 		case FORMAT_G8R8_SNORM:
-		case FORMAT_X8B8G8R8_SNORM:
 		case FORMAT_A8B8G8R8_SNORM:
 		case FORMAT_R8I:
 		case FORMAT_R8UI:
 		case FORMAT_G8R8I:
 		case FORMAT_G8R8UI:
-		case FORMAT_X8B8G8R8I:
-		case FORMAT_X8B8G8R8UI:
 		case FORMAT_A8B8G8R8I:
 		case FORMAT_A8B8G8R8UI:
 		case FORMAT_G8R8:
-		case FORMAT_X8R8G8B8:
-		case FORMAT_X8B8G8R8:
 		case FORMAT_A8R8G8B8:
 		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_X8:
 		case FORMAT_SRGB8_A8:
-		case FORMAT_V8U8:
-		case FORMAT_Q8W8V8U8:
-		case FORMAT_X8L8V8U8:
-		case FORMAT_L16:
 		case FORMAT_G16R16:
 		case FORMAT_A16B16G16R16:
 		case FORMAT_R16I:
 		case FORMAT_R16UI:
 		case FORMAT_G16R16I:
 		case FORMAT_G16R16UI:
-		case FORMAT_X16B16G16R16I:
-		case FORMAT_X16B16G16R16UI:
 		case FORMAT_A16B16G16R16I:
 		case FORMAT_A16B16G16R16UI:
-		case FORMAT_V16U16:
-		case FORMAT_A16W16V16U16:
-		case FORMAT_Q16W16V16U16:
 		case FORMAT_R32F:
 		case FORMAT_G32R32F:
-		case FORMAT_X32B32G32R32F:
 		case FORMAT_A32B32G32R32F:
-		case FORMAT_X32B32G32R32F_UNSIGNED:
-		case FORMAT_A8:
 		case FORMAT_R8:
-		case FORMAT_L8:
-		case FORMAT_A8L8:
-		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32FS8_TEXTURE:
-		case FORMAT_D32F_SHADOW:
-		case FORMAT_D32FS8_SHADOW:
 		case FORMAT_YV12_BT601:
 		case FORMAT_YV12_BT709:
 		case FORMAT_YV12_JFIF:
@@ -2875,8 +2632,6 @@
 		case FORMAT_R32UI:
 		case FORMAT_G32R32I:
 		case FORMAT_G32R32UI:
-		case FORMAT_X32B32G32R32I:
-		case FORMAT_X32B32G32R32UI:
 		case FORMAT_A32B32G32R32I:
 		case FORMAT_A32B32G32R32UI:
 			return true;
@@ -2898,61 +2653,35 @@
 		case FORMAT_R5G6B5:
 		case FORMAT_R8_SNORM:
 		case FORMAT_G8R8_SNORM:
-		case FORMAT_X8B8G8R8_SNORM:
 		case FORMAT_A8B8G8R8_SNORM:
 		case FORMAT_R8I:
 		case FORMAT_R8UI:
 		case FORMAT_G8R8I:
 		case FORMAT_G8R8UI:
-		case FORMAT_X8B8G8R8I:
-		case FORMAT_X8B8G8R8UI:
 		case FORMAT_A8B8G8R8I:
 		case FORMAT_A8B8G8R8UI:
 		case FORMAT_R32I:
 		case FORMAT_R32UI:
 		case FORMAT_G32R32I:
 		case FORMAT_G32R32UI:
-		case FORMAT_X32B32G32R32I:
-		case FORMAT_X32B32G32R32UI:
 		case FORMAT_A32B32G32R32I:
 		case FORMAT_A32B32G32R32UI:
 		case FORMAT_G8R8:
-		case FORMAT_X8R8G8B8:
-		case FORMAT_X8B8G8R8:
 		case FORMAT_A8R8G8B8:
 		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_X8:
 		case FORMAT_SRGB8_A8:
-		case FORMAT_V8U8:
-		case FORMAT_Q8W8V8U8:
-		case FORMAT_X8L8V8U8:
 		case FORMAT_R32F:
 		case FORMAT_G32R32F:
-		case FORMAT_X32B32G32R32F:
 		case FORMAT_A32B32G32R32F:
-		case FORMAT_X32B32G32R32F_UNSIGNED:
-		case FORMAT_A8:
 		case FORMAT_R8:
-		case FORMAT_L8:
-		case FORMAT_A8L8:
-		case FORMAT_D32F_LOCKABLE:
-		case FORMAT_D32FS8_TEXTURE:
-		case FORMAT_D32F_SHADOW:
-		case FORMAT_D32FS8_SHADOW:
-		case FORMAT_L16:
 		case FORMAT_G16R16:
 		case FORMAT_A16B16G16R16:
 		case FORMAT_R16I:
 		case FORMAT_R16UI:
 		case FORMAT_G16R16I:
 		case FORMAT_G16R16UI:
-		case FORMAT_X16B16G16R16I:
-		case FORMAT_X16B16G16R16UI:
 		case FORMAT_A16B16G16R16I:
 		case FORMAT_A16B16G16R16UI:
-		case FORMAT_V16U16:
-		case FORMAT_A16W16V16U16:
-		case FORMAT_Q16W16V16U16:
 			return false;
 		default:
 			ASSERT(false);
@@ -2968,61 +2697,35 @@
 		case FORMAT_R5G6B5:         return component < 3;
 		case FORMAT_R8_SNORM:      return component < 1;
 		case FORMAT_G8R8_SNORM:    return component < 2;
-		case FORMAT_X8B8G8R8_SNORM: return component < 3;
 		case FORMAT_A8B8G8R8_SNORM: return component < 3;
 		case FORMAT_R8I:            return component < 1;
 		case FORMAT_R8UI:           return component < 1;
 		case FORMAT_G8R8I:          return component < 2;
 		case FORMAT_G8R8UI:         return component < 2;
-		case FORMAT_X8B8G8R8I:      return component < 3;
-		case FORMAT_X8B8G8R8UI:     return component < 3;
 		case FORMAT_A8B8G8R8I:      return component < 3;
 		case FORMAT_A8B8G8R8UI:     return component < 3;
 		case FORMAT_R32I:           return component < 1;
 		case FORMAT_R32UI:          return component < 1;
 		case FORMAT_G32R32I:        return component < 2;
 		case FORMAT_G32R32UI:       return component < 2;
-		case FORMAT_X32B32G32R32I:  return component < 3;
-		case FORMAT_X32B32G32R32UI: return component < 3;
 		case FORMAT_A32B32G32R32I:  return component < 3;
 		case FORMAT_A32B32G32R32UI: return component < 3;
 		case FORMAT_G8R8:           return component < 2;
-		case FORMAT_X8R8G8B8:       return component < 3;
-		case FORMAT_X8B8G8R8:       return component < 3;
 		case FORMAT_A8R8G8B8:       return component < 3;
 		case FORMAT_A8B8G8R8:       return component < 3;
-		case FORMAT_SRGB8_X8:       return component < 3;
 		case FORMAT_SRGB8_A8:       return component < 3;
-		case FORMAT_V8U8:           return false;
-		case FORMAT_Q8W8V8U8:       return false;
-		case FORMAT_X8L8V8U8:       return false;
 		case FORMAT_R32F:           return component < 1;
 		case FORMAT_G32R32F:        return component < 2;
-		case FORMAT_X32B32G32R32F:  return component < 3;
 		case FORMAT_A32B32G32R32F:  return component < 3;
-		case FORMAT_X32B32G32R32F_UNSIGNED: return component < 3;
-		case FORMAT_A8:             return false;
 		case FORMAT_R8:             return component < 1;
-		case FORMAT_L8:             return component < 1;
-		case FORMAT_A8L8:           return component < 1;
-		case FORMAT_D32F_LOCKABLE:  return false;
-		case FORMAT_D32FS8_TEXTURE: return false;
-		case FORMAT_D32F_SHADOW:    return false;
-		case FORMAT_D32FS8_SHADOW:  return false;
-		case FORMAT_L16:            return component < 1;
 		case FORMAT_G16R16:         return component < 2;
 		case FORMAT_A16B16G16R16:   return component < 3;
 		case FORMAT_R16I:           return component < 1;
 		case FORMAT_R16UI:          return component < 1;
 		case FORMAT_G16R16I:        return component < 2;
 		case FORMAT_G16R16UI:       return component < 2;
-		case FORMAT_X16B16G16R16I:  return component < 3;
-		case FORMAT_X16B16G16R16UI: return component < 3;
 		case FORMAT_A16B16G16R16I:  return component < 3;
 		case FORMAT_A16B16G16R16UI: return component < 3;
-		case FORMAT_V16U16:         return false;
-		case FORMAT_A16W16V16U16:   return false;
-		case FORMAT_Q16W16V16U16:   return false;
 		case FORMAT_YV12_BT601:     return component < 3;
 		case FORMAT_YV12_BT709:     return component < 3;
 		case FORMAT_YV12_JFIF:      return component < 3;
diff --git a/src/WSI/FrameBuffer.cpp b/src/WSI/FrameBuffer.cpp
index 01838fe..772c0a0 100644
--- a/src/WSI/FrameBuffer.cpp
+++ b/src/WSI/FrameBuffer.cpp
@@ -40,7 +40,7 @@
 
 		this->width = width;
 		this->height = height;
-		format = FORMAT_X8R8G8B8;
+		format = FORMAT_A8R8G8B8;
 		stride = 0;
 
 		windowed = !fullscreen || forceWindowed;
@@ -187,14 +187,12 @@
 
 				switch(state.destFormat)
 				{
-				case FORMAT_X8R8G8B8:
 				case FORMAT_A8R8G8B8:
 					{
 						Int x = x0;
 
 						switch(state.sourceFormat)
 						{
-						case FORMAT_X8R8G8B8:
 						case FORMAT_A8R8G8B8:
 							For(, x < width - 3, x += 4)
 							{
@@ -204,7 +202,6 @@
 								d += 4 * dBytes;
 							}
 							break;
-						case FORMAT_X8B8G8R8:
 						case FORMAT_A8B8G8R8:
 							For(, x < width - 3, x += 4)
 							{
@@ -252,11 +249,9 @@
 						{
 							switch(state.sourceFormat)
 							{
-							case FORMAT_X8R8G8B8:
 							case FORMAT_A8R8G8B8:
 								*Pointer<Int>(d) = *Pointer<Int>(s);
 								break;
-							case FORMAT_X8B8G8R8:
 							case FORMAT_A8B8G8R8:
 								{
 									Int rgba = *Pointer<Int>(s);
@@ -293,16 +288,13 @@
 						}
 					}
 					break;
-				case FORMAT_X8B8G8R8:
 				case FORMAT_A8B8G8R8:
-				case FORMAT_SRGB8_X8:
 				case FORMAT_SRGB8_A8:
 					{
 						Int x = x0;
 
 						switch(state.sourceFormat)
 						{
-						case FORMAT_X8B8G8R8:
 						case FORMAT_A8B8G8R8:
 							For(, x < width - 3, x += 4)
 							{
@@ -312,7 +304,6 @@
 								d += 4 * dBytes;
 							}
 							break;
-						case FORMAT_X8R8G8B8:
 						case FORMAT_A8R8G8B8:
 							For(, x < width - 3, x += 4)
 							{
@@ -361,11 +352,9 @@
 						{
 							switch(state.sourceFormat)
 							{
-							case FORMAT_X8B8G8R8:
 							case FORMAT_A8B8G8R8:
 								*Pointer<Int>(d) = *Pointer<Int>(s);
 								break;
-							case FORMAT_X8R8G8B8:
 							case FORMAT_A8R8G8B8:
 								{
 									Int bgra = *Pointer<Int>(s);
@@ -401,55 +390,12 @@
 						}
 					}
 					break;
-				case FORMAT_R8G8B8:
-					{
-						For(Int x = x0, x < width, x++)
-						{
-							switch(state.sourceFormat)
-							{
-							case FORMAT_X8R8G8B8:
-							case FORMAT_A8R8G8B8:
-								*Pointer<Byte>(d + 0) = *Pointer<Byte>(s + 0);
-								*Pointer<Byte>(d + 1) = *Pointer<Byte>(s + 1);
-								*Pointer<Byte>(d + 2) = *Pointer<Byte>(s + 2);
-								break;
-							case FORMAT_X8B8G8R8:
-							case FORMAT_A8B8G8R8:
-								*Pointer<Byte>(d + 0) = *Pointer<Byte>(s + 2);
-								*Pointer<Byte>(d + 1) = *Pointer<Byte>(s + 1);
-								*Pointer<Byte>(d + 2) = *Pointer<Byte>(s + 0);
-								break;
-							case FORMAT_A16B16G16R16:
-								*Pointer<Byte>(d + 0) = *Pointer<Byte>(s + 5);
-								*Pointer<Byte>(d + 1) = *Pointer<Byte>(s + 3);
-								*Pointer<Byte>(d + 2) = *Pointer<Byte>(s + 1);
-								break;
-							case FORMAT_R5G6B5:
-								{
-									Int rgb = Int(*Pointer<Short>(s));
-
-									*Pointer<Byte>(d + 0) = Byte(((rgb & 0x001F) << 3) | ((rgb & 0x001C) >> 2));
-									*Pointer<Byte>(d + 1) = Byte(((rgb & 0x07E0) << 5) | ((rgb & 0x0600) >> 1));
-									*Pointer<Byte>(d + 2) = Byte(((rgb & 0xF800) << 8) | ((rgb & 0xE000) << 3));
-								}
-								break;
-							default:
-								ASSERT(false);
-								break;
-							}
-
-							s += sBytes;
-							d += dBytes;
-						}
-					}
-					break;
 				case FORMAT_R5G6B5:
 					{
 						For(Int x = x0, x < width, x++)
 						{
 							switch(state.sourceFormat)
 							{
-							case FORMAT_X8R8G8B8:
 							case FORMAT_A8R8G8B8:
 								{
 									Int c = *Pointer<Int>(s);
@@ -459,7 +405,6 @@
 									                           (c & 0x000000F8) >> 3);
 								}
 								break;
-							case FORMAT_X8B8G8R8:
 							case FORMAT_A8B8G8R8:
 								{
 									Int c = *Pointer<Int>(s);
@@ -543,11 +488,9 @@
 
 		switch(state.sourceFormat)
 		{
-		case FORMAT_X8R8G8B8:
 		case FORMAT_A8R8G8B8:
 			c2 = Unpack(*Pointer<Byte4>(s));
 			break;
-		case FORMAT_X8B8G8R8:
 		case FORMAT_A8B8G8R8:
 			c2 = Swizzle(Unpack(*Pointer<Byte4>(s)), 0xC6);
 			break;
@@ -581,13 +524,10 @@
 
 		switch(state.destFormat)
 		{
-		case FORMAT_X8R8G8B8:
 		case FORMAT_A8R8G8B8:
 			*Pointer<Byte4>(d) = Byte4(PackUnsigned(c1, c1));
 			break;
-		case FORMAT_X8B8G8R8:
 		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_X8:
 		case FORMAT_SRGB8_A8:
 			{
 				c1 = Swizzle(c1, 0xC6);
@@ -595,15 +535,6 @@
 				*Pointer<Byte4>(d) = Byte4(PackUnsigned(c1, c1));
 			}
 			break;
-		case FORMAT_R8G8B8:
-			{
-				Int c = Int(As<Int2>(PackUnsigned(c1, c1)));
-
-				*Pointer<Byte>(d + 0) = Byte(c >> 0);
-				*Pointer<Byte>(d + 1) = Byte(c >> 8);
-				*Pointer<Byte>(d + 2) = Byte(c >> 16);
-			}
-			break;
 		case FORMAT_R5G6B5:
 			{
 				Int c = Int(As<Int2>(PackUnsigned(c1, c1)));
diff --git a/src/WSI/FrameBufferDD.cpp b/src/WSI/FrameBufferDD.cpp
index 9625a13..dcf1c9f 100644
--- a/src/WSI/FrameBufferDD.cpp
+++ b/src/WSI/FrameBufferDD.cpp
@@ -106,8 +106,7 @@
 
 			switch(ddsd.ddpfPixelFormat.dwRGBBitCount)
 			{
-			case 32: format = FORMAT_X8R8G8B8; break;
-			case 24: format = FORMAT_R8G8B8;   break;
+			case 32: format = FORMAT_A8R8G8B8; break;
 			case 16: format = FORMAT_R5G6B5;   break;
 			default: format = FORMAT_NULL;     break;
 			}
@@ -202,27 +201,21 @@
 
 		directDraw->SetCooperativeLevel(windowHandle, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
 
-		long result;
+		long result = DD_FALSE;
 
 		do
 		{
-			format = FORMAT_X8R8G8B8;
+			format = FORMAT_A8R8G8B8;
 			result = directDraw->SetDisplayMode(width, height, 32);
 
 			if(result == DDERR_INVALIDMODE)
 			{
-				format = FORMAT_R8G8B8;
-				result = directDraw->SetDisplayMode(width, height, 24);
+				format = FORMAT_R5G6B5;
+				result = directDraw->SetDisplayMode(width, height, 16);
 
 				if(result == DDERR_INVALIDMODE)
 				{
-					format = FORMAT_R5G6B5;
-					result = directDraw->SetDisplayMode(width, height, 16);
-
-					if(result == DDERR_INVALIDMODE)
-					{
-						assert(!"Failed to initialize graphics: Display mode not supported.");
-					}
+					assert(!"Failed to initialize graphics: Display mode not supported.");
 				}
 			}
 
diff --git a/src/WSI/FrameBufferGDI.cpp b/src/WSI/FrameBufferGDI.cpp
index 5c80bd7..e932eb4 100644
--- a/src/WSI/FrameBufferGDI.cpp
+++ b/src/WSI/FrameBufferGDI.cpp
@@ -37,7 +37,7 @@
 
 		init(this->windowHandle);
 
-		format = FORMAT_X8R8G8B8;
+		format = FORMAT_A8R8G8B8;
 	}
 
 	FrameBufferGDI::~FrameBufferGDI()
