Replaced sw::Format with VkFormat

To avoid format conversion issues and simplify the code, sw::Format
was replaced with VkFormat. sw::Format only contained formats with
exact 1:1 correspondence with an equivalent VkFormat, with the
exception of YUV formats, which will require a minor adjustment in
SamplerCore::sampleTexel().

Bug b/119620767

Change-Id: I8124cbc40e1031a5b233156a10e87c35f1334eef
Reviewed-on: https://swiftshader-review.googlesource.com/c/22549
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Device/Blitter.cpp b/src/Device/Blitter.cpp
index a4be043..fdeb10c 100644
--- a/src/Device/Blitter.cpp
+++ b/src/Device/Blitter.cpp
@@ -31,7 +31,7 @@
 		delete blitCache;
 	}
 
-	void Blitter::clear(void *pixel, sw::Format format, Surface *dest, const SliceRect &dRect, unsigned int rgbaMask)
+	void Blitter::clear(void *pixel, VkFormat format, Surface *dest, const SliceRect &dRect, unsigned int rgbaMask)
 	{
 		if(fastClear(pixel, format, dest, dRect, rgbaMask))
 		{
@@ -44,9 +44,9 @@
 		delete color;
 	}
 
-	bool Blitter::fastClear(void *pixel, sw::Format format, Surface *dest, const SliceRect &dRect, unsigned int rgbaMask)
+	bool Blitter::fastClear(void *pixel, VkFormat format, Surface *dest, const SliceRect &dRect, unsigned int rgbaMask)
 	{
-		if(format != FORMAT_A32B32G32R32F)
+		if(format != VK_FORMAT_R32G32B32A32_SFLOAT)
 		{
 			return false;
 		}
@@ -61,20 +61,20 @@
 
 		switch(dest->getFormat())
 		{
-		case FORMAT_R5G6B5:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
 			if((rgbaMask & 0x7) != 0x7) return false;
 			packed = ((uint16_t)(31 * b + 0.5f) << 0) |
 			         ((uint16_t)(63 * g + 0.5f) << 5) |
 			         ((uint16_t)(31 * r + 0.5f) << 11);
 			break;
-		case FORMAT_A8B8G8R8:
+		case VK_FORMAT_R8G8B8A8_UNORM:
 			if((rgbaMask & 0xF) != 0xF) return false;
 			packed = ((uint32_t)(255 * a + 0.5f) << 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_A8R8G8B8:
+		case VK_FORMAT_B8G8R8A8_UNORM:
 			if((rgbaMask & 0xF) != 0xF) return false;
 			packed = ((uint32_t)(255 * a + 0.5f) << 24) |
 			         ((uint32_t)(255 * r + 0.5f) << 16) |
@@ -122,7 +122,7 @@
 
 	void Blitter::blit(Surface *source, const SliceRectF &sourceRect, Surface *dest, const SliceRect &destRect, const Blitter::Options& options)
 	{
-		if(dest->getInternalFormat() == FORMAT_NULL)
+		if(dest->getInternalFormat() == VK_FORMAT_UNDEFINED)
 		{
 			return;
 		}
@@ -211,124 +211,124 @@
 
 		switch(state.sourceFormat)
 		{
-		case FORMAT_R8I:
-		case FORMAT_R8_SNORM:
+		case VK_FORMAT_R8_SINT:
+		case VK_FORMAT_R8_SNORM:
 			c.x = Float(Int(*Pointer<SByte>(element)));
 			c.w = float(0x7F);
 			break;
-		case FORMAT_R8:
-		case FORMAT_R8UI:
+		case VK_FORMAT_R8_UNORM:
+		case VK_FORMAT_R8_UINT:
 			c.x = Float(Int(*Pointer<Byte>(element)));
 			c.w = float(0xFF);
 			break;
-		case FORMAT_R16I:
+		case VK_FORMAT_R16_SINT:
 			c.x = Float(Int(*Pointer<Short>(element)));
 			c.w = float(0x7FFF);
 			break;
-		case FORMAT_R16UI:
+		case VK_FORMAT_R16_UINT:
 			c.x = Float(Int(*Pointer<UShort>(element)));
 			c.w = float(0xFFFF);
 			break;
-		case FORMAT_R32I:
+		case VK_FORMAT_R32_SINT:
 			c.x = Float(*Pointer<Int>(element));
 			c.w = float(0x7FFFFFFF);
 			break;
-		case FORMAT_R32UI:
+		case VK_FORMAT_R32_UINT:
 			c.x = Float(*Pointer<UInt>(element));
 			c.w = float(0xFFFFFFFF);
 			break;
-		case FORMAT_A8R8G8B8:
+		case VK_FORMAT_B8G8R8A8_UNORM:
 			c = Float4(*Pointer<Byte4>(element)).zyxw;
 			break;
-		case FORMAT_A8B8G8R8I:
-		case FORMAT_A8B8G8R8_SNORM:
+		case VK_FORMAT_R8G8B8A8_SINT:
+		case VK_FORMAT_R8G8B8A8_SNORM:
 			c = Float4(*Pointer<SByte4>(element));
 			break;
-		case FORMAT_A8B8G8R8:
-		case FORMAT_A8B8G8R8UI:
-		case FORMAT_SRGB8_A8:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_UINT:
+		case VK_FORMAT_R8G8B8A8_SRGB:
 			c = Float4(*Pointer<Byte4>(element));
 			break;
-		case FORMAT_A16B16G16R16I:
+		case VK_FORMAT_R16G16B16A16_SINT:
 			c = Float4(*Pointer<Short4>(element));
 			break;
-		case FORMAT_A16B16G16R16:
-		case FORMAT_A16B16G16R16UI:
+		case VK_FORMAT_R16G16B16A16_UNORM:
+		case VK_FORMAT_R16G16B16A16_UINT:
 			c = Float4(*Pointer<UShort4>(element));
 			break;
-		case FORMAT_A32B32G32R32I:
+		case VK_FORMAT_R32G32B32A32_SINT:
 			c = Float4(*Pointer<Int4>(element));
 			break;
-		case FORMAT_A32B32G32R32UI:
+		case VK_FORMAT_R32G32B32A32_UINT:
 			c = Float4(*Pointer<UInt4>(element));
 			break;
-		case FORMAT_G8R8I:
-		case FORMAT_G8R8_SNORM:
+		case VK_FORMAT_R8G8_SINT:
+		case VK_FORMAT_R8G8_SNORM:
 			c.x = Float(Int(*Pointer<SByte>(element + 0)));
 			c.y = Float(Int(*Pointer<SByte>(element + 1)));
 			c.w = float(0x7F);
 			break;
-		case FORMAT_G8R8:
-		case FORMAT_G8R8UI:
+		case VK_FORMAT_R8G8_UNORM:
+		case VK_FORMAT_R8G8_UINT:
 			c.x = Float(Int(*Pointer<Byte>(element + 0)));
 			c.y = Float(Int(*Pointer<Byte>(element + 1)));
 			c.w = float(0xFF);
 			break;
-		case FORMAT_G16R16I:
+		case VK_FORMAT_R16G16_SINT:
 			c.x = Float(Int(*Pointer<Short>(element + 0)));
 			c.y = Float(Int(*Pointer<Short>(element + 2)));
 			c.w = float(0x7FFF);
 			break;
-		case FORMAT_G16R16:
-		case FORMAT_G16R16UI:
+		case VK_FORMAT_R16G16_UNORM:
+		case VK_FORMAT_R16G16_UINT:
 			c.x = Float(Int(*Pointer<UShort>(element + 0)));
 			c.y = Float(Int(*Pointer<UShort>(element + 2)));
 			c.w = float(0xFFFF);
 			break;
-		case FORMAT_G32R32I:
+		case VK_FORMAT_R32G32_SINT:
 			c.x = Float(*Pointer<Int>(element + 0));
 			c.y = Float(*Pointer<Int>(element + 4));
 			c.w = float(0x7FFFFFFF);
 			break;
-		case FORMAT_G32R32UI:
+		case VK_FORMAT_R32G32_UINT:
 			c.x = Float(*Pointer<UInt>(element + 0));
 			c.y = Float(*Pointer<UInt>(element + 4));
 			c.w = float(0xFFFFFFFF);
 			break;
-		case FORMAT_A32B32G32R32F:
+		case VK_FORMAT_R32G32B32A32_SFLOAT:
 			c = *Pointer<Float4>(element);
 			break;
-		case FORMAT_G32R32F:
+		case VK_FORMAT_R32G32_SFLOAT:
 			c.x = *Pointer<Float>(element + 0);
 			c.y = *Pointer<Float>(element + 4);
 			break;
-		case FORMAT_R32F:
+		case VK_FORMAT_R32_SFLOAT:
 			c.x = *Pointer<Float>(element);
 			break;
-		case FORMAT_R5G6B5:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
 			c.x = Float(Int((*Pointer<UShort>(element) & UShort(0xF800)) >> UShort(11)));
 			c.y = Float(Int((*Pointer<UShort>(element) & UShort(0x07E0)) >> UShort(5)));
 			c.z = Float(Int(*Pointer<UShort>(element) & UShort(0x001F)));
 			break;
-		case FORMAT_A2B10G10R10:
-		case FORMAT_A2B10G10R10UI:
+		case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
+		case VK_FORMAT_A2B10G10R10_UINT_PACK32:
 			c.x = Float(Int((*Pointer<UInt>(element) & UInt(0x000003FF))));
 			c.y = Float(Int((*Pointer<UInt>(element) & UInt(0x000FFC00)) >> 10));
 			c.z = Float(Int((*Pointer<UInt>(element) & UInt(0x3FF00000)) >> 20));
 			c.w = Float(Int((*Pointer<UInt>(element) & UInt(0xC0000000)) >> 30));
 			break;
-		case FORMAT_D16:
+		case VK_FORMAT_D16_UNORM:
 			c.x = Float(Int((*Pointer<UShort>(element))));
 			break;
-		case FORMAT_D24S8:
-		case FORMAT_D24X8:
+		case VK_FORMAT_D24_UNORM_S8_UINT:
+		case VK_FORMAT_X8_D24_UNORM_PACK32:
 			c.x = Float(Int((*Pointer<UInt>(element) & UInt(0xFFFFFF00)) >> 8));
 			break;
-		case FORMAT_D32F:
-		case FORMAT_D32FS8:
+		case VK_FORMAT_D32_SFLOAT:
+		case VK_FORMAT_D32_SFLOAT_S8_UINT:
 			c.x = *Pointer<Float>(element);
 			break;
-		case FORMAT_S8:
+		case VK_FORMAT_S8_UINT:
 			c.x = Float(Int(*Pointer<Byte>(element)));
 			break;
 		default:
@@ -348,7 +348,7 @@
 
 		switch(state.destFormat)
 		{
-		case FORMAT_A8R8G8B8:
+		case VK_FORMAT_B8G8R8A8_UNORM:
 			if(writeRGBA)
 			{
 				Short4 c0 = RoundShort4(c.zyxw);
@@ -362,8 +362,8 @@
 				if(writeA) { *Pointer<Byte>(element + 3) = Byte(RoundInt(Float(c.w))); }
 			}
 			break;
-		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
 			if(writeRGBA)
 			{
 				Short4 c0 = RoundShort4(c);
@@ -377,7 +377,7 @@
 				if(writeA) { *Pointer<Byte>(element + 3) = Byte(RoundInt(Float(c.w))); }
 			}
 			break;
-		case FORMAT_A32B32G32R32F:
+		case VK_FORMAT_R32G32B32A32_SFLOAT:
 			if(writeRGBA)
 			{
 				*Pointer<Float4>(element) = c;
@@ -390,7 +390,7 @@
 				if(writeA) { *Pointer<Float>(element + 12) = c.w; }
 			}
 			break;
-		case FORMAT_G32R32F:
+		case VK_FORMAT_R32G32_SFLOAT:
 			if(writeR && writeG)
 			{
 				*Pointer<Float2>(element) = Float2(c);
@@ -401,31 +401,31 @@
 				if(writeG) { *Pointer<Float>(element + 4) = c.y; }
 			}
 			break;
-		case FORMAT_R32F:
+		case VK_FORMAT_R32_SFLOAT:
 			if(writeR) { *Pointer<Float>(element) = c.x; }
 			break;
-		case FORMAT_A8B8G8R8I:
-		case FORMAT_A8B8G8R8_SNORM:
+		case VK_FORMAT_R8G8B8A8_SINT:
+		case VK_FORMAT_R8G8B8A8_SNORM:
 			if(writeA) { *Pointer<SByte>(element + 3) = SByte(RoundInt(Float(c.w))); }
 			if(writeB) { *Pointer<SByte>(element + 2) = SByte(RoundInt(Float(c.z))); }
-		case FORMAT_G8R8I:
-		case FORMAT_G8R8_SNORM:
+		case VK_FORMAT_R8G8_SINT:
+		case VK_FORMAT_R8G8_SNORM:
 			if(writeG) { *Pointer<SByte>(element + 1) = SByte(RoundInt(Float(c.y))); }
-		case FORMAT_R8I:
-		case FORMAT_R8_SNORM:
+		case VK_FORMAT_R8_SINT:
+		case VK_FORMAT_R8_SNORM:
 			if(writeR) { *Pointer<SByte>(element) = SByte(RoundInt(Float(c.x))); }
 			break;
-		case FORMAT_A8B8G8R8UI:
+		case VK_FORMAT_R8G8B8A8_UINT:
 			if(writeA) { *Pointer<Byte>(element + 3) = Byte(RoundInt(Float(c.w))); }
 			if(writeB) { *Pointer<Byte>(element + 2) = Byte(RoundInt(Float(c.z))); }
-		case FORMAT_G8R8UI:
-		case FORMAT_G8R8:
+		case VK_FORMAT_R8G8_UINT:
+		case VK_FORMAT_R8G8_UNORM:
 			if(writeG) { *Pointer<Byte>(element + 1) = Byte(RoundInt(Float(c.y))); }
-		case FORMAT_R8UI:
-		case FORMAT_R8:
+		case VK_FORMAT_R8_UINT:
+		case VK_FORMAT_R8_UNORM:
 			if(writeR) { *Pointer<Byte>(element) = Byte(RoundInt(Float(c.x))); }
 			break;
-		case FORMAT_A16B16G16R16I:
+		case VK_FORMAT_R16G16B16A16_SINT:
 			if(writeRGBA)
 			{
 				*Pointer<Short4>(element) = Short4(RoundInt(c));
@@ -438,7 +438,7 @@
 				if(writeA) { *Pointer<Short>(element + 6) = Short(RoundInt(Float(c.w))); }
 			}
 			break;
-		case FORMAT_G16R16I:
+		case VK_FORMAT_R16G16_SINT:
 			if(writeR && writeG)
 			{
 				*Pointer<Short2>(element) = Short2(Short4(RoundInt(c)));
@@ -449,11 +449,11 @@
 				if(writeG) { *Pointer<Short>(element + 2) = Short(RoundInt(Float(c.y))); }
 			}
 			break;
-		case FORMAT_R16I:
+		case VK_FORMAT_R16_SINT:
 			if(writeR) { *Pointer<Short>(element) = Short(RoundInt(Float(c.x))); }
 			break;
-		case FORMAT_A16B16G16R16UI:
-		case FORMAT_A16B16G16R16:
+		case VK_FORMAT_R16G16B16A16_UINT:
+		case VK_FORMAT_R16G16B16A16_UNORM:
 			if(writeRGBA)
 			{
 				*Pointer<UShort4>(element) = UShort4(RoundInt(c));
@@ -466,8 +466,8 @@
 				if(writeA) { *Pointer<UShort>(element + 6) = UShort(RoundInt(Float(c.w))); }
 			}
 			break;
-		case FORMAT_G16R16UI:
-		case FORMAT_G16R16:
+		case VK_FORMAT_R16G16_UINT:
+		case VK_FORMAT_R16G16_UNORM:
 			if(writeR && writeG)
 			{
 				*Pointer<UShort2>(element) = UShort2(UShort4(RoundInt(c)));
@@ -478,10 +478,10 @@
 				if(writeG) { *Pointer<UShort>(element + 2) = UShort(RoundInt(Float(c.y))); }
 			}
 			break;
-		case FORMAT_R16UI:
+		case VK_FORMAT_R16_UINT:
 			if(writeR) { *Pointer<UShort>(element) = UShort(RoundInt(Float(c.x))); }
 			break;
-		case FORMAT_A32B32G32R32I:
+		case VK_FORMAT_R32G32B32A32_SINT:
 			if(writeRGBA)
 			{
 				*Pointer<Int4>(element) = RoundInt(c);
@@ -494,12 +494,12 @@
 				if(writeA) { *Pointer<Int>(element + 12) = RoundInt(Float(c.w)); }
 			}
 			break;
-		case FORMAT_G32R32I:
+		case VK_FORMAT_R32G32_SINT:
 			if(writeG) { *Pointer<Int>(element + 4) = RoundInt(Float(c.y)); }
-		case FORMAT_R32I:
+		case VK_FORMAT_R32_SINT:
 			if(writeR) { *Pointer<Int>(element) = RoundInt(Float(c.x)); }
 			break;
-		case FORMAT_A32B32G32R32UI:
+		case VK_FORMAT_R32G32B32A32_UINT:
 			if(writeRGBA)
 			{
 				*Pointer<UInt4>(element) = UInt4(RoundInt(c));
@@ -512,12 +512,12 @@
 				if(writeA) { *Pointer<UInt>(element + 12) = As<UInt>(RoundInt(Float(c.w))); }
 			}
 			break;
-		case FORMAT_G32R32UI:
+		case VK_FORMAT_R32G32_UINT:
 			if(writeG) { *Pointer<UInt>(element + 4) = As<UInt>(RoundInt(Float(c.y))); }
-		case FORMAT_R32UI:
+		case VK_FORMAT_R32_UINT:
 			if(writeR) { *Pointer<UInt>(element) = As<UInt>(RoundInt(Float(c.x))); }
 			break;
-		case FORMAT_R5G6B5:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
 			if(writeR && writeG && writeB)
 			{
 				*Pointer<UShort>(element) = UShort(RoundInt(Float(c.z)) |
@@ -534,8 +534,8 @@
 				                                   (RoundInt(Float(c.x)) << Int(11))) & UShort(mask));
 			}
 			break;
-		case FORMAT_A2B10G10R10:
-		case FORMAT_A2B10G10R10UI:
+		case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
+		case VK_FORMAT_A2B10G10R10_UINT_PACK32:
 			if(writeRGBA)
 			{
 				*Pointer<UInt>(element) = UInt(RoundInt(Float(c.x)) |
@@ -557,18 +557,18 @@
 				                                  (RoundInt(Float(c.w)) << 30)) & UInt(mask));
 			}
 			break;
-		case FORMAT_D16:
+		case VK_FORMAT_D16_UNORM:
 			*Pointer<UShort>(element) = UShort(RoundInt(Float(c.x)));
 			break;
-		case FORMAT_D24S8:
-		case FORMAT_D24X8:
+		case VK_FORMAT_D24_UNORM_S8_UINT:
+		case VK_FORMAT_X8_D24_UNORM_PACK32:
 			*Pointer<UInt>(element) = UInt(RoundInt(Float(c.x)) << 8);
 			break;
-		case FORMAT_D32F:
-		case FORMAT_D32FS8:
+		case VK_FORMAT_D32_SFLOAT:
+		case VK_FORMAT_D32_SFLOAT_S8_UINT:
 			*Pointer<Float>(element) = c.x;
 			break;
-		case FORMAT_S8:
+		case VK_FORMAT_S8_UINT:
 			*Pointer<Byte>(element) = Byte(RoundInt(Float(c.x)));
 			break;
 		default:
@@ -583,43 +583,43 @@
 
 		switch(state.sourceFormat)
 		{
-		case FORMAT_A8B8G8R8I:
+		case VK_FORMAT_R8G8B8A8_SINT:
 			c = Insert(c, Int(*Pointer<SByte>(element + 3)), 3);
-		case FORMAT_G8R8I:
+		case VK_FORMAT_R8G8_SINT:
 			c = Insert(c, Int(*Pointer<SByte>(element + 1)), 1);
-		case FORMAT_R8I:
+		case VK_FORMAT_R8_SINT:
 			c = Insert(c, Int(*Pointer<SByte>(element)), 0);
 			break;
-		case FORMAT_A8B8G8R8UI:
+		case VK_FORMAT_R8G8B8A8_UINT:
 			c = Insert(c, Int(*Pointer<Byte>(element + 3)), 3);
-		case FORMAT_G8R8UI:
+		case VK_FORMAT_R8G8_UINT:
 			c = Insert(c, Int(*Pointer<Byte>(element + 1)), 1);
-		case FORMAT_R8UI:
+		case VK_FORMAT_R8_UINT:
 			c = Insert(c, Int(*Pointer<Byte>(element)), 0);
 			break;
-		case FORMAT_A16B16G16R16I:
+		case VK_FORMAT_R16G16B16A16_SINT:
 			c = Insert(c, Int(*Pointer<Short>(element + 6)), 3);
-		case FORMAT_G16R16I:
+		case VK_FORMAT_R16G16_SINT:
 			c = Insert(c, Int(*Pointer<Short>(element + 2)), 1);
-		case FORMAT_R16I:
+		case VK_FORMAT_R16_SINT:
 			c = Insert(c, Int(*Pointer<Short>(element)), 0);
 			break;
-		case FORMAT_A16B16G16R16UI:
+		case VK_FORMAT_R16G16B16A16_UINT:
 			c = Insert(c, Int(*Pointer<UShort>(element + 6)), 3);
-		case FORMAT_G16R16UI:
+		case VK_FORMAT_R16G16_UINT:
 			c = Insert(c, Int(*Pointer<UShort>(element + 2)), 1);
-		case FORMAT_R16UI:
+		case VK_FORMAT_R16_UINT:
 			c = Insert(c, Int(*Pointer<UShort>(element)), 0);
 			break;
-		case FORMAT_A32B32G32R32I:
-		case FORMAT_A32B32G32R32UI:
+		case VK_FORMAT_R32G32B32A32_SINT:
+		case VK_FORMAT_R32G32B32A32_UINT:
 			c = *Pointer<Int4>(element);
 			break;
-		case FORMAT_G32R32I:
-		case FORMAT_G32R32UI:
+		case VK_FORMAT_R32G32_SINT:
+		case VK_FORMAT_R32G32_UINT:
 			c = Insert(c, *Pointer<Int>(element + 4), 1);
-		case FORMAT_R32I:
-		case FORMAT_R32UI:
+		case VK_FORMAT_R32_SINT:
+		case VK_FORMAT_R32_UINT:
 			c = Insert(c, *Pointer<Int>(element), 0);
 			break;
 		default:
@@ -639,39 +639,39 @@
 
 		switch(state.destFormat)
 		{
-		case FORMAT_A8B8G8R8I:
+		case VK_FORMAT_R8G8B8A8_SINT:
 			if(writeA) { *Pointer<SByte>(element + 3) = SByte(Extract(c, 3)); }
 			if(writeB) { *Pointer<SByte>(element + 2) = SByte(Extract(c, 2)); }
-		case FORMAT_G8R8I:
+		case VK_FORMAT_R8G8_SINT:
 			if(writeG) { *Pointer<SByte>(element + 1) = SByte(Extract(c, 1)); }
-		case FORMAT_R8I:
+		case VK_FORMAT_R8_SINT:
 			if(writeR) { *Pointer<SByte>(element) = SByte(Extract(c, 0)); }
 			break;
-		case FORMAT_A8B8G8R8UI:
+		case VK_FORMAT_R8G8B8A8_UINT:
 			if(writeA) { *Pointer<Byte>(element + 3) = Byte(Extract(c, 3)); }
 			if(writeB) { *Pointer<Byte>(element + 2) = Byte(Extract(c, 2)); }
-		case FORMAT_G8R8UI:
+		case VK_FORMAT_R8G8_UINT:
 			if(writeG) { *Pointer<Byte>(element + 1) = Byte(Extract(c, 1)); }
-		case FORMAT_R8UI:
+		case VK_FORMAT_R8_UINT:
 			if(writeR) { *Pointer<Byte>(element) = Byte(Extract(c, 0)); }
 			break;
-		case FORMAT_A16B16G16R16I:
+		case VK_FORMAT_R16G16B16A16_SINT:
 			if(writeA) { *Pointer<Short>(element + 6) = Short(Extract(c, 3)); }
 			if(writeB) { *Pointer<Short>(element + 4) = Short(Extract(c, 2)); }
-		case FORMAT_G16R16I:
+		case VK_FORMAT_R16G16_SINT:
 			if(writeG) { *Pointer<Short>(element + 2) = Short(Extract(c, 1)); }
-		case FORMAT_R16I:
+		case VK_FORMAT_R16_SINT:
 			if(writeR) { *Pointer<Short>(element) = Short(Extract(c, 0)); }
 			break;
-		case FORMAT_A16B16G16R16UI:
+		case VK_FORMAT_R16G16B16A16_UINT:
 			if(writeA) { *Pointer<UShort>(element + 6) = UShort(Extract(c, 3)); }
 			if(writeB) { *Pointer<UShort>(element + 4) = UShort(Extract(c, 2)); }
-		case FORMAT_G16R16UI:
+		case VK_FORMAT_R16G16_UINT:
 			if(writeG) { *Pointer<UShort>(element + 2) = UShort(Extract(c, 1)); }
-		case FORMAT_R16UI:
+		case VK_FORMAT_R16_UINT:
 			if(writeR) { *Pointer<UShort>(element) = UShort(Extract(c, 0)); }
 			break;
-		case FORMAT_A32B32G32R32I:
+		case VK_FORMAT_R32G32B32A32_SINT:
 			if(writeRGBA)
 			{
 				*Pointer<Int4>(element) = c;
@@ -684,14 +684,14 @@
 				if(writeA) { *Pointer<Int>(element + 12) = Extract(c, 3); }
 			}
 			break;
-		case FORMAT_G32R32I:
+		case VK_FORMAT_R32G32_SINT:
 			if(writeR) { *Pointer<Int>(element) = Extract(c, 0); }
 			if(writeG) { *Pointer<Int>(element + 4) = Extract(c, 1); }
 			break;
-		case FORMAT_R32I:
+		case VK_FORMAT_R32_SINT:
 			if(writeR) { *Pointer<Int>(element) = Extract(c, 0); }
 			break;
-		case FORMAT_A32B32G32R32UI:
+		case VK_FORMAT_R32G32B32A32_UINT:
 			if(writeRGBA)
 			{
 				*Pointer<UInt4>(element) = As<UInt4>(c);
@@ -704,11 +704,11 @@
 				if(writeA) { *Pointer<UInt>(element + 12) = As<UInt>(Extract(c, 3)); }
 			}
 			break;
-		case FORMAT_G32R32UI:
+		case VK_FORMAT_R32G32_UINT:
 			if(writeR) { *Pointer<UInt>(element) = As<UInt>(Extract(c, 0)); }
 			if(writeG) { *Pointer<UInt>(element + 4) = As<UInt>(Extract(c, 1)); }
 			break;
-		case FORMAT_R32UI:
+		case VK_FORMAT_R32_UINT:
 			if(writeR) { *Pointer<UInt>(element) = As<UInt>(Extract(c, 0)); }
 			break;
 		default:
@@ -718,66 +718,66 @@
 		return true;
 	}
 
-	bool Blitter::GetScale(float4 &scale, Format format)
+	bool Blitter::GetScale(float4 &scale, VkFormat format)
 	{
 		switch(format)
 		{
-		case FORMAT_A8R8G8B8:
-		case FORMAT_R8:
-		case FORMAT_G8R8:
-		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
+		case VK_FORMAT_B8G8R8A8_UNORM:
+		case VK_FORMAT_R8_UNORM:
+		case VK_FORMAT_R8G8_UNORM:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
 			scale = vector(0xFF, 0xFF, 0xFF, 0xFF);
 			break;
-		case FORMAT_R8_SNORM:
-		case FORMAT_G8R8_SNORM:
-		case FORMAT_A8B8G8R8_SNORM:
+		case VK_FORMAT_R8_SNORM:
+		case VK_FORMAT_R8G8_SNORM:
+		case VK_FORMAT_R8G8B8A8_SNORM:
 			scale = vector(0x7F, 0x7F, 0x7F, 0x7F);
 			break;
-		case FORMAT_A16B16G16R16:
+		case VK_FORMAT_R16G16B16A16_UNORM:
 			scale = vector(0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF);
 			break;
-		case FORMAT_R8I:
-		case FORMAT_R8UI:
-		case FORMAT_G8R8I:
-		case FORMAT_G8R8UI:
-		case FORMAT_A8B8G8R8I:
-		case FORMAT_A8B8G8R8UI:
-		case FORMAT_R16I:
-		case FORMAT_R16UI:
-		case FORMAT_G16R16:
-		case FORMAT_G16R16I:
-		case FORMAT_G16R16UI:
-		case FORMAT_A16B16G16R16I:
-		case FORMAT_A16B16G16R16UI:
-		case FORMAT_R32I:
-		case FORMAT_R32UI:
-		case FORMAT_G32R32I:
-		case FORMAT_G32R32UI:
-		case FORMAT_A32B32G32R32I:
-		case FORMAT_A32B32G32R32UI:
-		case FORMAT_A32B32G32R32F:
-		case FORMAT_G32R32F:
-		case FORMAT_R32F:
-		case FORMAT_A2B10G10R10UI:
+		case VK_FORMAT_R8_SINT:
+		case VK_FORMAT_R8_UINT:
+		case VK_FORMAT_R8G8_SINT:
+		case VK_FORMAT_R8G8_UINT:
+		case VK_FORMAT_R8G8B8A8_SINT:
+		case VK_FORMAT_R8G8B8A8_UINT:
+		case VK_FORMAT_R16_SINT:
+		case VK_FORMAT_R16_UINT:
+		case VK_FORMAT_R16G16_UNORM:
+		case VK_FORMAT_R16G16_SINT:
+		case VK_FORMAT_R16G16_UINT:
+		case VK_FORMAT_R16G16B16A16_SINT:
+		case VK_FORMAT_R16G16B16A16_UINT:
+		case VK_FORMAT_R32_SINT:
+		case VK_FORMAT_R32_UINT:
+		case VK_FORMAT_R32G32_SINT:
+		case VK_FORMAT_R32G32_UINT:
+		case VK_FORMAT_R32G32B32A32_SINT:
+		case VK_FORMAT_R32G32B32A32_UINT:
+		case VK_FORMAT_R32G32B32A32_SFLOAT:
+		case VK_FORMAT_R32G32_SFLOAT:
+		case VK_FORMAT_R32_SFLOAT:
+		case VK_FORMAT_A2B10G10R10_UINT_PACK32:
 			scale = vector(1.0f, 1.0f, 1.0f, 1.0f);
 			break;
-		case FORMAT_R5G6B5:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
 			scale = vector(0x1F, 0x3F, 0x1F, 1.0f);
 			break;
-		case FORMAT_A2B10G10R10:
+		case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
 			scale = vector(0x3FF, 0x3FF, 0x3FF, 0x03);
 			break;
-		case FORMAT_D16:
+		case VK_FORMAT_D16_UNORM:
 			scale = vector(0xFFFF, 0.0f, 0.0f, 0.0f);
 			break;
-		case FORMAT_D24S8:
-		case FORMAT_D24X8:
+		case VK_FORMAT_D24_UNORM_S8_UINT:
+		case VK_FORMAT_X8_D24_UNORM_PACK32:
 			scale = vector(0xFFFFFF, 0.0f, 0.0f, 0.0f);
 			break;
-		case FORMAT_D32F:
-		case FORMAT_D32FS8:
-		case FORMAT_S8:
+		case VK_FORMAT_D32_SFLOAT:
+		case VK_FORMAT_D32_SFLOAT_S8_UINT:
+		case VK_FORMAT_S8_UINT:
 			scale = vector(1.0f, 1.0f, 1.0f, 1.0f);
 			break;
 		default:
@@ -798,10 +798,10 @@
 			// then the whole range of the int or uint color must be scaled between 0 and 1.
 			switch(state.sourceFormat)
 			{
-			case FORMAT_A32B32G32R32I:
+			case VK_FORMAT_R32G32B32A32_SINT:
 				unscale = replicate(static_cast<float>(0x7FFFFFFF));
 				break;
-			case FORMAT_A32B32G32R32UI:
+			case VK_FORMAT_R32G32B32A32_UINT:
 				unscale = replicate(static_cast<float>(0xFFFFFFFF));
 				break;
 			default:
diff --git a/src/Device/Blitter.hpp b/src/Device/Blitter.hpp
index e3db745..637a5f8 100644
--- a/src/Device/Blitter.hpp
+++ b/src/Device/Blitter.hpp
@@ -63,8 +63,8 @@
 				return memcmp(this, &state, sizeof(State)) == 0;
 			}
 
-			Format sourceFormat;
-			Format destFormat;
+			VkFormat sourceFormat;
+			VkFormat destFormat;
 			int destSamples;
 		};
 
@@ -94,18 +94,18 @@
 		Blitter();
 		virtual ~Blitter();
 
-		void clear(void *pixel, sw::Format format, Surface *dest, const SliceRect &dRect, unsigned int rgbaMask);
+		void clear(void *pixel, VkFormat format, Surface *dest, const SliceRect &dRect, unsigned int rgbaMask);
 		void blit(Surface *source, const SliceRectF &sRect, Surface *dest, const SliceRect &dRect, const Options &options);
 		void blit3D(Surface *source, Surface *dest);
 
 	private:
-		bool fastClear(void *pixel, sw::Format format, Surface *dest, const SliceRect &dRect, unsigned int rgbaMask);
+		bool fastClear(void *pixel, VkFormat format, Surface *dest, const SliceRect &dRect, unsigned int rgbaMask);
 
 		bool read(Float4 &color, Pointer<Byte> element, const State &state);
 		bool write(Float4 &color, Pointer<Byte> element, const State &state);
 		bool read(Int4 &color, Pointer<Byte> element, const State &state);
 		bool write(Int4 &color, Pointer<Byte> element, const State &state);
-		static bool GetScale(float4& scale, Format format);
+		static bool GetScale(float4& scale, VkFormat format);
 		static bool ApplyScaleAndClamp(Float4 &value, const State &state, bool preScaled = false);
 		static Int ComputeOffset(Int &x, Int &y, Int &pitchB, int bytes, bool quadLayout);
 		static Float4 LinearToSRGB(Float4 &color);
diff --git a/src/Device/Context.cpp b/src/Device/Context.cpp
index d9bad6b..d955c79 100644
--- a/src/Device/Context.cpp
+++ b/src/Device/Context.cpp
@@ -740,7 +740,7 @@
 		return renderTarget[0] ? renderTarget[0]->getMultiSampleCount() : 1;
 	}
 
-	Format Context::renderTargetInternalFormat(int index)
+	VkFormat Context::renderTargetInternalFormat(int index)
 	{
 		if(renderTarget[index])
 		{
@@ -748,7 +748,7 @@
 		}
 		else
 		{
-			return FORMAT_NULL;
+			return VK_FORMAT_UNDEFINED;
 		}
 	}
 
@@ -759,7 +759,7 @@
 
 	int Context::colorWriteActive(int index)
 	{
-		if(!renderTarget[index] || renderTarget[index]->getInternalFormat() == FORMAT_NULL)
+		if(!renderTarget[index] || renderTarget[index]->getInternalFormat() == VK_FORMAT_UNDEFINED)
 		{
 			return 0;
 		}
diff --git a/src/Device/Context.hpp b/src/Device/Context.hpp
index 64bd0d5..4d826b4 100644
--- a/src/Device/Context.hpp
+++ b/src/Device/Context.hpp
@@ -305,7 +305,7 @@
 
 		Sampler sampler[TOTAL_IMAGE_UNITS];
 
-		Format renderTargetInternalFormat(int index);
+		VkFormat renderTargetInternalFormat(int index);
 		int colorWriteActive();
 		int colorWriteActive(int index);
 		bool colorUsed();
diff --git a/src/Device/PixelProcessor.hpp b/src/Device/PixelProcessor.hpp
index d8645b8..6a2c4db 100644
--- a/src/Device/PixelProcessor.hpp
+++ b/src/Device/PixelProcessor.hpp
@@ -73,7 +73,7 @@
 			BlendOperation blendOperationAlpha        : BITS(BLENDOP_LAST);
 
 			unsigned int colorWriteMask                       : RENDERTARGETS * 4;   // Four component bit masks
-			Format targetFormat[RENDERTARGETS];
+			VkFormat targetFormat[RENDERTARGETS];
 			bool writeSRGB                                    : 1;
 			unsigned int multiSample                          : 3;
 			unsigned int multiSampleMask                      : 4;
diff --git a/src/Device/Renderer.cpp b/src/Device/Renderer.cpp
index 6df648e..1963caf 100644
--- a/src/Device/Renderer.cpp
+++ b/src/Device/Renderer.cpp
@@ -598,7 +598,7 @@
 		}
 	}
 
-	void Renderer::clear(void *value, Format format, Surface *dest, const Rect &clearRect, unsigned int rgbaMask)
+	void Renderer::clear(void *value, VkFormat format, Surface *dest, const Rect &clearRect, unsigned int rgbaMask)
 	{
 		blitter->clear(value, format, dest, clearRect, rgbaMask);
 	}
diff --git a/src/Device/Renderer.hpp b/src/Device/Renderer.hpp
index 539a48d..232a9be 100644
--- a/src/Device/Renderer.hpp
+++ b/src/Device/Renderer.hpp
@@ -262,7 +262,7 @@
 
 		void draw(DrawType drawType, unsigned int indexOffset, unsigned int count, bool update = true);
 
-		void clear(void *value, Format format, Surface *dest, const Rect &rect, unsigned int rgbaMask);
+		void clear(void *value, VkFormat format, Surface *dest, const Rect &rect, unsigned int rgbaMask);
 		void blit(Surface *source, const SliceRectF &sRect, Surface *dest, const SliceRect &dRect, bool filter, bool isStencil = false, bool sRGBconversion = true);
 		void blit3D(Surface *source, Surface *dest);
 
diff --git a/src/Device/Sampler.cpp b/src/Device/Sampler.cpp
index 2fc1bb1..69f1916 100644
--- a/src/Device/Sampler.cpp
+++ b/src/Device/Sampler.cpp
@@ -49,8 +49,8 @@
 			}
 		}
 
-		externalTextureFormat = FORMAT_NULL;
-		internalTextureFormat = FORMAT_NULL;
+		externalTextureFormat = VK_FORMAT_UNDEFINED;
+		internalTextureFormat = VK_FORMAT_UNDEFINED;
 		textureType = TEXTURE_NULL;
 
 		textureFilter = FILTER_LINEAR;
@@ -222,9 +222,7 @@
 				mipmap.sliceP[2] = sliceP;
 				mipmap.sliceP[3] = sliceP;
 
-				if(internalTextureFormat == FORMAT_YV12_BT601 ||
-				   internalTextureFormat == FORMAT_YV12_BT709 ||
-				   internalTextureFormat == FORMAT_YV12_JFIF)
+				if(internalTextureFormat == VK_FORMAT_G8_B8R8_2PLANE_420_UNORM)
 				{
 					unsigned int YStride = pitchP;
 					unsigned int YSize = YStride * height;
diff --git a/src/Device/Sampler.hpp b/src/Device/Sampler.hpp
index 81b308d..4fa5390 100644
--- a/src/Device/Sampler.hpp
+++ b/src/Device/Sampler.hpp
@@ -147,7 +147,7 @@
 			State();
 
 			TextureType textureType        : BITS(TEXTURE_LAST);
-			Format textureFormat           : BITS(FORMAT_LAST);
+			VkFormat textureFormat         : BITS(VK_FORMAT_END_RANGE);
 			FilterType textureFilter       : BITS(FILTER_LAST);
 			AddressingMode addressingModeU : BITS(ADDRESSING_LAST);
 			AddressingMode addressingModeV : BITS(ADDRESSING_LAST);
@@ -214,8 +214,8 @@
 		AddressingMode getAddressingModeW() const;
 		CompareFunc getCompareFunc() const;
 
-		Format externalTextureFormat;
-		Format internalTextureFormat;
+		VkFormat externalTextureFormat;
+		VkFormat internalTextureFormat;
 		TextureType textureType;
 
 		FilterType textureFilter;
diff --git a/src/Device/Surface.cpp b/src/Device/Surface.cpp
index ea3f488..b4bb17a 100644
--- a/src/Device/Surface.cpp
+++ b/src/Device/Surface.cpp
@@ -84,156 +84,156 @@
 
 		switch(format)
 		{
-		case FORMAT_R8_SNORM:
+		case VK_FORMAT_R8_SNORM:
 			*(char*)element = snorm<8>(r);
 			break;
-		case FORMAT_R8:
+		case VK_FORMAT_R8_UNORM:
 			*(unsigned char*)element = unorm<8>(r);
 			break;
-		case FORMAT_R8I:
+		case VK_FORMAT_R8_SINT:
 			*(char*)element = scast<8>(r);
 			break;
-		case FORMAT_R8UI:
+		case VK_FORMAT_R8_UINT:
 			*(unsigned char*)element = ucast<8>(r);
 			break;
-		case FORMAT_R16I:
+		case VK_FORMAT_R16_SINT:
 			*(short*)element = scast<16>(r);
 			break;
-		case FORMAT_R16UI:
+		case VK_FORMAT_R16_UINT:
 			*(unsigned short*)element = ucast<16>(r);
 			break;
-		case FORMAT_R32I:
+		case VK_FORMAT_R32_SINT:
 			*(int*)element = static_cast<int>(r);
 			break;
-		case FORMAT_R32UI:
+		case VK_FORMAT_R32_UINT:
 			*(unsigned int*)element = static_cast<unsigned int>(r);
 			break;
-		case FORMAT_R4G4B4A4:
+		case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
 			*(unsigned short*)element = (unorm<4>(r) << 12) | (unorm<4>(g) << 8) | (unorm<4>(b) << 4) | (unorm<4>(a) << 0);
 			break;
-		case FORMAT_R5G6B5:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
 			*(unsigned short*)element = (unorm<5>(r) << 11) | (unorm<6>(g) << 5) | (unorm<5>(b) << 0);
 			break;
-		case FORMAT_A1R5G5B5:
+		case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
 			*(unsigned short*)element = (unorm<1>(a) << 15) | (unorm<5>(r) << 10) | (unorm<5>(g) << 5) | (unorm<5>(b) << 0);
 			break;
-		case FORMAT_R5G5B5A1:
+		case VK_FORMAT_R5G5B5A1_UNORM_PACK16:
 			*(unsigned short*)element = (unorm<5>(r) << 11) | (unorm<5>(g) << 6) | (unorm<5>(b) << 1) | (unorm<5>(a) << 0);
 			break;
-		case FORMAT_A8R8G8B8:
+		case VK_FORMAT_B8G8R8A8_UNORM:
 			*(unsigned int*)element = (unorm<8>(a) << 24) | (unorm<8>(r) << 16) | (unorm<8>(g) << 8) | (unorm<8>(b) << 0);
 			break;
-		case FORMAT_A8B8G8R8_SNORM:
+		case VK_FORMAT_R8G8B8A8_SNORM:
 			*(unsigned int*)element = (static_cast<unsigned int>(snorm<8>(a)) << 24) |
 			                          (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_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
 			*(unsigned int*)element = (unorm<8>(a) << 24) | (unorm<8>(b) << 16) | (unorm<8>(g) << 8) | (unorm<8>(r) << 0);
 			break;
-		case FORMAT_A8B8G8R8I:
+		case VK_FORMAT_R8G8B8A8_SINT:
 			*(unsigned int*)element = (static_cast<unsigned int>(scast<8>(a)) << 24) |
 			                          (static_cast<unsigned int>(scast<8>(b)) << 16) |
 			                          (static_cast<unsigned int>(scast<8>(g)) << 8) |
 			                          (static_cast<unsigned int>(scast<8>(r)) << 0);
 			break;
-		case FORMAT_A8B8G8R8UI:
+		case VK_FORMAT_R8G8B8A8_UINT:
 			*(unsigned int*)element = (ucast<8>(a) << 24) | (ucast<8>(b) << 16) | (ucast<8>(g) << 8) | (ucast<8>(r) << 0);
 			break;
-		case FORMAT_A2R10G10B10:
+		case VK_FORMAT_A2R10G10B10_UNORM_PACK32:
 			*(unsigned int*)element = (unorm<2>(a) << 30) | (unorm<10>(r) << 20) | (unorm<10>(g) << 10) | (unorm<10>(b) << 0);
 			break;
-		case FORMAT_A2B10G10R10:
-		case FORMAT_A2B10G10R10UI:
+		case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
+		case VK_FORMAT_A2B10G10R10_UINT_PACK32:
 			*(unsigned int*)element = (unorm<2>(a) << 30) | (unorm<10>(b) << 20) | (unorm<10>(g) << 10) | (unorm<10>(r) << 0);
 			break;
-		case FORMAT_G8R8_SNORM:
+		case VK_FORMAT_R8G8_SNORM:
 			*(unsigned short*)element = (static_cast<unsigned short>(snorm<8>(g)) << 8) |
 			                            (static_cast<unsigned short>(snorm<8>(r)) << 0);
 			break;
-		case FORMAT_G8R8:
+		case VK_FORMAT_R8G8_UNORM:
 			*(unsigned short*)element = (unorm<8>(g) << 8) | (unorm<8>(r) << 0);
 			break;
-		case FORMAT_G8R8I:
+		case VK_FORMAT_R8G8_SINT:
 			*(unsigned short*)element = (static_cast<unsigned short>(scast<8>(g)) << 8) |
 			                            (static_cast<unsigned short>(scast<8>(r)) << 0);
 			break;
-		case FORMAT_G8R8UI:
+		case VK_FORMAT_R8G8_UINT:
 			*(unsigned short*)element = (ucast<8>(g) << 8) | (ucast<8>(r) << 0);
 			break;
-		case FORMAT_G16R16:
+		case VK_FORMAT_R16G16_UNORM:
 			*(unsigned int*)element = (unorm<16>(g) << 16) | (unorm<16>(r) << 0);
 			break;
-		case FORMAT_G16R16I:
+		case VK_FORMAT_R16G16_SINT:
 			*(unsigned int*)element = (static_cast<unsigned int>(scast<16>(g)) << 16) |
 			                          (static_cast<unsigned int>(scast<16>(r)) << 0);
 			break;
-		case FORMAT_G16R16UI:
+		case VK_FORMAT_R16G16_UINT:
 			*(unsigned int*)element = (ucast<16>(g) << 16) | (ucast<16>(r) << 0);
 			break;
-		case FORMAT_G32R32I:
-		case FORMAT_G32R32UI:
+		case VK_FORMAT_R32G32_SINT:
+		case VK_FORMAT_R32G32_UINT:
 			((unsigned int*)element)[0] = static_cast<unsigned int>(r);
 			((unsigned int*)element)[1] = static_cast<unsigned int>(g);
 			break;
-		case FORMAT_A16B16G16R16:
+		case VK_FORMAT_R16G16B16A16_UNORM:
 			((unsigned short*)element)[0] = unorm<16>(r);
 			((unsigned short*)element)[1] = unorm<16>(g);
 			((unsigned short*)element)[2] = unorm<16>(b);
 			((unsigned short*)element)[3] = unorm<16>(a);
 			break;
-		case FORMAT_A16B16G16R16I:
+		case VK_FORMAT_R16G16B16A16_SINT:
 			((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));
 			((unsigned short*)element)[3] = static_cast<unsigned short>(scast<16>(a));
 			break;
-		case FORMAT_A16B16G16R16UI:
+		case VK_FORMAT_R16G16B16A16_UINT:
 			((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));
 			((unsigned short*)element)[3] = static_cast<unsigned short>(ucast<16>(a));
 			break;
-		case FORMAT_A32B32G32R32I:
-		case FORMAT_A32B32G32R32UI:
+		case VK_FORMAT_R32G32B32A32_SINT:
+		case VK_FORMAT_R32G32B32A32_UINT:
 			((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);
 			((unsigned int*)element)[3] = static_cast<unsigned int>(a);
 			break;
-		case FORMAT_R16F:
+		case VK_FORMAT_R16_SFLOAT:
 			*(half*)element = (half)r;
 			break;
-		case FORMAT_G16R16F:
+		case VK_FORMAT_R16G16_SFLOAT:
 			((half*)element)[0] = (half)r;
 			((half*)element)[1] = (half)g;
 			break;
-		case FORMAT_A16B16G16R16F:
+		case VK_FORMAT_R16G16B16A16_SFLOAT:
 			((half*)element)[0] = (half)r;
 			((half*)element)[1] = (half)g;
 			((half*)element)[2] = (half)b;
 			((half*)element)[3] = (half)a;
 			break;
-		case FORMAT_R32F:
+		case VK_FORMAT_R32_SFLOAT:
 			*(float*)element = r;
 			break;
-		case FORMAT_G32R32F:
+		case VK_FORMAT_R32G32_SFLOAT:
 			((float*)element)[0] = r;
 			((float*)element)[1] = g;
 			break;
-		case FORMAT_A32B32G32R32F:
+		case VK_FORMAT_R32G32B32A32_SFLOAT:
 			((float*)element)[0] = r;
 			((float*)element)[1] = g;
 			((float*)element)[2] = b;
 			((float*)element)[3] = a;
 			break;
-		case FORMAT_D32F:
-		case FORMAT_D32FS8:
+		case VK_FORMAT_D32_SFLOAT:
+		case VK_FORMAT_D32_SFLOAT_S8_UINT:
 			*((float*)element) = r;
 			break;
-		case FORMAT_S8:
+		case VK_FORMAT_S8_UINT:
 			*((unsigned char*)element) = unorm<8>(r);
 			break;
 		default:
@@ -271,19 +271,19 @@
 
 		switch(format)
 		{
-		case FORMAT_R8_SNORM:
+		case VK_FORMAT_R8_SNORM:
 			r = max((*(signed char*)element) * (1.0f / 0x7F), -1.0f);
 			break;
-		case FORMAT_R8:
+		case VK_FORMAT_R8_UNORM:
 			r = *(unsigned char*)element * (1.0f / 0xFF);
 			break;
-		case FORMAT_R8I:
+		case VK_FORMAT_R8_SINT:
 			r = *(signed char*)element;
 			break;
-		case FORMAT_R8UI:
+		case VK_FORMAT_R8_UINT:
 			r = *(unsigned char*)element;
 			break;
-		case FORMAT_R4G4B4A4:
+		case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
 			{
 				unsigned short rgba = *(unsigned short*)element;
 
@@ -293,7 +293,7 @@
 				a = (rgba & 0x000F) * (1.0f / 0x000F);
 			}
 			break;
-		case FORMAT_R5G6B5:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
 			{
 				unsigned short rgb = *(unsigned short*)element;
 
@@ -302,7 +302,7 @@
 				b = (rgb & 0x001F) * (1.0f / 0x001F);
 			}
 			break;
-		case FORMAT_A1R5G5B5:
+		case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
 			{
 				unsigned short argb = *(unsigned short*)element;
 
@@ -312,7 +312,7 @@
 				b = (argb & 0x001F) * (1.0f / 0x001F);
 			}
 			break;
-		case FORMAT_R5G5B5A1:
+		case VK_FORMAT_R5G5B5A1_UNORM_PACK16:
 			{
 				unsigned short rgba = *(unsigned short*)element;
 
@@ -322,7 +322,7 @@
 				a = (rgba & 0x0001) * (1.0f / 0x0001);
 			}
 			break;
-		case FORMAT_A8R8G8B8:
+		case VK_FORMAT_B8G8R8A8_UNORM:
 			{
 				unsigned int argb = *(unsigned int*)element;
 
@@ -332,7 +332,7 @@
 				b = (argb & 0x000000FF) * (1.0f / 0x000000FF);
 			}
 			break;
-		case FORMAT_A8B8G8R8_SNORM:
+		case VK_FORMAT_R8G8B8A8_SNORM:
 			{
 				signed char* abgr = (signed char*)element;
 
@@ -342,8 +342,8 @@
 				a = max(abgr[3] * (1.0f / 0x7F), -1.0f);
 			}
 			break;
-		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
 			{
 				unsigned int abgr = *(unsigned int*)element;
 
@@ -353,7 +353,7 @@
 				r = (abgr & 0x000000FF) * (1.0f / 0x000000FF);
 			}
 			break;
-		case FORMAT_A8B8G8R8I:
+		case VK_FORMAT_R8G8B8A8_SINT:
 			{
 				signed char* abgr = (signed char*)element;
 
@@ -363,7 +363,7 @@
 				a = abgr[3];
 			}
 			break;
-		case FORMAT_A8B8G8R8UI:
+		case VK_FORMAT_R8G8B8A8_UINT:
 			{
 				unsigned char* abgr = (unsigned char*)element;
 
@@ -373,7 +373,7 @@
 				a = abgr[3];
 			}
 			break;
-		case FORMAT_G8R8_SNORM:
+		case VK_FORMAT_R8G8_SNORM:
 			{
 				signed char* gr = (signed char*)element;
 
@@ -381,7 +381,7 @@
 				g = (gr[1] & 0x00FF) * (1.0f / 0x00FF);
 			}
 			break;
-		case FORMAT_G8R8:
+		case VK_FORMAT_R8G8_UNORM:
 			{
 				unsigned short gr = *(unsigned short*)element;
 
@@ -389,7 +389,7 @@
 				r = (gr & 0x00FF) * (1.0f / 0x00FF);
 			}
 			break;
-		case FORMAT_G8R8I:
+		case VK_FORMAT_R8G8_SINT:
 			{
 				signed char* gr = (signed char*)element;
 
@@ -397,7 +397,7 @@
 				g = gr[1];
 			}
 			break;
-		case FORMAT_G8R8UI:
+		case VK_FORMAT_R8G8_UINT:
 			{
 				unsigned char* gr = (unsigned char*)element;
 
@@ -405,13 +405,13 @@
 				g = gr[1];
 			}
 			break;
-		case FORMAT_R16I:
+		case VK_FORMAT_R16_SINT:
 			r = *((short*)element);
 			break;
-		case FORMAT_R16UI:
+		case VK_FORMAT_R16_UINT:
 			r = *((unsigned short*)element);
 			break;
-		case FORMAT_G16R16I:
+		case VK_FORMAT_R16G16_SINT:
 			{
 				short* gr = (short*)element;
 
@@ -419,7 +419,7 @@
 				g = gr[1];
 			}
 			break;
-		case FORMAT_G16R16:
+		case VK_FORMAT_R16G16_UNORM:
 			{
 				unsigned int gr = *(unsigned int*)element;
 
@@ -427,7 +427,7 @@
 				r = (gr & 0x0000FFFF) * (1.0f / 0x0000FFFF);
 			}
 			break;
-		case FORMAT_G16R16UI:
+		case VK_FORMAT_R16G16_UINT:
 			{
 				unsigned short* gr = (unsigned short*)element;
 
@@ -435,7 +435,7 @@
 				g = gr[1];
 			}
 			break;
-		case FORMAT_A2R10G10B10:
+		case VK_FORMAT_A2R10G10B10_UNORM_PACK32:
 			{
 				unsigned int argb = *(unsigned int*)element;
 
@@ -445,7 +445,7 @@
 				b = (argb & 0x000003FF) * (1.0f / 0x000003FF);
 			}
 			break;
-		case FORMAT_A2B10G10R10:
+		case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
 			{
 				unsigned int abgr = *(unsigned int*)element;
 
@@ -455,7 +455,7 @@
 				r = (abgr & 0x000003FF) * (1.0f / 0x000003FF);
 			}
 			break;
-		case FORMAT_A2B10G10R10UI:
+		case VK_FORMAT_A2B10G10R10_UINT_PACK32:
 			{
 				unsigned int abgr = *(unsigned int*)element;
 
@@ -465,7 +465,7 @@
 				r = static_cast<float>(abgr & 0x000003FF);
 			}
 			break;
-		case FORMAT_A16B16G16R16I:
+		case VK_FORMAT_R16G16B16A16_SINT:
 			{
 				short* abgr = (short*)element;
 
@@ -475,13 +475,13 @@
 				a = abgr[3];
 			}
 			break;
-		case FORMAT_A16B16G16R16:
+		case VK_FORMAT_R16G16B16A16_UNORM:
 			r = ((unsigned short*)element)[0] * (1.0f / 0xFFFF);
 			g = ((unsigned short*)element)[1] * (1.0f / 0xFFFF);
 			b = ((unsigned short*)element)[2] * (1.0f / 0xFFFF);
 			a = ((unsigned short*)element)[3] * (1.0f / 0xFFFF);
 			break;
-		case FORMAT_A16B16G16R16UI:
+		case VK_FORMAT_R16G16B16A16_UINT:
 			{
 				unsigned short* abgr = (unsigned short*)element;
 
@@ -491,7 +491,7 @@
 				a = abgr[3];
 			}
 			break;
-		case FORMAT_A32B32G32R32I:
+		case VK_FORMAT_R32G32B32A32_SINT:
 			{
 				int* abgr = (int*)element;
 
@@ -501,7 +501,7 @@
 				a = static_cast<float>(abgr[3]);
 			}
 			break;
-		case FORMAT_A32B32G32R32UI:
+		case VK_FORMAT_R32G32B32A32_UINT:
 			{
 				unsigned int* abgr = (unsigned int*)element;
 
@@ -511,7 +511,7 @@
 				a = static_cast<float>(abgr[3]);
 			}
 			break;
-		case FORMAT_G32R32I:
+		case VK_FORMAT_R32G32_SINT:
 			{
 				int* gr = (int*)element;
 
@@ -519,7 +519,7 @@
 				g = static_cast<float>(gr[1]);
 			}
 			break;
-		case FORMAT_G32R32UI:
+		case VK_FORMAT_R32G32_UINT:
 			{
 				unsigned int* gr = (unsigned int*)element;
 
@@ -527,46 +527,46 @@
 				g = static_cast<float>(gr[1]);
 			}
 			break;
-		case FORMAT_R32I:
+		case VK_FORMAT_R32_SINT:
 			r = static_cast<float>(*((int*)element));
 			break;
-		case FORMAT_R32UI:
+		case VK_FORMAT_R32_UINT:
 			r = static_cast<float>(*((unsigned int*)element));
 			break;
-		case FORMAT_R16F:
+		case VK_FORMAT_R16_SFLOAT:
 			r = *(half*)element;
 			break;
-		case FORMAT_G16R16F:
+		case VK_FORMAT_R16G16_SFLOAT:
 			r = ((half*)element)[0];
 			g = ((half*)element)[1];
 			break;
-		case FORMAT_A16B16G16R16F:
+		case VK_FORMAT_R16G16B16A16_SFLOAT:
 			r = ((half*)element)[0];
 			g = ((half*)element)[1];
 			b = ((half*)element)[2];
 			a = ((half*)element)[3];
 			break;
-		case FORMAT_R32F:
+		case VK_FORMAT_R32_SFLOAT:
 			r = *(float*)element;
 			break;
-		case FORMAT_G32R32F:
+		case VK_FORMAT_R32G32_SFLOAT:
 			r = ((float*)element)[0];
 			g = ((float*)element)[1];
 			break;
-		case FORMAT_A32B32G32R32F:
+		case VK_FORMAT_R32G32B32A32_SFLOAT:
 			r = ((float*)element)[0];
 			g = ((float*)element)[1];
 			b = ((float*)element)[2];
 			a = ((float*)element)[3];
 			break;
-		case FORMAT_D32F:
-		case FORMAT_D32FS8:
+		case VK_FORMAT_D32_SFLOAT:
+		case VK_FORMAT_D32_SFLOAT_S8_UINT:
 			r = *(float*)element;
 			g = r;
 			b = r;
 			a = r;
 			break;
-		case FORMAT_S8:
+		case VK_FORMAT_S8_UINT:
 			r = *(unsigned char*)element * (1.0f / 0xFF);
 			break;
 		default:
@@ -676,58 +676,58 @@
 
 			switch(format)
 			{
-			case FORMAT_R11_EAC:
-			case FORMAT_SIGNED_R11_EAC:
-			case FORMAT_RGB8_ETC2:
-			case FORMAT_SRGB8_ETC2:
-			case FORMAT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
-			case FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+			case VK_FORMAT_EAC_R11_UNORM_BLOCK:
+			case VK_FORMAT_EAC_R11_SNORM_BLOCK:
+			case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:
+			case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
+			case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:
+			case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
 				return (unsigned char*)buffer + 8 * (x / 4) + (y / 4) * pitchB + z * sliceB;
-			case FORMAT_RG11_EAC:
-			case FORMAT_SIGNED_RG11_EAC:
-			case FORMAT_RGBA8_ETC2_EAC:
-			case FORMAT_SRGB8_ALPHA8_ETC2_EAC:
-			case FORMAT_RGBA_ASTC_4x4_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR:
+			case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:
+			case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:
+			case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:
+			case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
+			case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:
+			case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:
 				return (unsigned char*)buffer + 16 * (x / 4) + (y / 4) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_5x4_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR:
+			case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:
+			case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:
 				return (unsigned char*)buffer + 16 * (x / 5) + (y / 4) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_5x5_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR:
+			case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:
+			case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:
 				return (unsigned char*)buffer + 16 * (x / 5) + (y / 5) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_6x5_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR:
+			case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:
+			case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:
 				return (unsigned char*)buffer + 16 * (x / 6) + (y / 5) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_6x6_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR:
+			case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:
+			case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:
 				return (unsigned char*)buffer + 16 * (x / 6) + (y / 6) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_8x5_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR:
+			case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:
+			case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:
 				return (unsigned char*)buffer + 16 * (x / 8) + (y / 5) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_8x6_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR:
+			case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:
+			case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:
 				return (unsigned char*)buffer + 16 * (x / 8) + (y / 6) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_8x8_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR:
+			case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:
+			case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:
 				return (unsigned char*)buffer + 16 * (x / 8) + (y / 8) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_10x5_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR:
+			case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:
+			case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:
 				return (unsigned char*)buffer + 16 * (x / 10) + (y / 5) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_10x6_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR:
+			case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:
+			case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:
 				return (unsigned char*)buffer + 16 * (x / 10) + (y / 6) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_10x8_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR:
+			case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:
+			case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:
 				return (unsigned char*)buffer + 16 * (x / 10) + (y / 8) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_10x10_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR:
+			case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:
+			case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:
 				return (unsigned char*)buffer + 16 * (x / 10) + (y / 10) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_12x10_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR:
+			case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:
+			case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
 				return (unsigned char*)buffer + 16 * (x / 12) + (y / 10) * pitchB + z * sliceB;
-			case FORMAT_RGBA_ASTC_12x12_KHR:
-			case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
+			case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:
+			case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:
 				return (unsigned char*)buffer + 16 * (x / 12) + (y / 12) * pitchB + z * sliceB;
 			default:
 				return (unsigned char*)buffer + x * bytes + y * pitchB + z * samples * sliceB;
@@ -745,9 +745,9 @@
 	class SurfaceImplementation : public Surface
 	{
 	public:
-		SurfaceImplementation(int width, int height, int depth, Format format, void *pixels, int pitch, int slice)
+		SurfaceImplementation(int width, int height, int depth, VkFormat format, void *pixels, int pitch, int slice)
 			: Surface(width, height, depth, format, pixels, pitch, slice) {}
-		SurfaceImplementation(Resource *texture, int width, int height, int depth, int border, int samples, Format format, bool lockable, bool renderTarget, int pitchP = 0)
+		SurfaceImplementation(Resource *texture, int width, int height, int depth, int border, int samples, VkFormat format, bool lockable, bool renderTarget, int pitchP = 0)
 			: Surface(texture, width, height, depth, border, samples, format, lockable, renderTarget, pitchP) {}
 		~SurfaceImplementation() override {};
 
@@ -762,17 +762,17 @@
 		}
 	};
 
-	Surface *Surface::create(int width, int height, int depth, Format format, void *pixels, int pitch, int slice)
+	Surface *Surface::create(int width, int height, int depth, VkFormat format, void *pixels, int pitch, int slice)
 	{
 		return new SurfaceImplementation(width, height, depth, format, pixels, pitch, slice);
 	}
 
-	Surface *Surface::create(Resource *texture, int width, int height, int depth, int border, int samples, Format format, bool lockable, bool renderTarget, int pitchPprovided)
+	Surface *Surface::create(Resource *texture, int width, int height, int depth, int border, int samples, VkFormat format, bool lockable, bool renderTarget, int pitchPprovided)
 	{
 		return new SurfaceImplementation(texture, width, height, depth, border, samples, format, lockable, renderTarget, pitchPprovided);
 	}
 
-	Surface::Surface(int width, int height, int depth, Format format, void *pixels, int pitch, int slice) : lockable(true), renderTarget(false)
+	Surface::Surface(int width, int height, int depth, VkFormat format, void *pixels, int pitch, int slice) : lockable(true), renderTarget(false)
 	{
 		resource = new Resource(0);
 		hasParent = false;
@@ -814,7 +814,7 @@
 		stencil.height = height;
 		stencil.depth = depth;
 		stencil.samples = 1;
-		stencil.format = isStencil(format) ? FORMAT_S8 : FORMAT_NULL;
+		stencil.format = isStencil(format) ? VK_FORMAT_S8_UINT : VK_FORMAT_UNDEFINED;
 		stencil.bytes = bytes(stencil.format);
 		stencil.pitchB = pitchB(stencil.width, 0, stencil.format, false);
 		stencil.pitchP = pitchP(stencil.width, 0, stencil.format, false);
@@ -827,7 +827,7 @@
 		dirtyContents = true;
 	}
 
-	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)
+	Surface::Surface(Resource *texture, int width, int height, int depth, int border, int samples, VkFormat format, bool lockable, bool renderTarget, int pitchPprovided) : lockable(lockable), renderTarget(renderTarget)
 	{
 		resource = texture ? texture : new Resource(0);
 		hasParent = texture != nullptr;
@@ -870,7 +870,7 @@
 		stencil.height = height;
 		stencil.depth = depth;
 		stencil.samples = (short)samples;
-		stencil.format = isStencil(format) ? FORMAT_S8 : FORMAT_NULL;
+		stencil.format = isStencil(format) ? VK_FORMAT_S8_UINT : VK_FORMAT_UNDEFINED;
 		stencil.bytes = bytes(stencil.format);
 		stencil.pitchB = pitchB(stencil.width, 0, stencil.format, renderTarget);
 		stencil.pitchP = pitchP(stencil.width, 0, stencil.format, renderTarget);
@@ -988,9 +988,9 @@
 				{
 					switch(external.format)
 					{
-					case FORMAT_A1R5G5B5:
-					case FORMAT_A2R10G10B10:
-					case FORMAT_A2B10G10R10:
+					case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
+					case VK_FORMAT_A2R10G10B10_UNORM_PACK32:
+					case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
 						lockExternal(0, 0, 0, LOCK_READWRITE, client);
 						unlockExternal();
 						break;
@@ -1045,7 +1045,7 @@
 	{
 		resource->lock(client);
 
-		if(stencil.format == FORMAT_NULL)
+		if(stencil.format == VK_FORMAT_UNDEFINED)
 		{
 			return nullptr;
 		}
@@ -1065,102 +1065,100 @@
 		resource->unlock();
 	}
 
-	int Surface::bytes(Format format)
+	int Surface::bytes(VkFormat format)
 	{
 		switch(format)
 		{
-		case FORMAT_NULL:				return 0;
-		case FORMAT_R8I:				return 1;
-		case FORMAT_R8:					return 1;
-		case FORMAT_R16I:				return 2;
-		case FORMAT_R16UI:				return 2;
-		case FORMAT_R5G6B5:				return 2;
-		case FORMAT_A1R5G5B5:			return 2;
-		case FORMAT_R5G5B5A1:			return 2;
-		case FORMAT_R4G4B4A4:			return 2;
-		case FORMAT_R32I:				return 4;
-		case FORMAT_R32UI:				return 4;
-		case FORMAT_A8R8G8B8:			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_A8B8G8R8UI:			return 4;
-		case FORMAT_A8B8G8R8:			return 4;
-		case FORMAT_R8_SNORM:			return 1;
-		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;
-		case FORMAT_G8R8I:				return 2;
-		case FORMAT_G8R8:				return 2;
-		case FORMAT_G16R16I:			return 4;
-		case FORMAT_G16R16UI:			return 4;
-		case FORMAT_G16R16:				return 4;
-		case FORMAT_G32R32I:			return 8;
-		case FORMAT_G32R32UI:			return 8;
-		case FORMAT_A16B16G16R16I:		return 8;
-		case FORMAT_A16B16G16R16UI:		return 8;
-		case FORMAT_A16B16G16R16:		return 8;
-		case FORMAT_A32B32G32R32I:		return 16;
-		case FORMAT_A32B32G32R32UI:		return 16;
+		case VK_FORMAT_UNDEFINED:					return 0;
+		case VK_FORMAT_R8_SINT:						return 1;
+		case VK_FORMAT_R8_UNORM:					return 1;
+		case VK_FORMAT_R16_SINT:					return 2;
+		case VK_FORMAT_R16_UINT:					return 2;
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:			return 2;
+		case VK_FORMAT_A1R5G5B5_UNORM_PACK16:		return 2;
+		case VK_FORMAT_R5G5B5A1_UNORM_PACK16:		return 2;
+		case VK_FORMAT_B4G4R4A4_UNORM_PACK16:		return 2;
+		case VK_FORMAT_R32_SINT:					return 4;
+		case VK_FORMAT_R32_UINT:					return 4;
+		case VK_FORMAT_B8G8R8A8_UNORM:				return 4;
+		case VK_FORMAT_R8G8B8A8_SRGB:				return 4;
+		case VK_FORMAT_R8G8B8A8_SINT:				return 4;
+		case VK_FORMAT_R8_UINT:						return 1;
+		case VK_FORMAT_R8G8_UINT:					return 2;
+		case VK_FORMAT_R8G8B8A8_UINT:				return 4;
+		case VK_FORMAT_R8G8B8A8_UNORM:				return 4;
+		case VK_FORMAT_R8_SNORM:					return 1;
+		case VK_FORMAT_R8G8_SNORM:					return 2;
+		case VK_FORMAT_R8G8B8A8_SNORM:				return 4;
+		case VK_FORMAT_A2R10G10B10_UNORM_PACK32:	return 4;
+		case VK_FORMAT_A2B10G10R10_UNORM_PACK32:	return 4;
+		case VK_FORMAT_A2B10G10R10_UINT_PACK32:		return 4;
+		case VK_FORMAT_R8G8_SINT:					return 2;
+		case VK_FORMAT_R8G8_UNORM:					return 2;
+		case VK_FORMAT_R16G16_SINT:					return 4;
+		case VK_FORMAT_R16G16_UINT:					return 4;
+		case VK_FORMAT_R16G16_UNORM:				return 4;
+		case VK_FORMAT_R32G32_SINT:					return 8;
+		case VK_FORMAT_R32G32_UINT:					return 8;
+		case VK_FORMAT_R16G16B16A16_SINT:			return 8;
+		case VK_FORMAT_R16G16B16A16_UINT:			return 8;
+		case VK_FORMAT_R16G16B16A16_UNORM:			return 8;
+		case VK_FORMAT_R32G32B32A32_SINT:			return 16;
+		case VK_FORMAT_R32G32B32A32_UINT:			return 16;
 		// Compressed formats
-		case FORMAT_R11_EAC:			return 2;
-		case FORMAT_SIGNED_R11_EAC:		return 2;
-		case FORMAT_RG11_EAC:			return 4;
-		case FORMAT_SIGNED_RG11_EAC:	return 4;
-		case FORMAT_RGB8_ETC2:			return 2;
-		case FORMAT_SRGB8_ETC2:			return 2;
-		case FORMAT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:	return 2;
-		case FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:	return 2;
-		case FORMAT_RGBA8_ETC2_EAC:			return 4;
-		case FORMAT_SRGB8_ALPHA8_ETC2_EAC:	return 4;
-		case FORMAT_RGBA_ASTC_4x4_KHR:
-		case FORMAT_RGBA_ASTC_5x4_KHR:
-		case FORMAT_RGBA_ASTC_5x5_KHR:
-		case FORMAT_RGBA_ASTC_6x5_KHR:
-		case FORMAT_RGBA_ASTC_6x6_KHR:
-		case FORMAT_RGBA_ASTC_8x5_KHR:
-		case FORMAT_RGBA_ASTC_8x6_KHR:
-		case FORMAT_RGBA_ASTC_8x8_KHR:
-		case FORMAT_RGBA_ASTC_10x5_KHR:
-		case FORMAT_RGBA_ASTC_10x6_KHR:
-		case FORMAT_RGBA_ASTC_10x8_KHR:
-		case FORMAT_RGBA_ASTC_10x10_KHR:
-		case FORMAT_RGBA_ASTC_12x10_KHR:
-		case FORMAT_RGBA_ASTC_12x12_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR: return 0; // FIXME
+		case VK_FORMAT_EAC_R11_UNORM_BLOCK:			return 2;
+		case VK_FORMAT_EAC_R11_SNORM_BLOCK:			return 2;
+		case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:		return 4;
+		case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:		return 4;
+		case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:		return 2;
+		case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:		return 2;
+		case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:	return 2;
+		case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:	return 2;
+		case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:	return 4;
+		case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:	return 4;
+		case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:		return 0; // FIXME
 		// Floating-point formats
-		case FORMAT_R16F:				return 2;
-		case FORMAT_G16R16F:			return 4;
-		case FORMAT_A16B16G16R16F:		return 8;
-		case FORMAT_R32F:				return 4;
-		case FORMAT_G32R32F:			return 8;
-		case FORMAT_A32B32G32R32F:		return 16;
+		case VK_FORMAT_R16_SFLOAT:					return 2;
+		case VK_FORMAT_R16G16_SFLOAT:				return 4;
+		case VK_FORMAT_R16G16B16A16_SFLOAT:			return 8;
+		case VK_FORMAT_R32_SFLOAT:					return 4;
+		case VK_FORMAT_R32G32_SFLOAT:				return 8;
+		case VK_FORMAT_R32G32B32A32_SFLOAT:			return 16;
 		// Depth/stencil formats
-		case FORMAT_D16:				return 2;
-		case FORMAT_D24X8:				return 4;
-		case FORMAT_D24S8:				return 4;
-		case FORMAT_D32F:				return 4;
-		case FORMAT_D32FS8:				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
-		case FORMAT_YV12_JFIF:          return 1;   // Y plane only
+		case VK_FORMAT_D16_UNORM:					return 2;
+		case VK_FORMAT_X8_D24_UNORM_PACK32:			return 4;
+		case VK_FORMAT_D24_UNORM_S8_UINT:			return 4;
+		case VK_FORMAT_D32_SFLOAT:					return 4;
+		case VK_FORMAT_D32_SFLOAT_S8_UINT:			return 4;
+		case VK_FORMAT_S8_UINT:						return 1;
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:	return 1;   // Y plane only
 		default:
 			ASSERT(false);
 		}
@@ -1168,7 +1166,7 @@
 		return 0;
 	}
 
-	int Surface::pitchB(int width, int border, Format format, bool target)
+	int Surface::pitchB(int width, int border, VkFormat format, bool target)
 	{
 		width += 2 * border;
 
@@ -1180,68 +1178,66 @@
 
 		switch(format)
 		{
-		case FORMAT_R11_EAC:
-		case FORMAT_SIGNED_R11_EAC:
-		case FORMAT_RGB8_ETC2:
-		case FORMAT_SRGB8_ETC2:
-		case FORMAT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
-		case FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+		case VK_FORMAT_EAC_R11_UNORM_BLOCK:
+		case VK_FORMAT_EAC_R11_SNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
 			return 8 * ((width + 3) / 4);    // 64 bit per 4x4 block, computed per 4 rows
-		case FORMAT_RG11_EAC:
-		case FORMAT_SIGNED_RG11_EAC:
-		case FORMAT_RGBA8_ETC2_EAC:
-		case FORMAT_SRGB8_ALPHA8_ETC2_EAC:
-		case FORMAT_RGBA_ASTC_4x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR:
+		case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:
+		case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:
 			return 16 * ((width + 3) / 4);    // 128 bit per 4x4 block, computed per 4 rows
-		case FORMAT_RGBA_ASTC_5x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR:
-		case FORMAT_RGBA_ASTC_5x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR:
+		case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:
 			return 16 * ((width + 4) / 5);
-		case FORMAT_RGBA_ASTC_6x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR:
-		case FORMAT_RGBA_ASTC_6x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR:
+		case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:
 			return 16 * ((width + 5) / 6);
-		case FORMAT_RGBA_ASTC_8x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR:
-		case FORMAT_RGBA_ASTC_8x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR:
-		case FORMAT_RGBA_ASTC_8x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR:
+		case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:
 			return 16 * ((width + 7) / 8);
-		case FORMAT_RGBA_ASTC_10x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR:
-		case FORMAT_RGBA_ASTC_10x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR:
-		case FORMAT_RGBA_ASTC_10x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR:
-		case FORMAT_RGBA_ASTC_10x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR:
+		case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:
 			return 16 * ((width + 9) / 10);
-		case FORMAT_RGBA_ASTC_12x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR:
-		case FORMAT_RGBA_ASTC_12x12_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
+		case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:
 			return 16 * ((width + 11) / 12);
-		case FORMAT_YV12_BT601:
-		case FORMAT_YV12_BT709:
-		case FORMAT_YV12_JFIF:
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
 			return align<16>(width);
 		default:
 			return bytes(format) * width;
 		}
 	}
 
-	int Surface::pitchP(int width, int border, Format format, bool target)
+	int Surface::pitchP(int width, int border, VkFormat format, bool target)
 	{
 		int B = bytes(format);
 
 		return B > 0 ? pitchB(width, border, format, target) / B : 0;
 	}
 
-	int Surface::sliceB(int width, int height, int border, Format format, bool target)
+	int Surface::sliceB(int width, int height, int border, VkFormat format, bool target)
 	{
 		height += 2 * border;
 
@@ -1253,56 +1249,56 @@
 
 		switch(format)
 		{
-		case FORMAT_R11_EAC:
-		case FORMAT_SIGNED_R11_EAC:
-		case FORMAT_RG11_EAC:
-		case FORMAT_SIGNED_RG11_EAC:
-		case FORMAT_RGB8_ETC2:
-		case FORMAT_SRGB8_ETC2:
-		case FORMAT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
-		case FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
-		case FORMAT_RGBA8_ETC2_EAC:
-		case FORMAT_SRGB8_ALPHA8_ETC2_EAC:
-		case FORMAT_RGBA_ASTC_4x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR:
-		case FORMAT_RGBA_ASTC_5x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR:
+		case VK_FORMAT_EAC_R11_UNORM_BLOCK:
+		case VK_FORMAT_EAC_R11_SNORM_BLOCK:
+		case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:
+		case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:
 			return pitchB(width, border, format, target) * ((height + 3) / 4);   // Pitch computed per 4 rows
-		case FORMAT_RGBA_ASTC_5x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR:
-		case FORMAT_RGBA_ASTC_6x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR:
-		case FORMAT_RGBA_ASTC_8x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR:
-		case FORMAT_RGBA_ASTC_10x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR:
+		case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:
 			return pitchB(width, border, format, target) * ((height + 4) / 5);   // Pitch computed per 5 rows
-		case FORMAT_RGBA_ASTC_6x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR:
-		case FORMAT_RGBA_ASTC_8x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR:
-		case FORMAT_RGBA_ASTC_10x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR:
+		case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:
 			return pitchB(width, border, format, target) * ((height + 5) / 6);   // Pitch computed per 6 rows
-		case FORMAT_RGBA_ASTC_8x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR:
-		case FORMAT_RGBA_ASTC_10x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR:
+		case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:
 			return pitchB(width, border, format, target) * ((height + 7) / 8);   // Pitch computed per 8 rows
-		case FORMAT_RGBA_ASTC_10x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR:
-		case FORMAT_RGBA_ASTC_12x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR:
+		case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
 			return pitchB(width, border, format, target) * ((height + 9) / 10);   // Pitch computed per 10 rows
-		case FORMAT_RGBA_ASTC_12x12_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
+		case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:
 			return pitchB(width, border, format, target) * ((height + 11) / 12);   // Pitch computed per 12 rows
 		default:
 			return pitchB(width, border, format, target) * height;   // Pitch computed per row
 		}
 	}
 
-	int Surface::sliceP(int width, int height, int border, Format format, bool target)
+	int Surface::sliceP(int width, int height, int border, VkFormat format, bool target)
 	{
 		int B = bytes(format);
 
@@ -1320,45 +1316,45 @@
 
 			switch(source.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_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
-			case FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: decodeETC2(destination, source, 1, true);  break; // FIXME: Check destination format
-			case FORMAT_RGBA8_ETC2_EAC:                 decodeETC2(destination, source, 8, false); break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ETC2_EAC:          decodeETC2(destination, source, 8, true);  break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_4x4_KHR:           decodeASTC(destination, source, 4,  4,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_5x4_KHR:           decodeASTC(destination, source, 5,  4,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_5x5_KHR:           decodeASTC(destination, source, 5,  5,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_6x5_KHR:           decodeASTC(destination, source, 6,  5,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_6x6_KHR:           decodeASTC(destination, source, 6,  6,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_8x5_KHR:           decodeASTC(destination, source, 8,  5,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_8x6_KHR:           decodeASTC(destination, source, 8,  6,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_8x8_KHR:           decodeASTC(destination, source, 8,  8,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_10x5_KHR:          decodeASTC(destination, source, 10, 5,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_10x6_KHR:          decodeASTC(destination, source, 10, 6,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_10x8_KHR:          decodeASTC(destination, source, 10, 8,  1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_10x10_KHR:         decodeASTC(destination, source, 10, 10, 1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_12x10_KHR:         decodeASTC(destination, source, 12, 10, 1, false); break; // FIXME: Check destination format
-			case FORMAT_RGBA_ASTC_12x12_KHR:         decodeASTC(destination, source, 12, 12, 1, false); break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR:   decodeASTC(destination, source, 4,  4,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR:   decodeASTC(destination, source, 5,  4,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR:   decodeASTC(destination, source, 5,  5,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR:   decodeASTC(destination, source, 6,  5,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR:   decodeASTC(destination, source, 6,  6,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR:   decodeASTC(destination, source, 8,  5,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR:   decodeASTC(destination, source, 8,  6,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR:   decodeASTC(destination, source, 8,  8,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR:  decodeASTC(destination, source, 10, 5,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR:  decodeASTC(destination, source, 10, 6,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR:  decodeASTC(destination, source, 10, 8,  1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR: decodeASTC(destination, source, 10, 10, 1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR: decodeASTC(destination, source, 12, 10, 1, true);  break; // FIXME: Check destination format
-			case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR: decodeASTC(destination, source, 12, 12, 1, true);  break; // FIXME: Check destination format
-			default:				genericUpdate(destination, source);		break;
+			case VK_FORMAT_EAC_R11_UNORM_BLOCK:       decodeEAC(destination, source, 1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_EAC_R11_SNORM_BLOCK:       decodeEAC(destination, source, 1, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:    decodeEAC(destination, source, 2, false); break; // FIXME: Check destination format
+			case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:    decodeEAC(destination, source, 2, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:   decodeETC2(destination, source, 0, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:    decodeETC2(destination, source, 0, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK: decodeETC2(destination, source, 1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:  decodeETC2(destination, source, 1, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK: decodeETC2(destination, source, 8, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:  decodeETC2(destination, source, 8, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:      decodeASTC(destination, source, 4,  4,  1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:      decodeASTC(destination, source, 5,  4,  1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:      decodeASTC(destination, source, 5,  5,  1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:      decodeASTC(destination, source, 6,  5,  1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:      decodeASTC(destination, source, 6,  6,  1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:      decodeASTC(destination, source, 8,  5,  1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:      decodeASTC(destination, source, 8,  6,  1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:      decodeASTC(destination, source, 8,  8,  1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:     decodeASTC(destination, source, 10, 5,  1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:     decodeASTC(destination, source, 10, 6,  1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:     decodeASTC(destination, source, 10, 8,  1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:    decodeASTC(destination, source, 10, 10, 1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:    decodeASTC(destination, source, 12, 10, 1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:    decodeASTC(destination, source, 12, 12, 1, false); break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:       decodeASTC(destination, source, 4,  4,  1, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:       decodeASTC(destination, source, 5,  4,  1, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:       decodeASTC(destination, source, 5,  5,  1, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:       decodeASTC(destination, source, 6,  5,  1, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:       decodeASTC(destination, source, 6,  6,  1, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:       decodeASTC(destination, source, 8,  5,  1, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:       decodeASTC(destination, source, 8,  6,  1, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:       decodeASTC(destination, source, 8,  8,  1, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:      decodeASTC(destination, source, 10, 5,  1, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:      decodeASTC(destination, source, 10, 6,  1, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:      decodeASTC(destination, source, 10, 8,  1, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:     decodeASTC(destination, source, 10, 10, 1, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:     decodeASTC(destination, source, 12, 10, 1, true);  break; // FIXME: Check destination format
+			case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:     decodeASTC(destination, source, 12, 12, 1, true);  break; // FIXME: Check destination format
+			default:                                  genericUpdate(destination, source); break;
 			}
 		}
 	}
@@ -1810,7 +1806,7 @@
 	{
 	}
 
-	size_t Surface::size(int width, int height, int depth, int border, int samples, Format format)
+	size_t Surface::size(int width, int height, int depth, int border, int samples, VkFormat format)
 	{
 		samples = max(1, samples);
 
@@ -1829,9 +1825,7 @@
 								// 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:
-		case FORMAT_YV12_BT709:
-		case FORMAT_YV12_JFIF:
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
 			{
 				width += 2 * border;
 				height += 2 * border;
@@ -1846,50 +1840,50 @@
 		}
 	}
 
-	bool Surface::isStencil(Format format)
+	bool Surface::isStencil(VkFormat format)
 	{
 		switch(format)
 		{
-		case FORMAT_D16:
-		case FORMAT_D24X8:
-		case FORMAT_D32F:
+		case VK_FORMAT_D16_UNORM:
+		case VK_FORMAT_X8_D24_UNORM_PACK32:
+		case VK_FORMAT_D32_SFLOAT:
 			return false;
-		case FORMAT_D24S8:
-		case FORMAT_S8:
-		case FORMAT_D32FS8:
+		case VK_FORMAT_D24_UNORM_S8_UINT:
+		case VK_FORMAT_S8_UINT:
+		case VK_FORMAT_D32_SFLOAT_S8_UINT:
 			return true;
 		default:
 			return false;
 		}
 	}
 
-	bool Surface::isDepth(Format format)
+	bool Surface::isDepth(VkFormat format)
 	{
 		switch(format)
 		{
-		case FORMAT_D16:
-		case FORMAT_D24X8:
-		case FORMAT_D24S8:
-		case FORMAT_D32F:
-		case FORMAT_D32FS8:
+		case VK_FORMAT_D16_UNORM:
+		case VK_FORMAT_X8_D24_UNORM_PACK32:
+		case VK_FORMAT_D24_UNORM_S8_UINT:
+		case VK_FORMAT_D32_SFLOAT:
+		case VK_FORMAT_D32_SFLOAT_S8_UINT:
 			return true;
-		case FORMAT_S8:
+		case VK_FORMAT_S8_UINT:
 			return false;
 		default:
 			return false;
 		}
 	}
 
-	bool Surface::hasQuadLayout(Format format)
+	bool Surface::hasQuadLayout(VkFormat format)
 	{
 		switch(format)
 		{
-		case FORMAT_D16:
-		case FORMAT_D24X8:
-		case FORMAT_D24S8:
-		case FORMAT_D32F:
-		case FORMAT_D32FS8:
-		case FORMAT_S8:
+		case VK_FORMAT_D16_UNORM:
+		case VK_FORMAT_X8_D24_UNORM_PACK32:
+		case VK_FORMAT_D24_UNORM_S8_UINT:
+		case VK_FORMAT_D32_SFLOAT:
+		case VK_FORMAT_D32_SFLOAT_S8_UINT:
+		case VK_FORMAT_S8_UINT:
 			return true;
 		default:
 			break;
@@ -1898,54 +1892,52 @@
 		return false;
 	}
 
-	bool Surface::isFloatFormat(Format format)
+	bool Surface::isFloatFormat(VkFormat format)
 	{
 		switch(format)
 		{
-		case FORMAT_R5G6B5:
-		case FORMAT_A8R8G8B8:
-		case FORMAT_SRGB8_A8:
-		case FORMAT_A8B8G8R8I:
-		case FORMAT_R8UI:
-		case FORMAT_G8R8UI:
-		case FORMAT_A8B8G8R8UI:
-		case FORMAT_A8B8G8R8:
-		case FORMAT_G8R8I:
-		case FORMAT_G8R8:
-		case FORMAT_A2B10G10R10:
-		case FORMAT_A2B10G10R10UI:
-		case FORMAT_R8_SNORM:
-		case FORMAT_G8R8_SNORM:
-		case FORMAT_A8B8G8R8_SNORM:
-		case FORMAT_R16I:
-		case FORMAT_R16UI:
-		case FORMAT_G16R16I:
-		case FORMAT_G16R16UI:
-		case FORMAT_G16R16:
-		case FORMAT_A16B16G16R16I:
-		case FORMAT_A16B16G16R16UI:
-		case FORMAT_A16B16G16R16:
-		case FORMAT_R8I:
-		case FORMAT_R8:
-		case FORMAT_S8:
-		case FORMAT_YV12_BT601:
-		case FORMAT_YV12_BT709:
-		case FORMAT_YV12_JFIF:
-		case FORMAT_R32I:
-		case FORMAT_R32UI:
-		case FORMAT_G32R32I:
-		case FORMAT_G32R32UI:
-		case FORMAT_A32B32G32R32I:
-		case FORMAT_A32B32G32R32UI:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
+		case VK_FORMAT_B8G8R8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
+		case VK_FORMAT_R8G8B8A8_SINT:
+		case VK_FORMAT_R8_UINT:
+		case VK_FORMAT_R8G8_UINT:
+		case VK_FORMAT_R8G8B8A8_UINT:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8_SINT:
+		case VK_FORMAT_R8G8_UNORM:
+		case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
+		case VK_FORMAT_A2B10G10R10_UINT_PACK32:
+		case VK_FORMAT_R8_SNORM:
+		case VK_FORMAT_R8G8_SNORM:
+		case VK_FORMAT_R8G8B8A8_SNORM:
+		case VK_FORMAT_R16_SINT:
+		case VK_FORMAT_R16_UINT:
+		case VK_FORMAT_R16G16_SINT:
+		case VK_FORMAT_R16G16_UINT:
+		case VK_FORMAT_R16G16_UNORM:
+		case VK_FORMAT_R16G16B16A16_SINT:
+		case VK_FORMAT_R16G16B16A16_UINT:
+		case VK_FORMAT_R16G16B16A16_UNORM:
+		case VK_FORMAT_R8_SINT:
+		case VK_FORMAT_R8_UNORM:
+		case VK_FORMAT_S8_UINT:
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
+		case VK_FORMAT_R32_SINT:
+		case VK_FORMAT_R32_UINT:
+		case VK_FORMAT_R32G32_SINT:
+		case VK_FORMAT_R32G32_UINT:
+		case VK_FORMAT_R32G32B32A32_SINT:
+		case VK_FORMAT_R32G32B32A32_UINT:
 			return false;
-		case FORMAT_R16F:
-		case FORMAT_G16R16F:
-		case FORMAT_A16B16G16R16F:
-		case FORMAT_R32F:
-		case FORMAT_G32R32F:
-		case FORMAT_A32B32G32R32F:
-		case FORMAT_D32F:
-		case FORMAT_D32FS8:
+		case VK_FORMAT_R16_SFLOAT:
+		case VK_FORMAT_R16G16_SFLOAT:
+		case VK_FORMAT_R16G16B16A16_SFLOAT:
+		case VK_FORMAT_R32_SFLOAT:
+		case VK_FORMAT_R32G32_SFLOAT:
+		case VK_FORMAT_R32G32B32A32_SFLOAT:
+		case VK_FORMAT_D32_SFLOAT:
+		case VK_FORMAT_D32_SFLOAT_S8_UINT:
 			return true;
 		default:
 			ASSERT(false);
@@ -1954,53 +1946,51 @@
 		return false;
 	}
 
-	bool Surface::isUnsignedComponent(Format format, int component)
+	bool Surface::isUnsignedComponent(VkFormat format, int component)
 	{
 		switch(format)
 		{
-		case FORMAT_NULL:
-		case FORMAT_R5G6B5:
-		case FORMAT_A8R8G8B8:
-		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
-		case FORMAT_G8R8:
-		case FORMAT_A2B10G10R10:
-		case FORMAT_A2B10G10R10UI:
-		case FORMAT_R16UI:
-		case FORMAT_G16R16:
-		case FORMAT_G16R16UI:
-		case FORMAT_A16B16G16R16:
-		case FORMAT_A16B16G16R16UI:
-		case FORMAT_R32UI:
-		case FORMAT_G32R32UI:
-		case FORMAT_A32B32G32R32UI:
-		case FORMAT_R8UI:
-		case FORMAT_G8R8UI:
-		case FORMAT_A8B8G8R8UI:
-		case FORMAT_D32F:
-		case FORMAT_D32FS8:
-		case FORMAT_R8:
-		case FORMAT_YV12_BT601:
-		case FORMAT_YV12_BT709:
-		case FORMAT_YV12_JFIF:
+		case VK_FORMAT_UNDEFINED:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
+		case VK_FORMAT_B8G8R8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
+		case VK_FORMAT_R8G8_UNORM:
+		case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
+		case VK_FORMAT_A2B10G10R10_UINT_PACK32:
+		case VK_FORMAT_R16_UINT:
+		case VK_FORMAT_R16G16_UNORM:
+		case VK_FORMAT_R16G16_UINT:
+		case VK_FORMAT_R16G16B16A16_UNORM:
+		case VK_FORMAT_R16G16B16A16_UINT:
+		case VK_FORMAT_R32_UINT:
+		case VK_FORMAT_R32G32_UINT:
+		case VK_FORMAT_R32G32B32A32_UINT:
+		case VK_FORMAT_R8_UINT:
+		case VK_FORMAT_R8G8_UINT:
+		case VK_FORMAT_R8G8B8A8_UINT:
+		case VK_FORMAT_D32_SFLOAT:
+		case VK_FORMAT_D32_SFLOAT_S8_UINT:
+		case VK_FORMAT_R8_UNORM:
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
 			return true;
-		case FORMAT_A8B8G8R8I:
-		case FORMAT_A16B16G16R16I:
-		case FORMAT_A32B32G32R32I:
-		case FORMAT_A8B8G8R8_SNORM:
-		case FORMAT_A32B32G32R32F:
+		case VK_FORMAT_R8G8B8A8_SINT:
+		case VK_FORMAT_R16G16B16A16_SINT:
+		case VK_FORMAT_R32G32B32A32_SINT:
+		case VK_FORMAT_R8G8B8A8_SNORM:
+		case VK_FORMAT_R32G32B32A32_SFLOAT:
 			return false;
-		case FORMAT_R32F:
-		case FORMAT_R8I:
-		case FORMAT_R16I:
-		case FORMAT_R32I:
-		case FORMAT_R8_SNORM:
+		case VK_FORMAT_R32_SFLOAT:
+		case VK_FORMAT_R8_SINT:
+		case VK_FORMAT_R16_SINT:
+		case VK_FORMAT_R32_SINT:
+		case VK_FORMAT_R8_SNORM:
 			return component >= 1;
-		case FORMAT_G32R32F:
-		case FORMAT_G8R8I:
-		case FORMAT_G16R16I:
-		case FORMAT_G32R32I:
-		case FORMAT_G8R8_SNORM:
+		case VK_FORMAT_R32G32_SFLOAT:
+		case VK_FORMAT_R8G8_SINT:
+		case VK_FORMAT_R16G16_SINT:
+		case VK_FORMAT_R32G32_SINT:
+		case VK_FORMAT_R8G8_SNORM:
 			return component >= 2;
 		default:
 			ASSERT(false);
@@ -2009,142 +1999,142 @@
 		return false;
 	}
 
-	bool Surface::isSRGBreadable(Format format)
+	bool Surface::isSRGBreadable(VkFormat format)
 	{
 		// Keep in sync with Capabilities::isSRGBreadable
 		switch(format)
 		{
-		case FORMAT_A8R8G8B8:
-		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
-		case FORMAT_R5G6B5:
-		case FORMAT_A1R5G5B5:
+		case VK_FORMAT_B8G8R8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
+		case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
 			return true;
 		default:
 			return false;
 		}
 	}
 
-	bool Surface::isSRGBwritable(Format format)
+	bool Surface::isSRGBwritable(VkFormat format)
 	{
 		// Keep in sync with Capabilities::isSRGBwritable
 		switch(format)
 		{
-		case FORMAT_NULL:
-		case FORMAT_A8R8G8B8:
-		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
-		case FORMAT_R5G6B5:
+		case VK_FORMAT_UNDEFINED:
+		case VK_FORMAT_B8G8R8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
 			return true;
 		default:
 			return false;
 		}
 	}
 
-	bool Surface::isSRGBformat(Format format)
+	bool Surface::isSRGBformat(VkFormat format)
 	{
 		switch(format)
 		{
-		case FORMAT_SRGB8_A8:
+		case VK_FORMAT_R8G8B8A8_SRGB:
 			return true;
 		default:
 			return false;
 		}
 	}
 
-	bool Surface::isCompressed(Format format)
+	bool Surface::isCompressed(VkFormat format)
 	{
 		switch(format)
 		{
-		case FORMAT_R11_EAC:
-		case FORMAT_SIGNED_R11_EAC:
-		case FORMAT_RG11_EAC:
-		case FORMAT_SIGNED_RG11_EAC:
-		case FORMAT_RGB8_ETC2:
-		case FORMAT_SRGB8_ETC2:
-		case FORMAT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
-		case FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
-		case FORMAT_RGBA8_ETC2_EAC:
-		case FORMAT_SRGB8_ALPHA8_ETC2_EAC:
-		case FORMAT_RGBA_ASTC_4x4_KHR:
-		case FORMAT_RGBA_ASTC_5x4_KHR:
-		case FORMAT_RGBA_ASTC_5x5_KHR:
-		case FORMAT_RGBA_ASTC_6x5_KHR:
-		case FORMAT_RGBA_ASTC_6x6_KHR:
-		case FORMAT_RGBA_ASTC_8x5_KHR:
-		case FORMAT_RGBA_ASTC_8x6_KHR:
-		case FORMAT_RGBA_ASTC_8x8_KHR:
-		case FORMAT_RGBA_ASTC_10x5_KHR:
-		case FORMAT_RGBA_ASTC_10x6_KHR:
-		case FORMAT_RGBA_ASTC_10x8_KHR:
-		case FORMAT_RGBA_ASTC_10x10_KHR:
-		case FORMAT_RGBA_ASTC_12x10_KHR:
-		case FORMAT_RGBA_ASTC_12x12_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
+		case VK_FORMAT_EAC_R11_UNORM_BLOCK:
+		case VK_FORMAT_EAC_R11_SNORM_BLOCK:
+		case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:
+		case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:
 			return true;
 		default:
 			return false;
 		}
 	}
 
-	bool Surface::isSignedNonNormalizedInteger(Format format)
+	bool Surface::isSignedNonNormalizedInteger(VkFormat format)
 	{
 		switch(format)
 		{
-		case FORMAT_A8B8G8R8I:
-		case FORMAT_G8R8I:
-		case FORMAT_R8I:
-		case FORMAT_A16B16G16R16I:
-		case FORMAT_G16R16I:
-		case FORMAT_R16I:
-		case FORMAT_A32B32G32R32I:
-		case FORMAT_G32R32I:
-		case FORMAT_R32I:
+		case VK_FORMAT_R8G8B8A8_SINT:
+		case VK_FORMAT_R8G8_SINT:
+		case VK_FORMAT_R8_SINT:
+		case VK_FORMAT_R16G16B16A16_SINT:
+		case VK_FORMAT_R16G16_SINT:
+		case VK_FORMAT_R16_SINT:
+		case VK_FORMAT_R32G32B32A32_SINT:
+		case VK_FORMAT_R32G32_SINT:
+		case VK_FORMAT_R32_SINT:
 			return true;
 		default:
 			return false;
 		}
 	}
 
-	bool Surface::isUnsignedNonNormalizedInteger(Format format)
+	bool Surface::isUnsignedNonNormalizedInteger(VkFormat format)
 	{
 		switch(format)
 		{
-		case FORMAT_A8B8G8R8UI:
-		case FORMAT_G8R8UI:
-		case FORMAT_R8UI:
-		case FORMAT_A16B16G16R16UI:
-		case FORMAT_G16R16UI:
-		case FORMAT_R16UI:
-		case FORMAT_A32B32G32R32UI:
-		case FORMAT_G32R32UI:
-		case FORMAT_R32UI:
+		case VK_FORMAT_R8G8B8A8_UINT:
+		case VK_FORMAT_R8G8_UINT:
+		case VK_FORMAT_R8_UINT:
+		case VK_FORMAT_R16G16B16A16_UINT:
+		case VK_FORMAT_R16G16_UINT:
+		case VK_FORMAT_R16_UINT:
+		case VK_FORMAT_R32G32B32A32_UINT:
+		case VK_FORMAT_R32G32_UINT:
+		case VK_FORMAT_R32_UINT:
 			return true;
 		default:
 			return false;
 		}
 	}
 
-	bool Surface::isNonNormalizedInteger(Format format)
+	bool Surface::isNonNormalizedInteger(VkFormat format)
 	{
 		return isSignedNonNormalizedInteger(format) ||
 		       isUnsignedNonNormalizedInteger(format);
 	}
 
-	bool Surface::isNormalizedInteger(Format format)
+	bool Surface::isNormalizedInteger(VkFormat format)
 	{
 		return !isFloatFormat(format) &&
 		       !isNonNormalizedInteger(format) &&
@@ -2153,49 +2143,47 @@
 		       !isStencil(format);
 	}
 
-	int Surface::componentCount(Format format)
+	int Surface::componentCount(VkFormat format)
 	{
 		switch(format)
 		{
-		case FORMAT_R5G6B5:         return 3;
-		case FORMAT_A8R8G8B8:       return 4;
-		case FORMAT_SRGB8_A8:       return 4;
-		case FORMAT_A8B8G8R8I:      return 4;
-		case FORMAT_A8B8G8R8:       return 4;
-		case FORMAT_G8R8I:          return 2;
-		case FORMAT_G8R8:           return 2;
-		case FORMAT_R8_SNORM:      return 1;
-		case FORMAT_G8R8_SNORM:    return 2;
-		case FORMAT_A8B8G8R8_SNORM:return 4;
-		case FORMAT_R8UI:           return 1;
-		case FORMAT_G8R8UI:         return 2;
-		case FORMAT_A8B8G8R8UI:     return 4;
-		case FORMAT_A2B10G10R10:    return 4;
-		case FORMAT_A2B10G10R10UI:  return 4;
-		case FORMAT_G16R16I:        return 2;
-		case FORMAT_G16R16UI:       return 2;
-		case FORMAT_G16R16:         return 2;
-		case FORMAT_G32R32I:        return 2;
-		case FORMAT_G32R32UI:       return 2;
-		case FORMAT_A16B16G16R16I:  return 4;
-		case FORMAT_A16B16G16R16UI: return 4;
-		case FORMAT_A16B16G16R16:   return 4;
-		case FORMAT_A32B32G32R32I:  return 4;
-		case FORMAT_A32B32G32R32UI: return 4;
-		case FORMAT_R32F:           return 1;
-		case FORMAT_G32R32F:        return 2;
-		case FORMAT_A32B32G32R32F:  return 4;
-		case FORMAT_D32F:           return 1;
-		case FORMAT_D32FS8:         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_YV12_BT601:     return 3;
-		case FORMAT_YV12_BT709:     return 3;
-		case FORMAT_YV12_JFIF:      return 3;
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:      return 3;
+		case VK_FORMAT_B8G8R8A8_UNORM:           return 4;
+		case VK_FORMAT_R8G8B8A8_SRGB:            return 4;
+		case VK_FORMAT_R8G8B8A8_SINT:            return 4;
+		case VK_FORMAT_R8G8B8A8_UNORM:           return 4;
+		case VK_FORMAT_R8G8_SINT:                return 2;
+		case VK_FORMAT_R8G8_UNORM:               return 2;
+		case VK_FORMAT_R8_SNORM:                 return 1;
+		case VK_FORMAT_R8G8_SNORM:               return 2;
+		case VK_FORMAT_R8G8B8A8_SNORM:           return 4;
+		case VK_FORMAT_R8_UINT:                  return 1;
+		case VK_FORMAT_R8G8_UINT:                return 2;
+		case VK_FORMAT_R8G8B8A8_UINT:            return 4;
+		case VK_FORMAT_A2B10G10R10_UNORM_PACK32: return 4;
+		case VK_FORMAT_A2B10G10R10_UINT_PACK32:  return 4;
+		case VK_FORMAT_R16G16_SINT:              return 2;
+		case VK_FORMAT_R16G16_UINT:              return 2;
+		case VK_FORMAT_R16G16_UNORM:             return 2;
+		case VK_FORMAT_R32G32_SINT:              return 2;
+		case VK_FORMAT_R32G32_UINT:              return 2;
+		case VK_FORMAT_R16G16B16A16_SINT:        return 4;
+		case VK_FORMAT_R16G16B16A16_UINT:        return 4;
+		case VK_FORMAT_R16G16B16A16_UNORM:       return 4;
+		case VK_FORMAT_R32G32B32A32_SINT:        return 4;
+		case VK_FORMAT_R32G32B32A32_UINT:        return 4;
+		case VK_FORMAT_R32_SFLOAT:               return 1;
+		case VK_FORMAT_R32G32_SFLOAT:            return 2;
+		case VK_FORMAT_R32G32B32A32_SFLOAT:      return 4;
+		case VK_FORMAT_D32_SFLOAT:               return 1;
+		case VK_FORMAT_D32_SFLOAT_S8_UINT:       return 1;
+		case VK_FORMAT_R8_SINT:                  return 1;
+		case VK_FORMAT_R8_UNORM:                 return 1;
+		case VK_FORMAT_R16_SINT:                 return 1;
+		case VK_FORMAT_R16_UINT:                 return 1;
+		case VK_FORMAT_R32_SINT:                 return 1;
+		case VK_FORMAT_R32_UINT:                 return 1;
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: return 3;
 		default:
 			ASSERT(false);
 		}
@@ -2203,7 +2191,7 @@
 		return 1;
 	}
 
-	void *Surface::allocateBuffer(int width, int height, int depth, int border, int samples, Format format)
+	void *Surface::allocateBuffer(int width, int height, int depth, int border, int samples, VkFormat format)
 	{
 		return allocate(size(width, height, depth, border, samples, format));
 	}
@@ -2299,7 +2287,7 @@
 			return;
 		}
 
-		if(internal.format == FORMAT_NULL)
+		if(internal.format == VK_FORMAT_UNDEFINED)
 		{
 			return;
 		}
@@ -2430,7 +2418,7 @@
 			return;
 		}
 
-		if(stencil.format == FORMAT_NULL)
+		if(stencil.format == VK_FORMAT_UNDEFINED)
 		{
 			return;
 		}
@@ -2714,153 +2702,151 @@
 		       external.samples == internal.samples;
 	}
 
-	Format Surface::selectInternalFormat(Format format) const
+	VkFormat Surface::selectInternalFormat(VkFormat format) const
 	{
 		switch(format)
 		{
-		case FORMAT_NULL:
-			return FORMAT_NULL;
-		case FORMAT_A1R5G5B5:
-			return FORMAT_A8R8G8B8;
-		case FORMAT_R8I:
-			return FORMAT_R8I;
-		case FORMAT_R8UI:
-			return FORMAT_R8UI;
-		case FORMAT_R8_SNORM:
-			return FORMAT_R8_SNORM;
-		case FORMAT_R8:
-			return FORMAT_R8;
-		case FORMAT_R16I:
-			return FORMAT_R16I;
-		case FORMAT_R16UI:
-			return FORMAT_R16UI;
-		case FORMAT_R32I:
-			return FORMAT_R32I;
-		case FORMAT_R32UI:
-			return FORMAT_R32UI;
-		case FORMAT_A16B16G16R16I:
-			return FORMAT_A16B16G16R16I;
-		case FORMAT_A16B16G16R16UI:
-			return FORMAT_A16B16G16R16UI;
-		case FORMAT_A2R10G10B10:
-		case FORMAT_A2B10G10R10:
-		case FORMAT_A16B16G16R16:
-			return FORMAT_A16B16G16R16;
-		case FORMAT_A2B10G10R10UI:
-			return FORMAT_A16B16G16R16UI;
-		case FORMAT_A32B32G32R32I:
-			return FORMAT_A32B32G32R32I;
-		case FORMAT_A32B32G32R32UI:
-			return FORMAT_A32B32G32R32UI;
-		case FORMAT_G8R8I:
-			return FORMAT_G8R8I;
-		case FORMAT_G8R8UI:
-			return FORMAT_G8R8UI;
-		case FORMAT_G8R8_SNORM:
-			return FORMAT_G8R8_SNORM;
-		case FORMAT_G8R8:
-			return FORMAT_G8R8;
-		case FORMAT_G16R16I:
-			return FORMAT_G16R16I;
-		case FORMAT_G16R16UI:
-			return FORMAT_G16R16UI;
-		case FORMAT_G16R16:
-			return FORMAT_G16R16;
-		case FORMAT_G32R32I:
-			return FORMAT_G32R32I;
-		case FORMAT_G32R32UI:
-			return FORMAT_G32R32UI;
-		case FORMAT_A8R8G8B8:
-			return FORMAT_A8R8G8B8;
-		case FORMAT_A8B8G8R8I:
-			return FORMAT_A8B8G8R8I;
-		case FORMAT_A8B8G8R8UI:
-			return FORMAT_A8B8G8R8UI;
-		case FORMAT_A8B8G8R8_SNORM:
-			return FORMAT_A8B8G8R8_SNORM;
-		case FORMAT_R5G5B5A1:
-		case FORMAT_R4G4B4A4:
-		case FORMAT_A8B8G8R8:
-			return FORMAT_A8B8G8R8;
-		case FORMAT_R5G6B5:
-			return FORMAT_R5G6B5;
-		case FORMAT_SRGB8_A8:
-			return FORMAT_SRGB8_A8;
+		case VK_FORMAT_UNDEFINED:
+			return VK_FORMAT_UNDEFINED;
+		case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
+			return VK_FORMAT_B8G8R8A8_UNORM;
+		case VK_FORMAT_R8_SINT:
+			return VK_FORMAT_R8_SINT;
+		case VK_FORMAT_R8_UINT:
+			return VK_FORMAT_R8_UINT;
+		case VK_FORMAT_R8_SNORM:
+			return VK_FORMAT_R8_SNORM;
+		case VK_FORMAT_R8_UNORM:
+			return VK_FORMAT_R8_UNORM;
+		case VK_FORMAT_R16_SINT:
+			return VK_FORMAT_R16_SINT;
+		case VK_FORMAT_R16_UINT:
+			return VK_FORMAT_R16_UINT;
+		case VK_FORMAT_R32_SINT:
+			return VK_FORMAT_R32_SINT;
+		case VK_FORMAT_R32_UINT:
+			return VK_FORMAT_R32_UINT;
+		case VK_FORMAT_R16G16B16A16_SINT:
+			return VK_FORMAT_R16G16B16A16_SINT;
+		case VK_FORMAT_R16G16B16A16_UINT:
+			return VK_FORMAT_R16G16B16A16_UINT;
+		case VK_FORMAT_A2R10G10B10_UNORM_PACK32:
+		case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
+		case VK_FORMAT_R16G16B16A16_UNORM:
+			return VK_FORMAT_R16G16B16A16_UNORM;
+		case VK_FORMAT_A2B10G10R10_UINT_PACK32:
+			return VK_FORMAT_R16G16B16A16_UINT;
+		case VK_FORMAT_R32G32B32A32_SINT:
+			return VK_FORMAT_R32G32B32A32_SINT;
+		case VK_FORMAT_R32G32B32A32_UINT:
+			return VK_FORMAT_R32G32B32A32_UINT;
+		case VK_FORMAT_R8G8_SINT:
+			return VK_FORMAT_R8G8_SINT;
+		case VK_FORMAT_R8G8_UINT:
+			return VK_FORMAT_R8G8_UINT;
+		case VK_FORMAT_R8G8_SNORM:
+			return VK_FORMAT_R8G8_SNORM;
+		case VK_FORMAT_R8G8_UNORM:
+			return VK_FORMAT_R8G8_UNORM;
+		case VK_FORMAT_R16G16_SINT:
+			return VK_FORMAT_R16G16_SINT;
+		case VK_FORMAT_R16G16_UINT:
+			return VK_FORMAT_R16G16_UINT;
+		case VK_FORMAT_R16G16_UNORM:
+			return VK_FORMAT_R16G16_UNORM;
+		case VK_FORMAT_R32G32_SINT:
+			return VK_FORMAT_R32G32_SINT;
+		case VK_FORMAT_R32G32_UINT:
+			return VK_FORMAT_R32G32_UINT;
+		case VK_FORMAT_B8G8R8A8_UNORM:
+			return VK_FORMAT_B8G8R8A8_UNORM;
+		case VK_FORMAT_R8G8B8A8_SINT:
+			return VK_FORMAT_R8G8B8A8_SINT;
+		case VK_FORMAT_R8G8B8A8_UINT:
+			return VK_FORMAT_R8G8B8A8_UINT;
+		case VK_FORMAT_R8G8B8A8_SNORM:
+			return VK_FORMAT_R8G8B8A8_SNORM;
+		case VK_FORMAT_R5G5B5A1_UNORM_PACK16:
+		case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+			return VK_FORMAT_R8G8B8A8_UNORM;
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
+			return VK_FORMAT_R5G6B5_UNORM_PACK16;
+		case VK_FORMAT_R8G8B8A8_SRGB:
+			return VK_FORMAT_R8G8B8A8_SRGB;
 		// Compressed formats
-		case FORMAT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
-		case FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
-		case FORMAT_RGBA8_ETC2_EAC:
-		case FORMAT_SRGB8_ALPHA8_ETC2_EAC:
-		case FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR:
-		case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
-			return FORMAT_A8R8G8B8;
-		case FORMAT_RGBA_ASTC_4x4_KHR:
-		case FORMAT_RGBA_ASTC_5x4_KHR:
-		case FORMAT_RGBA_ASTC_5x5_KHR:
-		case FORMAT_RGBA_ASTC_6x5_KHR:
-		case FORMAT_RGBA_ASTC_6x6_KHR:
-		case FORMAT_RGBA_ASTC_8x5_KHR:
-		case FORMAT_RGBA_ASTC_8x6_KHR:
-		case FORMAT_RGBA_ASTC_8x8_KHR:
-		case FORMAT_RGBA_ASTC_10x5_KHR:
-		case FORMAT_RGBA_ASTC_10x6_KHR:
-		case FORMAT_RGBA_ASTC_10x8_KHR:
-		case FORMAT_RGBA_ASTC_10x10_KHR:
-		case FORMAT_RGBA_ASTC_12x10_KHR:
-		case FORMAT_RGBA_ASTC_12x12_KHR:
+		case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
+		case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:
+			return VK_FORMAT_B8G8R8A8_UNORM;
+		case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:
+		case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:
 			// 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_R11_EAC:
-		case FORMAT_SIGNED_R11_EAC:
-			return FORMAT_R32F; // FIXME: Signed 8bit format would be sufficient
-		case FORMAT_RG11_EAC:
-		case FORMAT_SIGNED_RG11_EAC:
-			return FORMAT_G32R32F; // FIXME: Signed 8bit format would be sufficient
-		case FORMAT_RGB8_ETC2:
-		case FORMAT_SRGB8_ETC2:
-			return FORMAT_A8R8G8B8;
+			return VK_FORMAT_R32G32B32A32_SFLOAT; // FIXME: 16FP is probably sufficient, but it's currently unsupported
+		case VK_FORMAT_EAC_R11_UNORM_BLOCK:
+		case VK_FORMAT_EAC_R11_SNORM_BLOCK:
+			return VK_FORMAT_R32_SFLOAT; // FIXME: Signed 8bit format would be sufficient
+		case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:
+		case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:
+			return VK_FORMAT_R32G32_SFLOAT; // FIXME: Signed 8bit format would be sufficient
+		case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:
+		case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
+			return VK_FORMAT_B8G8R8A8_UNORM;
 		// Floating-point formats
-		case FORMAT_R16F:			return FORMAT_R32F;
-		case FORMAT_G16R16F:		return FORMAT_G32R32F;
-		case FORMAT_A16B16G16R16F:	return FORMAT_A32B32G32R32F;
-		case FORMAT_R32F:			return FORMAT_R32F;
-		case FORMAT_G32R32F:		return FORMAT_G32R32F;
-		case FORMAT_A32B32G32R32F:	return FORMAT_A32B32G32R32F;
+		case VK_FORMAT_R16_SFLOAT:			return VK_FORMAT_R32_SFLOAT;
+		case VK_FORMAT_R16G16_SFLOAT:		return VK_FORMAT_R32G32_SFLOAT;
+		case VK_FORMAT_R16G16B16A16_SFLOAT:	return VK_FORMAT_R32G32B32A32_SFLOAT;
+		case VK_FORMAT_R32_SFLOAT:			return VK_FORMAT_R32_SFLOAT;
+		case VK_FORMAT_R32G32_SFLOAT:		return VK_FORMAT_R32G32_SFLOAT;
+		case VK_FORMAT_R32G32B32A32_SFLOAT:	return VK_FORMAT_R32G32B32A32_SFLOAT;
 		// Depth/stencil formats
-		case FORMAT_D16:
-		case FORMAT_D24X8:
-			return FORMAT_D32F;
-		case FORMAT_D24S8:
-			return FORMAT_D32FS8;
-		case FORMAT_D32F:           return FORMAT_D32F;
-		case FORMAT_D32FS8:         return FORMAT_D32FS8;
-		case FORMAT_S8:             return FORMAT_S8;
+		case VK_FORMAT_D16_UNORM:
+		case VK_FORMAT_X8_D24_UNORM_PACK32:
+			return VK_FORMAT_D32_SFLOAT;
+		case VK_FORMAT_D24_UNORM_S8_UINT:
+			return VK_FORMAT_D32_SFLOAT_S8_UINT;
+		case VK_FORMAT_D32_SFLOAT:           return VK_FORMAT_D32_SFLOAT;
+		case VK_FORMAT_D32_SFLOAT_S8_UINT:         return VK_FORMAT_D32_SFLOAT_S8_UINT;
+		case VK_FORMAT_S8_UINT:             return VK_FORMAT_S8_UINT;
 		// YUV formats
-		case FORMAT_YV12_BT601:     return FORMAT_YV12_BT601;
-		case FORMAT_YV12_BT709:     return FORMAT_YV12_BT709;
-		case FORMAT_YV12_JFIF:      return FORMAT_YV12_JFIF;
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:      return VK_FORMAT_G8_B8R8_2PLANE_420_UNORM;
 		default:
 			ASSERT(false);
 		}
 
-		return FORMAT_NULL;
+		return VK_FORMAT_UNDEFINED;
 	}
 
 	void Surface::resolve()
 	{
-		if(internal.samples <= 1 || !internal.dirty || !renderTarget || internal.format == FORMAT_NULL)
+		if(internal.samples <= 1 || !internal.dirty || !renderTarget || internal.format == VK_FORMAT_UNDEFINED)
 		{
 			return;
 		}
@@ -2891,9 +2877,9 @@
 		unsigned char *sourceE = sourceD + slice;
 		unsigned char *sourceF = sourceE + slice;
 
-		if(internal.format == FORMAT_A8R8G8B8 ||
-		   internal.format == FORMAT_A8B8G8R8 ||
-		   internal.format == FORMAT_SRGB8_A8)
+		if(internal.format == VK_FORMAT_B8G8R8A8_UNORM ||
+		   internal.format == VK_FORMAT_R8G8B8A8_UNORM ||
+		   internal.format == VK_FORMAT_R8G8B8A8_SRGB)
 		{
 			#if defined(__i386__) || defined(__x86_64__)
 				if(CPUID::supportsSSE2() && (width % 4) == 0)
@@ -3186,7 +3172,7 @@
 				#undef AVERAGE
 			}
 		}
-		else if(internal.format == FORMAT_G16R16)
+		else if(internal.format == VK_FORMAT_R16G16_UNORM)
 		{
 
 			#if defined(__i386__) || defined(__x86_64__)
@@ -3480,7 +3466,7 @@
 				#undef AVERAGE
 			}
 		}
-		else if(internal.format == FORMAT_A16B16G16R16)
+		else if(internal.format == VK_FORMAT_R16G16B16A16_UNORM)
 		{
 			#if defined(__i386__) || defined(__x86_64__)
 				if(CPUID::supportsSSE2() && (width % 2) == 0)
@@ -3773,7 +3759,7 @@
 				#undef AVERAGE
 			}
 		}
-		else if(internal.format == FORMAT_R32F)
+		else if(internal.format == VK_FORMAT_R32_SFLOAT)
 		{
 			#if defined(__i386__) || defined(__x86_64__)
 				if(CPUID::supportsSSE() && (width % 4) == 0)
@@ -4070,7 +4056,7 @@
 				else ASSERT(false);
 			}
 		}
-		else if(internal.format == FORMAT_G32R32F)
+		else if(internal.format == VK_FORMAT_R32G32_SFLOAT)
 		{
 			#if defined(__i386__) || defined(__x86_64__)
 				if(CPUID::supportsSSE() && (width % 2) == 0)
@@ -4367,7 +4353,7 @@
 				else ASSERT(false);
 			}
 		}
-		else if(internal.format == FORMAT_A32B32G32R32F)
+		else if(internal.format == VK_FORMAT_R32G32B32A32_SFLOAT)
 		{
 			#if defined(__i386__) || defined(__x86_64__)
 				if(CPUID::supportsSSE())
@@ -4664,7 +4650,7 @@
 				else ASSERT(false);
 			}
 		}
-		else if(internal.format == FORMAT_R5G6B5)
+		else if(internal.format == VK_FORMAT_R5G6B5_UNORM_PACK16)
 		{
 			#if defined(__i386__) || defined(__x86_64__)
 				if(CPUID::supportsSSE2() && (width % 8) == 0)
diff --git a/src/Device/Surface.hpp b/src/Device/Surface.hpp
index 61e969d..19d0dd1 100644
--- a/src/Device/Surface.hpp
+++ b/src/Device/Surface.hpp
@@ -61,250 +61,6 @@
 	typedef SliceRectT<int> SliceRect;
 	typedef SliceRectT<float> SliceRectF;
 
-	enum Format : unsigned char
-	{
-		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
-
-		// 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 = 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
-	};
-
 	enum Lock
 	{
 		LOCK_UNLOCKED,
@@ -348,19 +104,19 @@
 			int sliceB;
 			int sliceP;
 
-			Format format;
+			VkFormat format;
 			AtomicInt lock;
 
 			bool dirty;   // Sibling internal/external buffer doesn't match.
 		};
 
 	protected:
-		Surface(int width, int height, int depth, Format format, void *pixels, int pitch, int slice);
-		Surface(Resource *texture, int width, int height, int depth, int border, int samples, Format format, bool lockable, bool renderTarget, int pitchP = 0);
+		Surface(int width, int height, int depth, VkFormat format, void *pixels, int pitch, int slice);
+		Surface(Resource *texture, int width, int height, int depth, int border, int samples, VkFormat format, bool lockable, bool renderTarget, int pitchP = 0);
 
 	public:
-		static Surface *create(int width, int height, int depth, Format format, void *pixels, int pitch, int slice);
-		static Surface *create(Resource *texture, int width, int height, int depth, int border, int samples, Format format, bool lockable, bool renderTarget, int pitchP = 0);
+		static Surface *create(int width, int height, int depth, VkFormat format, void *pixels, int pitch, int slice);
+		static Surface *create(Resource *texture, int width, int height, int depth, int border, int samples, VkFormat format, bool lockable, bool renderTarget, int pitchP = 0);
 
 		virtual ~Surface() = 0;
 
@@ -370,7 +126,7 @@
 		inline int getHeight() const;
 		inline int getDepth() const;
 		inline int getBorder() const;
-		inline Format getFormat(bool internal = false) const;
+		inline VkFormat getFormat(bool internal = false) const;
 		inline int getPitchB(bool internal = false) const;
 		inline int getPitchP(bool internal = false) const;
 		inline int getSliceB(bool internal = false) const;
@@ -378,7 +134,7 @@
 
 		void *lockExternal(int x, int y, int z, Lock lock, Accessor client);
 		void unlockExternal();
-		inline Format getExternalFormat() const;
+		inline VkFormat getExternalFormat() const;
 		inline int getExternalPitchB() const;
 		inline int getExternalPitchP() const;
 		inline int getExternalSliceB() const;
@@ -386,7 +142,7 @@
 
 		virtual void *lockInternal(int x, int y, int z, Lock lock, Accessor client) = 0;
 		virtual void unlockInternal() = 0;
-		inline Format getInternalFormat() const;
+		inline VkFormat getInternalFormat() const;
 		inline int getInternalPitchB() const;
 		inline int getInternalPitchP() const;
 		inline int getInternalSliceB() const;
@@ -394,7 +150,7 @@
 
 		void *lockStencil(int x, int y, int front, Accessor client);
 		void unlockStencil();
-		inline Format getStencilFormat() const;
+		inline VkFormat getStencilFormat() const;
 		inline int getStencilPitchB() const;
 		inline int getStencilSliceB() const;
 
@@ -435,28 +191,28 @@
 		inline bool isExternalDirty() const;
 		Resource *getResource();
 
-		static int bytes(Format format);
-		static int pitchB(int width, int border, Format format, bool target);
-		static int pitchP(int width, int border, Format format, bool target);
-		static int sliceB(int width, int height, int border, Format format, bool target);
-		static int sliceP(int width, int height, int border, Format format, bool target);
-		static size_t size(int width, int height, int depth, int border, int samples, Format format);
+		static int bytes(VkFormat format);
+		static int pitchB(int width, int border, VkFormat format, bool target);
+		static int pitchP(int width, int border, VkFormat format, bool target);
+		static int sliceB(int width, int height, int border, VkFormat format, bool target);
+		static int sliceP(int width, int height, int border, VkFormat format, bool target);
+		static size_t size(int width, int height, int depth, int border, int samples, VkFormat format);
 
-		static bool isStencil(Format format);
-		static bool isDepth(Format format);
-		static bool hasQuadLayout(Format format);
+		static bool isStencil(VkFormat format);
+		static bool isDepth(VkFormat format);
+		static bool hasQuadLayout(VkFormat format);
 
-		static bool isFloatFormat(Format format);
-		static bool isUnsignedComponent(Format format, int component);
-		static bool isSRGBreadable(Format format);
-		static bool isSRGBwritable(Format format);
-		static bool isSRGBformat(Format format);
-		static bool isCompressed(Format format);
-		static bool isSignedNonNormalizedInteger(Format format);
-		static bool isUnsignedNonNormalizedInteger(Format format);
-		static bool isNonNormalizedInteger(Format format);
-		static bool isNormalizedInteger(Format format);
-		static int componentCount(Format format);
+		static bool isFloatFormat(VkFormat format);
+		static bool isUnsignedComponent(VkFormat format, int component);
+		static bool isSRGBreadable(VkFormat format);
+		static bool isSRGBwritable(VkFormat format);
+		static bool isSRGBformat(VkFormat format);
+		static bool isCompressed(VkFormat format);
+		static bool isSignedNonNormalizedInteger(VkFormat format);
+		static bool isUnsignedNonNormalizedInteger(VkFormat format);
+		static bool isNonNormalizedInteger(VkFormat format);
+		static bool isNormalizedInteger(VkFormat format);
+		static int componentCount(VkFormat format);
 
 	private:
 		sw::Resource *resource;
@@ -550,11 +306,11 @@
 
 		static void update(Buffer &destination, Buffer &source);
 		static void genericUpdate(Buffer &destination, Buffer &source);
-		static void *allocateBuffer(int width, int height, int depth, int border, int samples, Format format);
+		static void *allocateBuffer(int width, int height, int depth, int border, int samples, VkFormat format);
 		static void memfill4(void *buffer, int pattern, int bytes);
 
 		bool identicalBuffers() const;
-		Format selectInternalFormat(Format format) const;
+		VkFormat selectInternalFormat(VkFormat format) const;
 
 		void resolve();
 
@@ -607,7 +363,7 @@
 		return internal.border;
 	}
 
-	Format Surface::getFormat(bool internal) const
+	VkFormat Surface::getFormat(bool internal) const
 	{
 		return internal ? getInternalFormat() : getExternalFormat();
 	}
@@ -632,7 +388,7 @@
 		return internal ? getInternalSliceP() : getExternalSliceP();
 	}
 
-	Format Surface::getExternalFormat() const
+	VkFormat Surface::getExternalFormat() const
 	{
 		return external.format;
 	}
@@ -657,7 +413,7 @@
 		return external.sliceP;
 	}
 
-	Format Surface::getInternalFormat() const
+	VkFormat Surface::getInternalFormat() const
 	{
 		return internal.format;
 	}
@@ -682,7 +438,7 @@
 		return internal.sliceP;
 	}
 
-	Format Surface::getStencilFormat() const
+	VkFormat Surface::getStencilFormat() const
 	{
 		return stencil.format;
 	}
diff --git a/src/Pipeline/PixelProgram.cpp b/src/Pipeline/PixelProgram.cpp
index 7137a7d..df99196 100644
--- a/src/Pipeline/PixelProgram.cpp
+++ b/src/Pipeline/PixelProgram.cpp
@@ -78,7 +78,7 @@
 
 		for(int i = 0; i < RENDERTARGETS; i++)
 		{
-			if(state.targetFormat[i] != FORMAT_NULL)
+			if(state.targetFormat[i] != VK_FORMAT_UNDEFINED)
 			{
 				oC[i] = Vector4f(0.0f, 0.0f, 0.0f, 0.0f);
 			}
@@ -629,20 +629,20 @@
 
 			switch(state.targetFormat[index])
 			{
-			case FORMAT_R5G6B5:
-			case FORMAT_A8R8G8B8:
-			case FORMAT_A8B8G8R8:
-			case FORMAT_SRGB8_A8:
-			case FORMAT_G8R8:
-			case FORMAT_R8:
-			case FORMAT_G16R16:
-			case FORMAT_A16B16G16R16:
+			case VK_FORMAT_R5G6B5_UNORM_PACK16:
+			case VK_FORMAT_B8G8R8A8_UNORM:
+			case VK_FORMAT_R8G8B8A8_UNORM:
+			case VK_FORMAT_R8G8B8A8_SRGB:
+			case VK_FORMAT_R8G8_UNORM:
+			case VK_FORMAT_R8_UNORM:
+			case VK_FORMAT_R16G16_UNORM:
+			case VK_FORMAT_R16G16B16A16_UNORM:
 				for(unsigned int q = 0; q < state.multiSample; q++)
 				{
 					Pointer<Byte> buffer = cBuffer[index] + q * *Pointer<Int>(data + OFFSET(DrawData, colorSliceB[index]));
 					Vector4s color;
 
-					if(state.targetFormat[index] == FORMAT_R5G6B5)
+					if(state.targetFormat[index] == VK_FORMAT_R5G6B5_UNORM_PACK16)
 					{
 						color.x = UShort4(c[index].x * Float4(0xFBFF), false);
 						color.y = UShort4(c[index].y * Float4(0xFDFF), false);
@@ -665,27 +665,27 @@
 					}
 				}
 				break;
-			case FORMAT_R32F:
-			case FORMAT_G32R32F:
-			case FORMAT_A32B32G32R32F:
-			case FORMAT_R32I:
-			case FORMAT_G32R32I:
-			case FORMAT_A32B32G32R32I:
-			case FORMAT_R32UI:
-			case FORMAT_G32R32UI:
-			case FORMAT_A32B32G32R32UI:
-			case FORMAT_R16I:
-			case FORMAT_G16R16I:
-			case FORMAT_A16B16G16R16I:
-			case FORMAT_R16UI:
-			case FORMAT_G16R16UI:
-			case FORMAT_A16B16G16R16UI:
-			case FORMAT_R8I:
-			case FORMAT_G8R8I:
-			case FORMAT_A8B8G8R8I:
-			case FORMAT_R8UI:
-			case FORMAT_G8R8UI:
-			case FORMAT_A8B8G8R8UI:
+			case VK_FORMAT_R32_SFLOAT:
+			case VK_FORMAT_R32G32_SFLOAT:
+			case VK_FORMAT_R32G32B32A32_SFLOAT:
+			case VK_FORMAT_R32_SINT:
+			case VK_FORMAT_R32G32_SINT:
+			case VK_FORMAT_R32G32B32A32_SINT:
+			case VK_FORMAT_R32_UINT:
+			case VK_FORMAT_R32G32_UINT:
+			case VK_FORMAT_R32G32B32A32_UINT:
+			case VK_FORMAT_R16_SINT:
+			case VK_FORMAT_R16G16_SINT:
+			case VK_FORMAT_R16G16B16A16_SINT:
+			case VK_FORMAT_R16_UINT:
+			case VK_FORMAT_R16G16_UINT:
+			case VK_FORMAT_R16G16B16A16_UINT:
+			case VK_FORMAT_R8_SINT:
+			case VK_FORMAT_R8G8_SINT:
+			case VK_FORMAT_R8G8B8A8_SINT:
+			case VK_FORMAT_R8_UINT:
+			case VK_FORMAT_R8G8_UINT:
+			case VK_FORMAT_R8G8B8A8_UINT:
 				for(unsigned int q = 0; q < state.multiSample; q++)
 				{
 					Pointer<Byte> buffer = cBuffer[index] + q * *Pointer<Int>(data + OFFSET(DrawData, colorSliceB[index]));
@@ -765,42 +765,42 @@
 
 			switch(state.targetFormat[index])
 			{
-			case FORMAT_NULL:
+			case VK_FORMAT_UNDEFINED:
 				break;
-			case FORMAT_R5G6B5:
-			case FORMAT_A8R8G8B8:
-			case FORMAT_A8B8G8R8:
-			case FORMAT_SRGB8_A8:
-			case FORMAT_G8R8:
-			case FORMAT_R8:
-			case FORMAT_G16R16:
-			case FORMAT_A16B16G16R16:
+			case VK_FORMAT_R5G6B5_UNORM_PACK16:
+			case VK_FORMAT_B8G8R8A8_UNORM:
+			case VK_FORMAT_R8G8B8A8_UNORM:
+			case VK_FORMAT_R8G8B8A8_SRGB:
+			case VK_FORMAT_R8G8_UNORM:
+			case VK_FORMAT_R8_UNORM:
+			case VK_FORMAT_R16G16_UNORM:
+			case VK_FORMAT_R16G16B16A16_UNORM:
 				oC[index].x = Max(oC[index].x, Float4(0.0f)); oC[index].x = Min(oC[index].x, Float4(1.0f));
 				oC[index].y = Max(oC[index].y, Float4(0.0f)); oC[index].y = Min(oC[index].y, Float4(1.0f));
 				oC[index].z = Max(oC[index].z, Float4(0.0f)); oC[index].z = Min(oC[index].z, Float4(1.0f));
 				oC[index].w = Max(oC[index].w, Float4(0.0f)); oC[index].w = Min(oC[index].w, Float4(1.0f));
 				break;
-			case FORMAT_R32F:
-			case FORMAT_G32R32F:
-			case FORMAT_A32B32G32R32F:
-			case FORMAT_R32I:
-			case FORMAT_G32R32I:
-			case FORMAT_A32B32G32R32I:
-			case FORMAT_R32UI:
-			case FORMAT_G32R32UI:
-			case FORMAT_A32B32G32R32UI:
-			case FORMAT_R16I:
-			case FORMAT_G16R16I:
-			case FORMAT_A16B16G16R16I:
-			case FORMAT_R16UI:
-			case FORMAT_G16R16UI:
-			case FORMAT_A16B16G16R16UI:
-			case FORMAT_R8I:
-			case FORMAT_G8R8I:
-			case FORMAT_A8B8G8R8I:
-			case FORMAT_R8UI:
-			case FORMAT_G8R8UI:
-			case FORMAT_A8B8G8R8UI:
+			case VK_FORMAT_R32_SFLOAT:
+			case VK_FORMAT_R32G32_SFLOAT:
+			case VK_FORMAT_R32G32B32A32_SFLOAT:
+			case VK_FORMAT_R32_SINT:
+			case VK_FORMAT_R32G32_SINT:
+			case VK_FORMAT_R32G32B32A32_SINT:
+			case VK_FORMAT_R32_UINT:
+			case VK_FORMAT_R32G32_UINT:
+			case VK_FORMAT_R32G32B32A32_UINT:
+			case VK_FORMAT_R16_SINT:
+			case VK_FORMAT_R16G16_SINT:
+			case VK_FORMAT_R16G16B16A16_SINT:
+			case VK_FORMAT_R16_UINT:
+			case VK_FORMAT_R16G16_UINT:
+			case VK_FORMAT_R16G16B16A16_UINT:
+			case VK_FORMAT_R8_SINT:
+			case VK_FORMAT_R8G8_SINT:
+			case VK_FORMAT_R8G8B8A8_SINT:
+			case VK_FORMAT_R8_UINT:
+			case VK_FORMAT_R8G8_UINT:
+			case VK_FORMAT_R8G8B8A8_UINT:
 				break;
 			default:
 				ASSERT(false);
diff --git a/src/Pipeline/PixelRoutine.cpp b/src/Pipeline/PixelRoutine.cpp
index 0519735..4a989a8 100644
--- a/src/Pipeline/PixelRoutine.cpp
+++ b/src/Pipeline/PixelRoutine.cpp
@@ -931,7 +931,7 @@
 
 		switch(state.targetFormat[index])
 		{
-		case FORMAT_R5G6B5:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
 			buffer = cBuffer + 2 * x;
 			buffer2 = buffer + *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
 			c01 = As<Short4>(Int2(*Pointer<Int>(buffer), *Pointer<Int>(buffer2)));
@@ -941,7 +941,7 @@
 			pixel.z = (c01 & Short4(0x001Fu)) << 11;
 			pixel.w = Short4(0xFFFFu);
 			break;
-		case FORMAT_A8R8G8B8:
+		case VK_FORMAT_B8G8R8A8_UNORM:
 			buffer = cBuffer + 4 * x;
 			c01 = *Pointer<Short4>(buffer);
 			buffer += *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
@@ -960,8 +960,8 @@
 			pixel.z = UnpackLow(As<Byte8>(pixel.z), As<Byte8>(pixel.z));
 			pixel.w = UnpackHigh(As<Byte8>(pixel.w), As<Byte8>(pixel.w));
 			break;
-		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
 			buffer = cBuffer + 4 * x;
 			c01 = *Pointer<Short4>(buffer);
 			buffer += *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
@@ -980,7 +980,7 @@
 			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_R8:
+		case VK_FORMAT_R8_UNORM:
 			buffer = cBuffer + 1 * x;
 			pixel.x = Insert(pixel.x, *Pointer<Short>(buffer), 0);
 			buffer += *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
@@ -990,7 +990,7 @@
 			pixel.z = Short4(0x0000);
 			pixel.w = Short4(0xFFFFu);
 			break;
-		case FORMAT_G8R8:
+		case VK_FORMAT_R8G8_UNORM:
 			buffer = cBuffer + 2 * x;
 			c01 = As<Short4>(Insert(As<Int2>(c01), *Pointer<Int>(buffer), 0));
 			buffer += *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
@@ -1000,7 +1000,7 @@
 			pixel.z = Short4(0x0000u);
 			pixel.w = Short4(0xFFFFu);
 			break;
-		case FORMAT_A16B16G16R16:
+		case VK_FORMAT_R16G16B16A16_UNORM:
 			buffer = cBuffer;
 			pixel.x = *Pointer<Short4>(buffer + 8 * x);
 			pixel.y = *Pointer<Short4>(buffer + 8 * x + 8);
@@ -1009,7 +1009,7 @@
 			pixel.w = *Pointer<Short4>(buffer + 8 * x + 8);
 			transpose4x4(pixel.x, pixel.y, pixel.z, pixel.w);
 			break;
-		case FORMAT_G16R16:
+		case VK_FORMAT_R16G16_UNORM:
 			buffer = cBuffer;
 			pixel.x = *Pointer<Short4>(buffer + 4 * x);
 			buffer += *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
@@ -1258,16 +1258,16 @@
 		{
 			switch(state.targetFormat[index])
 			{
-			case FORMAT_R5G6B5:
+			case VK_FORMAT_R5G6B5_UNORM_PACK16:
 				current.x = AddSat(As<UShort4>(current.x), UShort4(0x0400));
 				current.y = AddSat(As<UShort4>(current.y), UShort4(0x0200));
 				current.z = AddSat(As<UShort4>(current.z), UShort4(0x0400));
 				break;
-			case FORMAT_A8R8G8B8:
-			case FORMAT_A8B8G8R8:
-			case FORMAT_SRGB8_A8:
-			case FORMAT_G8R8:
-			case FORMAT_R8:
+			case VK_FORMAT_B8G8R8A8_UNORM:
+			case VK_FORMAT_R8G8B8A8_UNORM:
+			case VK_FORMAT_R8G8B8A8_SRGB:
+			case VK_FORMAT_R8G8_UNORM:
+			case VK_FORMAT_R8_UNORM:
 				current.x = current.x - As<Short4>(As<UShort4>(current.x) >> 8) + Short4(0x0080);
 				current.y = current.y - As<Short4>(As<UShort4>(current.y) >> 8) + Short4(0x0080);
 				current.z = current.z - As<Short4>(As<UShort4>(current.z) >> 8) + Short4(0x0080);
@@ -1283,7 +1283,7 @@
 
 		switch(state.targetFormat[index])
 		{
-		case FORMAT_R5G6B5:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
 			{
 				current.x = current.x & Short4(0xF800u);
 				current.y = As<UShort4>(current.y & Short4(0xFC00u)) >> 5;
@@ -1292,7 +1292,7 @@
 				current.x = current.x | current.y | current.z;
 			}
 			break;
-		case FORMAT_A8R8G8B8:
+		case VK_FORMAT_B8G8R8A8_UNORM:
 			if(rgbaWriteMask == 0x7)
 			{
 				current.x = As<Short4>(As<UShort4>(current.x) >> 8);
@@ -1327,8 +1327,8 @@
 				current.y = As<Short4>(UnpackHigh(current.y, current.x));
 			}
 			break;
-		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
 			if(rgbaWriteMask == 0x7)
 			{
 				current.x = As<Short4>(As<UShort4>(current.x) >> 8);
@@ -1363,24 +1363,24 @@
 				current.y = As<Short4>(UnpackHigh(current.y, current.x));
 			}
 			break;
-		case FORMAT_G8R8:
+		case VK_FORMAT_R8G8_UNORM:
 			current.x = As<Short4>(As<UShort4>(current.x) >> 8);
 			current.y = As<Short4>(As<UShort4>(current.y) >> 8);
 			current.x = As<Short4>(PackUnsigned(current.x, current.x));
 			current.y = As<Short4>(PackUnsigned(current.y, current.y));
 			current.x = UnpackLow(As<Byte8>(current.x), As<Byte8>(current.y));
 			break;
-		case FORMAT_R8:
+		case VK_FORMAT_R8_UNORM:
 			current.x = As<Short4>(As<UShort4>(current.x) >> 8);
 			current.x = As<Short4>(PackUnsigned(current.x, current.x));
 			break;
-		case FORMAT_G16R16:
+		case VK_FORMAT_R16G16_UNORM:
 			current.z = current.x;
 			current.x = As<Short4>(UnpackLow(current.x, current.y));
 			current.z = As<Short4>(UnpackHigh(current.z, current.y));
 			current.y = current.z;
 			break;
-		case FORMAT_A16B16G16R16:
+		case VK_FORMAT_R16G16B16A16_UNORM:
 			transpose4x4(current.x, current.y, current.z, current.w);
 			break;
 		default:
@@ -1408,7 +1408,7 @@
 
 		switch(state.targetFormat[index])
 		{
-		case FORMAT_R5G6B5:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
 			{
 				Pointer<Byte> buffer = cBuffer + 2 * x;
 				Int value = *Pointer<Int>(buffer);
@@ -1447,12 +1447,12 @@
 				*Pointer<Int>(buffer) = c23;
 			}
 			break;
-		case FORMAT_A8R8G8B8:
+		case VK_FORMAT_B8G8R8A8_UNORM:
 			{
 				Pointer<Byte> buffer = cBuffer + x * 4;
 				Short4 value = *Pointer<Short4>(buffer);
 
-				if(state.targetFormat[index] == FORMAT_A8R8G8B8 && bgraWriteMask != 0x0000000F)   // FIXME: Need for masking when XRGB && Fh?
+				if(state.targetFormat[index] == VK_FORMAT_B8G8R8A8_UNORM && bgraWriteMask != 0x0000000F)   // FIXME: Need for masking when XRGB && Fh?
 				{
 					Short4 masked = value;
 					c01 &= *Pointer<Short4>(constants + OFFSET(Constants,maskB4Q[bgraWriteMask][0]));
@@ -1468,7 +1468,7 @@
 				buffer += *Pointer<Int>(data + OFFSET(DrawData,colorPitchB[index]));
 				value = *Pointer<Short4>(buffer);
 
-				if(state.targetFormat[index] == FORMAT_A8R8G8B8 && bgraWriteMask != 0x0000000F)   // FIXME: Need for masking when XRGB && Fh?
+				if(state.targetFormat[index] == VK_FORMAT_B8G8R8A8_UNORM && bgraWriteMask != 0x0000000F)   // FIXME: Need for masking when XRGB && Fh?
 				{
 					Short4 masked = value;
 					c23 &= *Pointer<Short4>(constants + OFFSET(Constants,maskB4Q[bgraWriteMask][0]));
@@ -1482,13 +1482,13 @@
 				*Pointer<Short4>(buffer) = c23;
 			}
 			break;
-		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
 			{
 				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); // FIXME: Need for masking when XBGR && Fh?
+				bool masked = ((state.targetFormat[index] == VK_FORMAT_R8G8B8A8_UNORM || state.targetFormat[index] == VK_FORMAT_R8G8B8A8_SRGB) && rgbaWriteMask != 0x0000000F); // FIXME: Need for masking when XBGR && Fh?
 
 				if(masked)
 				{
@@ -1520,7 +1520,7 @@
 				*Pointer<Short4>(buffer) = c23;
 			}
 			break;
-		case FORMAT_G8R8:
+		case VK_FORMAT_R8G8_UNORM:
 			if((rgbaWriteMask & 0x00000003) != 0x0)
 			{
 				Pointer<Byte> buffer = cBuffer + 2 * x;
@@ -1545,7 +1545,7 @@
 				*Pointer<UInt>(buffer + pitch) = As<UInt>(Extract(packedCol, 1));
 			}
 			break;
-		case FORMAT_R8:
+		case VK_FORMAT_R8_UNORM:
 			if(rgbaWriteMask & 0x00000001)
 			{
 				Pointer<Byte> buffer = cBuffer + 1 * x;
@@ -1562,7 +1562,7 @@
 				*Pointer<Short>(buffer + pitch) = Extract(current.x, 1);
 			}
 			break;
-		case FORMAT_G16R16:
+		case VK_FORMAT_R16G16_UNORM:
 			{
 				Pointer<Byte> buffer = cBuffer + 4 * x;
 
@@ -1599,7 +1599,7 @@
 				*Pointer<Short4>(buffer) = current.y;
 			}
 			break;
-		case FORMAT_A16B16G16R16:
+		case VK_FORMAT_R16G16B16A16_UNORM:
 			{
 				Pointer<Byte> buffer = cBuffer + 8 * x;
 
@@ -1824,9 +1824,9 @@
 
 		switch(state.targetFormat[index])
 		{
-		case FORMAT_R32I:
-		case FORMAT_R32UI:
-		case FORMAT_R32F:
+		case VK_FORMAT_R32_SINT:
+		case VK_FORMAT_R32_UINT:
+		case VK_FORMAT_R32_SFLOAT:
 			buffer = cBuffer;
 			// FIXME: movlps
 			pixel.x.x = *Pointer<Float>(buffer + 4 * x + 0);
@@ -1837,9 +1837,9 @@
 			pixel.x.w = *Pointer<Float>(buffer + 4 * x + 4);
 			pixel.y = pixel.z = pixel.w = one;
 			break;
-		case FORMAT_G32R32I:
-		case FORMAT_G32R32UI:
-		case FORMAT_G32R32F:
+		case VK_FORMAT_R32G32_SINT:
+		case VK_FORMAT_R32G32_UINT:
+		case VK_FORMAT_R32G32_SFLOAT:
 			buffer = cBuffer;
 			pixel.x = *Pointer<Float4>(buffer + 8 * x, 16);
 			buffer += *Pointer<Int>(data + OFFSET(DrawData,colorPitchB[index]));
@@ -1850,9 +1850,9 @@
 			pixel.y = pixel.z;
 			pixel.z = pixel.w = one;
 			break;
-		case FORMAT_A32B32G32R32F:
-		case FORMAT_A32B32G32R32I:
-		case FORMAT_A32B32G32R32UI:
+		case VK_FORMAT_R32G32B32A32_SFLOAT:
+		case VK_FORMAT_R32G32B32A32_SINT:
+		case VK_FORMAT_R32G32B32A32_UINT:
 			buffer = cBuffer;
 			pixel.x = *Pointer<Float4>(buffer + 16 * x, 16);
 			pixel.y = *Pointer<Float4>(buffer + 16 * x + 16, 16);
@@ -1986,33 +1986,33 @@
 	{
 		switch(state.targetFormat[index])
 		{
-		case FORMAT_R32F:
-		case FORMAT_R32I:
-		case FORMAT_R32UI:
-		case FORMAT_R16I:
-		case FORMAT_R16UI:
-		case FORMAT_R8I:
-		case FORMAT_R8UI:
+		case VK_FORMAT_R32_SFLOAT:
+		case VK_FORMAT_R32_SINT:
+		case VK_FORMAT_R32_UINT:
+		case VK_FORMAT_R16_SINT:
+		case VK_FORMAT_R16_UINT:
+		case VK_FORMAT_R8_SINT:
+		case VK_FORMAT_R8_UINT:
 			break;
-		case FORMAT_G32R32F:
-		case FORMAT_G32R32I:
-		case FORMAT_G32R32UI:
-		case FORMAT_G16R16I:
-		case FORMAT_G16R16UI:
-		case FORMAT_G8R8I:
-		case FORMAT_G8R8UI:
+		case VK_FORMAT_R32G32_SFLOAT:
+		case VK_FORMAT_R32G32_SINT:
+		case VK_FORMAT_R32G32_UINT:
+		case VK_FORMAT_R16G16_SINT:
+		case VK_FORMAT_R16G16_UINT:
+		case VK_FORMAT_R8G8_SINT:
+		case VK_FORMAT_R8G8_UINT:
 			oC.z = oC.x;
 			oC.x = UnpackLow(oC.x, oC.y);
 			oC.z = UnpackHigh(oC.z, oC.y);
 			oC.y = oC.z;
 			break;
-		case FORMAT_A32B32G32R32F:
-		case FORMAT_A32B32G32R32I:
-		case FORMAT_A32B32G32R32UI:
-		case FORMAT_A16B16G16R16I:
-		case FORMAT_A16B16G16R16UI:
-		case FORMAT_A8B8G8R8I:
-		case FORMAT_A8B8G8R8UI:
+		case VK_FORMAT_R32G32B32A32_SFLOAT:
+		case VK_FORMAT_R32G32B32A32_SINT:
+		case VK_FORMAT_R32G32B32A32_UINT:
+		case VK_FORMAT_R16G16B16A16_SINT:
+		case VK_FORMAT_R16G16B16A16_UINT:
+		case VK_FORMAT_R8G8B8A8_SINT:
+		case VK_FORMAT_R8G8B8A8_UINT:
 			transpose4x4(oC.x, oC.y, oC.z, oC.w);
 			break;
 		default:
@@ -2042,9 +2042,9 @@
 
 		switch(state.targetFormat[index])
 		{
-		case FORMAT_R32F:
-		case FORMAT_R32I:
-		case FORMAT_R32UI:
+		case VK_FORMAT_R32_SFLOAT:
+		case VK_FORMAT_R32_SINT:
+		case VK_FORMAT_R32_UINT:
 			if(rgbaWriteMask & 0x00000001)
 			{
 				buffer = cBuffer + 4 * x;
@@ -2074,8 +2074,8 @@
 				*Pointer<Float>(buffer + 4) = oC.x.y;
 			}
 			break;
-		case FORMAT_R16I:
-		case FORMAT_R16UI:
+		case VK_FORMAT_R16_SINT:
+		case VK_FORMAT_R16_UINT:
 			if(rgbaWriteMask & 0x00000001)
 			{
 				buffer = cBuffer + 2 * x;
@@ -2092,7 +2092,7 @@
 				value = As<Float4>(As<Int4>(value) & *Pointer<Int4>(constants + OFFSET(Constants, invMaskD4X) + xMask * 16, 16));
 				oC.x = As<Float4>(As<Int4>(oC.x) | As<Int4>(value));
 
-				if(state.targetFormat[index] == FORMAT_R16I)
+				if(state.targetFormat[index] == VK_FORMAT_R16_SINT)
 				{
 					Float component = oC.x.z;
 					*Pointer<Short>(buffer + 0) = Short(As<Int>(component));
@@ -2106,7 +2106,7 @@
 					component = oC.x.y;
 					*Pointer<Short>(buffer + 2) = Short(As<Int>(component));
 				}
-				else // FORMAT_R16UI
+				else // VK_FORMAT_R16_UINT
 				{
 					Float component = oC.x.z;
 					*Pointer<UShort>(buffer + 0) = UShort(As<Int>(component));
@@ -2122,8 +2122,8 @@
 				}
 			}
 			break;
-		case FORMAT_R8I:
-		case FORMAT_R8UI:
+		case VK_FORMAT_R8_SINT:
+		case VK_FORMAT_R8_UINT:
 			if(rgbaWriteMask & 0x00000001)
 			{
 				buffer = cBuffer + x;
@@ -2135,7 +2135,7 @@
 				xyzw |= UInt(*Pointer<UShort>(buffer)) << 16;
 
 				Short4 tmpCol = Short4(As<Int4>(oC.x));
-				if(state.targetFormat[index] == FORMAT_R8I)
+				if(state.targetFormat[index] == VK_FORMAT_R8_SINT)
 				{
 					tmpCol = As<Short4>(PackSigned(tmpCol, tmpCol));
 				}
@@ -2153,9 +2153,9 @@
 				*Pointer<UShort>(buffer) = UShort(packedCol);
 			}
 			break;
-		case FORMAT_G32R32F:
-		case FORMAT_G32R32I:
-		case FORMAT_G32R32UI:
+		case VK_FORMAT_R32G32_SFLOAT:
+		case VK_FORMAT_R32G32_SINT:
+		case VK_FORMAT_R32G32_UINT:
 			buffer = cBuffer + 8 * x;
 
 			value = *Pointer<Float4>(buffer);
@@ -2192,8 +2192,8 @@
 			oC.y = As<Float4>(As<Int4>(oC.y) | As<Int4>(value));
 			*Pointer<Float4>(buffer) = oC.y;
 			break;
-		case FORMAT_G16R16I:
-		case FORMAT_G16R16UI:
+		case VK_FORMAT_R16G16_SINT:
+		case VK_FORMAT_R16G16_UINT:
 			if((rgbaWriteMask & 0x00000003) != 0x0)
 			{
 				buffer = cBuffer + 4 * x;
@@ -2222,8 +2222,8 @@
 				*Pointer<UInt2>(buffer) = (As<UInt2>(packedCol) & mergedMask) | (As<UInt2>(value) & ~mergedMask);
 			}
 			break;
-		case FORMAT_G8R8I:
-		case FORMAT_G8R8UI:
+		case VK_FORMAT_R8G8_SINT:
+		case VK_FORMAT_R8G8_UINT:
 			if((rgbaWriteMask & 0x00000003) != 0x0)
 			{
 				buffer = cBuffer + 2 * x;
@@ -2234,7 +2234,7 @@
 				buffer += *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
 				xyzw = Insert(xyzw, *Pointer<Int>(buffer), 1);
 
-				if(state.targetFormat[index] == FORMAT_G8R8I)
+				if(state.targetFormat[index] == VK_FORMAT_R8G8_SINT)
 				{
 					packedCol = As<Int2>(PackSigned(Short4(As<Int4>(oC.x)), Short4(As<Int4>(oC.y))));
 				}
@@ -2258,9 +2258,9 @@
 				*Pointer<UInt>(buffer) = As<UInt>(Extract(packedCol, 0));
 			}
 			break;
-		case FORMAT_A32B32G32R32F:
-		case FORMAT_A32B32G32R32I:
-		case FORMAT_A32B32G32R32UI:
+		case VK_FORMAT_R32G32B32A32_SFLOAT:
+		case VK_FORMAT_R32G32B32A32_SINT:
+		case VK_FORMAT_R32G32B32A32_UINT:
 			buffer = cBuffer + 16 * x;
 
 			{
@@ -2333,8 +2333,8 @@
 				*Pointer<Float4>(buffer + 16, 16) = oC.w;
 			}
 			break;
-		case FORMAT_A16B16G16R16I:
-		case FORMAT_A16B16G16R16UI:
+		case VK_FORMAT_R16G16B16A16_SINT:
+		case VK_FORMAT_R16G16B16A16_UINT:
 			if((rgbaWriteMask & 0x0000000F) != 0x0)
 			{
 				buffer = cBuffer + 8 * x;
@@ -2363,15 +2363,15 @@
 				*Pointer<UInt4>(buffer) = (As<UInt4>(packedCol) & mergedMask) | (As<UInt4>(value) & ~mergedMask);
 			}
 			break;
-		case FORMAT_A8B8G8R8I:
-		case FORMAT_A8B8G8R8UI:
+		case VK_FORMAT_R8G8B8A8_SINT:
+		case VK_FORMAT_R8G8B8A8_UINT:
 			if((rgbaWriteMask & 0x0000000F) != 0x0)
 			{
 				UInt2 value, packedCol, mergedMask;
 
 				buffer = cBuffer + 4 * x;
 
-				if(state.targetFormat[index] == FORMAT_A8B8G8R8I)
+				if(state.targetFormat[index] == VK_FORMAT_R8G8B8A8_SINT)
 				{
 					packedCol = As<UInt2>(PackSigned(Short4(As<Int4>(oC.x)), Short4(As<Int4>(oC.y))));
 				}
@@ -2389,7 +2389,7 @@
 
 				buffer += *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
 
-				if(state.targetFormat[index] == FORMAT_A8B8G8R8I)
+				if(state.targetFormat[index] == VK_FORMAT_R8G8B8A8_SINT)
 				{
 					packedCol = As<UInt2>(PackSigned(Short4(As<Int4>(oC.z)), Short4(As<Int4>(oC.w))));
 				}
diff --git a/src/Pipeline/SamplerCore.cpp b/src/Pipeline/SamplerCore.cpp
index 0b49d4e..ced6c2f 100644
--- a/src/Pipeline/SamplerCore.cpp
+++ b/src/Pipeline/SamplerCore.cpp
@@ -135,7 +135,7 @@
 			{
 				if(!hasFloatTexture())
 				{
-					if(state.textureFormat == FORMAT_R5G6B5)
+					if(state.textureFormat == VK_FORMAT_R5G6B5_UNORM_PACK16)
 					{
 						c.x = MulHigh(As<UShort4>(c.x), UShort4(0x10000000 / 0xF800));
 						c.y = MulHigh(As<UShort4>(c.y), UShort4(0x10000000 / 0xFC00));
@@ -164,48 +164,46 @@
 
 					switch(state.textureFormat)
 					{
-					case FORMAT_R8_SNORM:
-					case FORMAT_G8R8_SNORM:
-					case FORMAT_A8B8G8R8_SNORM:
-					case FORMAT_R8:
-					case FORMAT_R5G6B5:
-					case FORMAT_G8R8:
-					case FORMAT_R8I:
-					case FORMAT_R8UI:
-					case FORMAT_G8R8I:
-					case FORMAT_G8R8UI:
-					case FORMAT_A8B8G8R8I:
-					case FORMAT_A8B8G8R8UI:
-					case FORMAT_R16I:
-					case FORMAT_R16UI:
-					case FORMAT_G16R16:
-					case FORMAT_G16R16I:
-					case FORMAT_G16R16UI:
-					case FORMAT_A16B16G16R16:
-					case FORMAT_A16B16G16R16I:
-					case FORMAT_A16B16G16R16UI:
-					case FORMAT_R32I:
-					case FORMAT_R32UI:
-					case FORMAT_G32R32I:
-					case FORMAT_G32R32UI:
-					case FORMAT_A32B32G32R32I:
-					case FORMAT_A32B32G32R32UI:
-					case FORMAT_A8R8G8B8:
-					case FORMAT_A8B8G8R8:
-					case FORMAT_SRGB8_A8:
-					case FORMAT_YV12_BT601:
-					case FORMAT_YV12_BT709:
-					case FORMAT_YV12_JFIF:
+					case VK_FORMAT_R8_SNORM:
+					case VK_FORMAT_R8G8_SNORM:
+					case VK_FORMAT_R8G8B8A8_SNORM:
+					case VK_FORMAT_R8_UNORM:
+					case VK_FORMAT_R5G6B5_UNORM_PACK16:
+					case VK_FORMAT_R8G8_UNORM:
+					case VK_FORMAT_R8_SINT:
+					case VK_FORMAT_R8_UINT:
+					case VK_FORMAT_R8G8_SINT:
+					case VK_FORMAT_R8G8_UINT:
+					case VK_FORMAT_R8G8B8A8_SINT:
+					case VK_FORMAT_R8G8B8A8_UINT:
+					case VK_FORMAT_R16_SINT:
+					case VK_FORMAT_R16_UINT:
+					case VK_FORMAT_R16G16_UNORM:
+					case VK_FORMAT_R16G16_SINT:
+					case VK_FORMAT_R16G16_UINT:
+					case VK_FORMAT_R16G16B16A16_UNORM:
+					case VK_FORMAT_R16G16B16A16_SINT:
+					case VK_FORMAT_R16G16B16A16_UINT:
+					case VK_FORMAT_R32_SINT:
+					case VK_FORMAT_R32_UINT:
+					case VK_FORMAT_R32G32_SINT:
+					case VK_FORMAT_R32G32_UINT:
+					case VK_FORMAT_R32G32B32A32_SINT:
+					case VK_FORMAT_R32G32B32A32_UINT:
+					case VK_FORMAT_B8G8R8A8_UNORM:
+					case VK_FORMAT_R8G8B8A8_UNORM:
+					case VK_FORMAT_R8G8B8A8_SRGB:
+					case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
 						if(componentCount < 2) c.y = Short4(defaultColorValue);
 						if(componentCount < 3) c.z = Short4(defaultColorValue);
 						if(componentCount < 4) c.w = Short4(0x1000);
 						break;
-					case FORMAT_R32F:
+					case VK_FORMAT_R32_SFLOAT:
 						c.y = Short4(defaultColorValue);
-					case FORMAT_G32R32F:
+					case VK_FORMAT_R32G32_SFLOAT:
 						c.z = Short4(defaultColorValue);
 						c.w = Short4(0x1000);
-					case FORMAT_A32B32G32R32F:
+					case VK_FORMAT_R32G32B32A32_SFLOAT:
 						break;
 					default:
 						ASSERT(false);
@@ -294,7 +292,7 @@
 					{
 						switch(state.textureFormat)
 						{
-						case FORMAT_R5G6B5:
+						case VK_FORMAT_R5G6B5_UNORM_PACK16:
 							c.x *= Float4(1.0f / 0xF800);
 							c.y *= Float4(1.0f / 0xFC00);
 							c.z *= Float4(1.0f / 0xF800);
@@ -316,7 +314,7 @@
 			{
 				Vector4s cs = sampleTexture(texture, u, v, w, q, bias, dsx, dsy, offset, function, false);
 
-				if(state.textureFormat ==  FORMAT_R5G6B5)
+				if(state.textureFormat ==  VK_FORMAT_R5G6B5_UNORM_PACK16)
 				{
 					c.x = Float4(As<UShort4>(cs.x)) * Float4(1.0f / 0xF800);
 					c.y = Float4(As<UShort4>(cs.y)) * Float4(1.0f / 0xFC00);
@@ -345,51 +343,49 @@
 			{
 				switch(state.textureFormat)
 				{
-				case FORMAT_R8I:
-				case FORMAT_R8UI:
-				case FORMAT_R16I:
-				case FORMAT_R16UI:
-				case FORMAT_R32I:
-				case FORMAT_R32UI:
+				case VK_FORMAT_R8_SINT:
+				case VK_FORMAT_R8_UINT:
+				case VK_FORMAT_R16_SINT:
+				case VK_FORMAT_R16_UINT:
+				case VK_FORMAT_R32_SINT:
+				case VK_FORMAT_R32_UINT:
 					c.y = As<Float4>(UInt4(0));
-				case FORMAT_G8R8I:
-				case FORMAT_G8R8UI:
-				case FORMAT_G16R16I:
-				case FORMAT_G16R16UI:
-				case FORMAT_G32R32I:
-				case FORMAT_G32R32UI:
+				case VK_FORMAT_R8G8_SINT:
+				case VK_FORMAT_R8G8_UINT:
+				case VK_FORMAT_R16G16_SINT:
+				case VK_FORMAT_R16G16_UINT:
+				case VK_FORMAT_R32G32_SINT:
+				case VK_FORMAT_R32G32_UINT:
 					c.z = As<Float4>(UInt4(0));
-				case FORMAT_A8B8G8R8I:
-				case FORMAT_A8B8G8R8UI:
-				case FORMAT_A16B16G16R16I:
-				case FORMAT_A16B16G16R16UI:
-				case FORMAT_A32B32G32R32I:
-				case FORMAT_A32B32G32R32UI:
+				case VK_FORMAT_R8G8B8A8_SINT:
+				case VK_FORMAT_R8G8B8A8_UINT:
+				case VK_FORMAT_R16G16B16A16_SINT:
+				case VK_FORMAT_R16G16B16A16_UINT:
+				case VK_FORMAT_R32G32B32A32_SINT:
+				case VK_FORMAT_R32G32B32A32_UINT:
 					break;
-				case FORMAT_R8_SNORM:
-				case FORMAT_G8R8_SNORM:
-				case FORMAT_A8B8G8R8_SNORM:
-				case FORMAT_R8:
-				case FORMAT_R5G6B5:
-				case FORMAT_G8R8:
-				case FORMAT_G16R16:
-				case FORMAT_A16B16G16R16:
-				case FORMAT_A8R8G8B8:
-				case FORMAT_A8B8G8R8:
-				case FORMAT_SRGB8_A8:
-				case FORMAT_YV12_BT601:
-				case FORMAT_YV12_BT709:
-				case FORMAT_YV12_JFIF:
+				case VK_FORMAT_R8_SNORM:
+				case VK_FORMAT_R8G8_SNORM:
+				case VK_FORMAT_R8G8B8A8_SNORM:
+				case VK_FORMAT_R8_UNORM:
+				case VK_FORMAT_R5G6B5_UNORM_PACK16:
+				case VK_FORMAT_R8G8_UNORM:
+				case VK_FORMAT_R16G16_UNORM:
+				case VK_FORMAT_R16G16B16A16_UNORM:
+				case VK_FORMAT_B8G8R8A8_UNORM:
+				case VK_FORMAT_R8G8B8A8_UNORM:
+				case VK_FORMAT_R8G8B8A8_SRGB:
+				case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
 					if(componentCount < 2) c.y = Float4(defaultColorValue);
 					if(componentCount < 3) c.z = Float4(defaultColorValue);
 					if(componentCount < 4) c.w = Float4(1.0f);
 					break;
-				case FORMAT_R32F:
+				case VK_FORMAT_R32_SFLOAT:
 					c.y = Float4(defaultColorValue);
-				case FORMAT_G32R32F:
+				case VK_FORMAT_R32G32_SFLOAT:
 					c.z = Float4(defaultColorValue);
 					c.w = Float4(1.0f);
-				case FORMAT_A32B32G32R32F:
+				case VK_FORMAT_R32G32B32A32_SFLOAT:
 					break;
 				default:
 					ASSERT(false);
@@ -1672,7 +1668,7 @@
 
 			switch(state.textureFormat)
 			{
-			case FORMAT_R5G6B5:
+			case VK_FORMAT_R5G6B5_UNORM_PACK16:
 				c.z = (c.x & Short4(0x001Fu)) << 11;
 				c.y = (c.x & Short4(0x07E0u)) << 5;
 				c.x = (c.x & Short4(0xF800u));
@@ -1696,7 +1692,7 @@
 
 					switch(state.textureFormat)
 					{
-					case FORMAT_A8R8G8B8:
+					case VK_FORMAT_B8G8R8A8_UNORM:
 						c.z = As<Short4>(UnpackLow(c.x, c.y));
 						c.x = As<Short4>(UnpackHigh(c.x, c.y));
 						c.y = c.z;
@@ -1706,10 +1702,10 @@
 						c.x = UnpackLow(As<Byte8>(c.x), As<Byte8>(c.x));
 						c.w = UnpackHigh(As<Byte8>(c.w), As<Byte8>(c.w));
 						break;
-					case FORMAT_A8B8G8R8:
-					case FORMAT_A8B8G8R8I:
-					case FORMAT_A8B8G8R8_SNORM:
-					case FORMAT_SRGB8_A8:
+					case VK_FORMAT_R8G8B8A8_UNORM:
+					case VK_FORMAT_R8G8B8A8_SINT:
+					case VK_FORMAT_R8G8B8A8_SNORM:
+					case VK_FORMAT_R8G8B8A8_SRGB:
 						c.z = As<Short4>(UnpackHigh(c.x, c.y));
 						c.x = As<Short4>(UnpackLow(c.x, c.y));
 						c.y = c.x;
@@ -1719,7 +1715,7 @@
 						c.z = UnpackLow(As<Byte8>(c.z), As<Byte8>(c.z));
 						c.w = UnpackHigh(As<Byte8>(c.w), As<Byte8>(c.w));
 						// Propagate sign bit
-						if(state.textureFormat == FORMAT_A8B8G8R8I)
+						if(state.textureFormat == VK_FORMAT_R8G8B8A8_SINT)
 						{
 							c.x >>= 8;
 							c.y >>= 8;
@@ -1727,7 +1723,7 @@
 							c.w >>= 8;
 						}
 						break;
-					case FORMAT_A8B8G8R8UI:
+					case VK_FORMAT_R8G8B8A8_UINT:
 						c.z = As<Short4>(UnpackHigh(c.x, c.y));
 						c.x = As<Short4>(UnpackLow(c.x, c.y));
 						c.y = c.x;
@@ -1750,16 +1746,16 @@
 
 				switch(state.textureFormat)
 				{
-				case FORMAT_G8R8:
-				case FORMAT_G8R8_SNORM:
+				case VK_FORMAT_R8G8_UNORM:
+				case VK_FORMAT_R8G8_SNORM:
 					c.y = (c.x & Short4(0xFF00u)) | As<Short4>(As<UShort4>(c.x) >> 8);
 					c.x = (c.x & Short4(0x00FFu)) | (c.x << 8);
 					break;
-				case FORMAT_G8R8I:
+				case VK_FORMAT_R8G8_SINT:
 					c.y = c.x >> 8;
 					c.x = (c.x << 8) >> 8; // Propagate sign bit
 					break;
-				case FORMAT_G8R8UI:
+				case VK_FORMAT_R8G8_UINT:
 					c.y = As<Short4>(As<UShort4>(c.x) >> 8);
 					c.x &= Short4(0x00FFu);
 					break;
@@ -1777,13 +1773,13 @@
 
 					switch(state.textureFormat)
 					{
-					case FORMAT_R8I:
-					case FORMAT_R8UI:
+					case VK_FORMAT_R8_SINT:
+					case VK_FORMAT_R8_UINT:
 						{
 							Int zero(0);
 							c.x = Unpack(As<Byte4>(c0), As<Byte4>(zero));
 							// Propagate sign bit
-							if(state.textureFormat == FORMAT_R8I)
+							if(state.textureFormat == VK_FORMAT_R8_SINT)
 							{
 								c.x = (c.x << 8) >> 8;
 							}
@@ -1840,7 +1836,7 @@
 
 		if(state.sRGB)
 		{
-			if(state.textureFormat == FORMAT_R5G6B5)
+			if(state.textureFormat == VK_FORMAT_R5G6B5_UNORM_PACK16)
 			{
 				sRGBtoLinear16_5_16(c.x);
 				sRGBtoLinear16_6_16(c.y);
@@ -1881,21 +1877,24 @@
 
 			switch(state.textureFormat)
 			{
-			case FORMAT_YV12_BT601:
+			case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
+				// VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601
 				Kb = 0.114f;
 				Kr = 0.299f;
 				studioSwing = 1;
 				break;
-			case FORMAT_YV12_BT709:
+				/*
+				// VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709
 				Kb = 0.0722f;
 				Kr = 0.2126f;
 				studioSwing = 1;
 				break;
-			case FORMAT_YV12_JFIF:
+				// VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020
 				Kb = 0.114f;
 				Kr = 0.299f;
 				studioSwing = 0;
 				break;
+				*/
 			default:
 				ASSERT(false);
 			}
@@ -2454,42 +2453,40 @@
 	{
 		switch(state.textureFormat)
 		{
-		case FORMAT_R5G6B5:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
 			return true;
-		case FORMAT_R8_SNORM:
-		case FORMAT_G8R8_SNORM:
-		case FORMAT_A8B8G8R8_SNORM:
-		case FORMAT_R8I:
-		case FORMAT_R8UI:
-		case FORMAT_G8R8I:
-		case FORMAT_G8R8UI:
-		case FORMAT_A8B8G8R8I:
-		case FORMAT_A8B8G8R8UI:
-		case FORMAT_R32I:
-		case FORMAT_R32UI:
-		case FORMAT_G32R32I:
-		case FORMAT_G32R32UI:
-		case FORMAT_A32B32G32R32I:
-		case FORMAT_A32B32G32R32UI:
-		case FORMAT_G8R8:
-		case FORMAT_A8R8G8B8:
-		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
-		case FORMAT_R32F:
-		case FORMAT_G32R32F:
-		case FORMAT_A32B32G32R32F:
-		case FORMAT_R8:
-		case FORMAT_G16R16:
-		case FORMAT_A16B16G16R16:
-		case FORMAT_R16I:
-		case FORMAT_R16UI:
-		case FORMAT_G16R16I:
-		case FORMAT_G16R16UI:
-		case FORMAT_A16B16G16R16I:
-		case FORMAT_A16B16G16R16UI:
-		case FORMAT_YV12_BT601:
-		case FORMAT_YV12_BT709:
-		case FORMAT_YV12_JFIF:
+		case VK_FORMAT_R8_SNORM:
+		case VK_FORMAT_R8G8_SNORM:
+		case VK_FORMAT_R8G8B8A8_SNORM:
+		case VK_FORMAT_R8_SINT:
+		case VK_FORMAT_R8_UINT:
+		case VK_FORMAT_R8G8_SINT:
+		case VK_FORMAT_R8G8_UINT:
+		case VK_FORMAT_R8G8B8A8_SINT:
+		case VK_FORMAT_R8G8B8A8_UINT:
+		case VK_FORMAT_R32_SINT:
+		case VK_FORMAT_R32_UINT:
+		case VK_FORMAT_R32G32_SINT:
+		case VK_FORMAT_R32G32_UINT:
+		case VK_FORMAT_R32G32B32A32_SINT:
+		case VK_FORMAT_R32G32B32A32_UINT:
+		case VK_FORMAT_R8G8_UNORM:
+		case VK_FORMAT_B8G8R8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
+		case VK_FORMAT_R32_SFLOAT:
+		case VK_FORMAT_R32G32_SFLOAT:
+		case VK_FORMAT_R32G32B32A32_SFLOAT:
+		case VK_FORMAT_R8_UNORM:
+		case VK_FORMAT_R16G16_UNORM:
+		case VK_FORMAT_R16G16B16A16_UNORM:
+		case VK_FORMAT_R16_SINT:
+		case VK_FORMAT_R16_UINT:
+		case VK_FORMAT_R16G16_SINT:
+		case VK_FORMAT_R16G16_UINT:
+		case VK_FORMAT_R16G16B16A16_SINT:
+		case VK_FORMAT_R16G16B16A16_UINT:
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
 			return false;
 		default:
 			ASSERT(false);
@@ -2502,42 +2499,40 @@
 	{
 		switch(state.textureFormat)
 		{
-		case FORMAT_G8R8:
-		case FORMAT_A8R8G8B8:
-		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
-		case FORMAT_R8:
-		case FORMAT_R8_SNORM:
-		case FORMAT_G8R8_SNORM:
-		case FORMAT_A8B8G8R8_SNORM:
-		case FORMAT_R8I:
-		case FORMAT_R8UI:
-		case FORMAT_G8R8I:
-		case FORMAT_G8R8UI:
-		case FORMAT_A8B8G8R8I:
-		case FORMAT_A8B8G8R8UI:
+		case VK_FORMAT_R8G8_UNORM:
+		case VK_FORMAT_B8G8R8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
+		case VK_FORMAT_R8_UNORM:
+		case VK_FORMAT_R8_SNORM:
+		case VK_FORMAT_R8G8_SNORM:
+		case VK_FORMAT_R8G8B8A8_SNORM:
+		case VK_FORMAT_R8_SINT:
+		case VK_FORMAT_R8_UINT:
+		case VK_FORMAT_R8G8_SINT:
+		case VK_FORMAT_R8G8_UINT:
+		case VK_FORMAT_R8G8B8A8_SINT:
+		case VK_FORMAT_R8G8B8A8_UINT:
 			return true;
-		case FORMAT_R5G6B5:
-		case FORMAT_R32F:
-		case FORMAT_G32R32F:
-		case FORMAT_A32B32G32R32F:
-		case FORMAT_G16R16:
-		case FORMAT_A16B16G16R16:
-		case FORMAT_R32I:
-		case FORMAT_R32UI:
-		case FORMAT_G32R32I:
-		case FORMAT_G32R32UI:
-		case FORMAT_A32B32G32R32I:
-		case FORMAT_A32B32G32R32UI:
-		case FORMAT_R16I:
-		case FORMAT_R16UI:
-		case FORMAT_G16R16I:
-		case FORMAT_G16R16UI:
-		case FORMAT_A16B16G16R16I:
-		case FORMAT_A16B16G16R16UI:
-		case FORMAT_YV12_BT601:
-		case FORMAT_YV12_BT709:
-		case FORMAT_YV12_JFIF:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
+		case VK_FORMAT_R32_SFLOAT:
+		case VK_FORMAT_R32G32_SFLOAT:
+		case VK_FORMAT_R32G32B32A32_SFLOAT:
+		case VK_FORMAT_R16G16_UNORM:
+		case VK_FORMAT_R16G16B16A16_UNORM:
+		case VK_FORMAT_R32_SINT:
+		case VK_FORMAT_R32_UINT:
+		case VK_FORMAT_R32G32_SINT:
+		case VK_FORMAT_R32G32_UINT:
+		case VK_FORMAT_R32G32B32A32_SINT:
+		case VK_FORMAT_R32G32B32A32_UINT:
+		case VK_FORMAT_R16_SINT:
+		case VK_FORMAT_R16_UINT:
+		case VK_FORMAT_R16G16_SINT:
+		case VK_FORMAT_R16G16_UINT:
+		case VK_FORMAT_R16G16B16A16_SINT:
+		case VK_FORMAT_R16G16B16A16_UINT:
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
 			return false;
 		default:
 			ASSERT(false);
@@ -2550,42 +2545,40 @@
 	{
 		switch(state.textureFormat)
 		{
-		case FORMAT_R5G6B5:
-		case FORMAT_R8_SNORM:
-		case FORMAT_G8R8_SNORM:
-		case FORMAT_A8B8G8R8_SNORM:
-		case FORMAT_R8I:
-		case FORMAT_R8UI:
-		case FORMAT_G8R8I:
-		case FORMAT_G8R8UI:
-		case FORMAT_A8B8G8R8I:
-		case FORMAT_A8B8G8R8UI:
-		case FORMAT_R32I:
-		case FORMAT_R32UI:
-		case FORMAT_G32R32I:
-		case FORMAT_G32R32UI:
-		case FORMAT_A32B32G32R32I:
-		case FORMAT_A32B32G32R32UI:
-		case FORMAT_G8R8:
-		case FORMAT_A8R8G8B8:
-		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
-		case FORMAT_R32F:
-		case FORMAT_G32R32F:
-		case FORMAT_A32B32G32R32F:
-		case FORMAT_R8:
-		case FORMAT_YV12_BT601:
-		case FORMAT_YV12_BT709:
-		case FORMAT_YV12_JFIF:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
+		case VK_FORMAT_R8_SNORM:
+		case VK_FORMAT_R8G8_SNORM:
+		case VK_FORMAT_R8G8B8A8_SNORM:
+		case VK_FORMAT_R8_SINT:
+		case VK_FORMAT_R8_UINT:
+		case VK_FORMAT_R8G8_SINT:
+		case VK_FORMAT_R8G8_UINT:
+		case VK_FORMAT_R8G8B8A8_SINT:
+		case VK_FORMAT_R8G8B8A8_UINT:
+		case VK_FORMAT_R32_SINT:
+		case VK_FORMAT_R32_UINT:
+		case VK_FORMAT_R32G32_SINT:
+		case VK_FORMAT_R32G32_UINT:
+		case VK_FORMAT_R32G32B32A32_SINT:
+		case VK_FORMAT_R32G32B32A32_UINT:
+		case VK_FORMAT_R8G8_UNORM:
+		case VK_FORMAT_B8G8R8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
+		case VK_FORMAT_R32_SFLOAT:
+		case VK_FORMAT_R32G32_SFLOAT:
+		case VK_FORMAT_R32G32B32A32_SFLOAT:
+		case VK_FORMAT_R8_UNORM:
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
 			return false;
-		case FORMAT_G16R16:
-		case FORMAT_A16B16G16R16:
-		case FORMAT_R16I:
-		case FORMAT_R16UI:
-		case FORMAT_G16R16I:
-		case FORMAT_G16R16UI:
-		case FORMAT_A16B16G16R16I:
-		case FORMAT_A16B16G16R16UI:
+		case VK_FORMAT_R16G16_UNORM:
+		case VK_FORMAT_R16G16B16A16_UNORM:
+		case VK_FORMAT_R16_SINT:
+		case VK_FORMAT_R16_UINT:
+		case VK_FORMAT_R16G16_SINT:
+		case VK_FORMAT_R16G16_UINT:
+		case VK_FORMAT_R16G16B16A16_SINT:
+		case VK_FORMAT_R16G16B16A16_UINT:
 			return true;
 		default:
 			ASSERT(false);
@@ -2598,42 +2591,40 @@
 	{
 		switch(state.textureFormat)
 		{
-		case FORMAT_R5G6B5:
-		case FORMAT_R8_SNORM:
-		case FORMAT_G8R8_SNORM:
-		case FORMAT_A8B8G8R8_SNORM:
-		case FORMAT_R8I:
-		case FORMAT_R8UI:
-		case FORMAT_G8R8I:
-		case FORMAT_G8R8UI:
-		case FORMAT_A8B8G8R8I:
-		case FORMAT_A8B8G8R8UI:
-		case FORMAT_G8R8:
-		case FORMAT_A8R8G8B8:
-		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
-		case FORMAT_G16R16:
-		case FORMAT_A16B16G16R16:
-		case FORMAT_R16I:
-		case FORMAT_R16UI:
-		case FORMAT_G16R16I:
-		case FORMAT_G16R16UI:
-		case FORMAT_A16B16G16R16I:
-		case FORMAT_A16B16G16R16UI:
-		case FORMAT_R32F:
-		case FORMAT_G32R32F:
-		case FORMAT_A32B32G32R32F:
-		case FORMAT_R8:
-		case FORMAT_YV12_BT601:
-		case FORMAT_YV12_BT709:
-		case FORMAT_YV12_JFIF:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
+		case VK_FORMAT_R8_SNORM:
+		case VK_FORMAT_R8G8_SNORM:
+		case VK_FORMAT_R8G8B8A8_SNORM:
+		case VK_FORMAT_R8_SINT:
+		case VK_FORMAT_R8_UINT:
+		case VK_FORMAT_R8G8_SINT:
+		case VK_FORMAT_R8G8_UINT:
+		case VK_FORMAT_R8G8B8A8_SINT:
+		case VK_FORMAT_R8G8B8A8_UINT:
+		case VK_FORMAT_R8G8_UNORM:
+		case VK_FORMAT_B8G8R8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
+		case VK_FORMAT_R16G16_UNORM:
+		case VK_FORMAT_R16G16B16A16_UNORM:
+		case VK_FORMAT_R16_SINT:
+		case VK_FORMAT_R16_UINT:
+		case VK_FORMAT_R16G16_SINT:
+		case VK_FORMAT_R16G16_UINT:
+		case VK_FORMAT_R16G16B16A16_SINT:
+		case VK_FORMAT_R16G16B16A16_UINT:
+		case VK_FORMAT_R32_SFLOAT:
+		case VK_FORMAT_R32G32_SFLOAT:
+		case VK_FORMAT_R32G32B32A32_SFLOAT:
+		case VK_FORMAT_R8_UNORM:
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
 			return false;
-		case FORMAT_R32I:
-		case FORMAT_R32UI:
-		case FORMAT_G32R32I:
-		case FORMAT_G32R32UI:
-		case FORMAT_A32B32G32R32I:
-		case FORMAT_A32B32G32R32UI:
+		case VK_FORMAT_R32_SINT:
+		case VK_FORMAT_R32_UINT:
+		case VK_FORMAT_R32G32_SINT:
+		case VK_FORMAT_R32G32_UINT:
+		case VK_FORMAT_R32G32B32A32_SINT:
+		case VK_FORMAT_R32G32B32A32_UINT:
 			return true;
 		default:
 			ASSERT(false);
@@ -2646,42 +2637,40 @@
 	{
 		switch(state.textureFormat)
 		{
-		case FORMAT_YV12_BT601:
-		case FORMAT_YV12_BT709:
-		case FORMAT_YV12_JFIF:
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
 			return true;
-		case FORMAT_R5G6B5:
-		case FORMAT_R8_SNORM:
-		case FORMAT_G8R8_SNORM:
-		case FORMAT_A8B8G8R8_SNORM:
-		case FORMAT_R8I:
-		case FORMAT_R8UI:
-		case FORMAT_G8R8I:
-		case FORMAT_G8R8UI:
-		case FORMAT_A8B8G8R8I:
-		case FORMAT_A8B8G8R8UI:
-		case FORMAT_R32I:
-		case FORMAT_R32UI:
-		case FORMAT_G32R32I:
-		case FORMAT_G32R32UI:
-		case FORMAT_A32B32G32R32I:
-		case FORMAT_A32B32G32R32UI:
-		case FORMAT_G8R8:
-		case FORMAT_A8R8G8B8:
-		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
-		case FORMAT_R32F:
-		case FORMAT_G32R32F:
-		case FORMAT_A32B32G32R32F:
-		case FORMAT_R8:
-		case FORMAT_G16R16:
-		case FORMAT_A16B16G16R16:
-		case FORMAT_R16I:
-		case FORMAT_R16UI:
-		case FORMAT_G16R16I:
-		case FORMAT_G16R16UI:
-		case FORMAT_A16B16G16R16I:
-		case FORMAT_A16B16G16R16UI:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
+		case VK_FORMAT_R8_SNORM:
+		case VK_FORMAT_R8G8_SNORM:
+		case VK_FORMAT_R8G8B8A8_SNORM:
+		case VK_FORMAT_R8_SINT:
+		case VK_FORMAT_R8_UINT:
+		case VK_FORMAT_R8G8_SINT:
+		case VK_FORMAT_R8G8_UINT:
+		case VK_FORMAT_R8G8B8A8_SINT:
+		case VK_FORMAT_R8G8B8A8_UINT:
+		case VK_FORMAT_R32_SINT:
+		case VK_FORMAT_R32_UINT:
+		case VK_FORMAT_R32G32_SINT:
+		case VK_FORMAT_R32G32_UINT:
+		case VK_FORMAT_R32G32B32A32_SINT:
+		case VK_FORMAT_R32G32B32A32_UINT:
+		case VK_FORMAT_R8G8_UNORM:
+		case VK_FORMAT_B8G8R8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
+		case VK_FORMAT_R32_SFLOAT:
+		case VK_FORMAT_R32G32_SFLOAT:
+		case VK_FORMAT_R32G32B32A32_SFLOAT:
+		case VK_FORMAT_R8_UNORM:
+		case VK_FORMAT_R16G16_UNORM:
+		case VK_FORMAT_R16G16B16A16_UNORM:
+		case VK_FORMAT_R16_SINT:
+		case VK_FORMAT_R16_UINT:
+		case VK_FORMAT_R16G16_SINT:
+		case VK_FORMAT_R16G16_UINT:
+		case VK_FORMAT_R16G16B16A16_SINT:
+		case VK_FORMAT_R16G16B16A16_UINT:
 			return false;
 		default:
 			ASSERT(false);
@@ -2694,41 +2683,39 @@
 	{
 		switch(state.textureFormat)
 		{
-		case FORMAT_R5G6B5:         return component < 3;
-		case FORMAT_R8_SNORM:      return component < 1;
-		case FORMAT_G8R8_SNORM:    return component < 2;
-		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_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_A32B32G32R32I:  return component < 3;
-		case FORMAT_A32B32G32R32UI: return component < 3;
-		case FORMAT_G8R8:           return component < 2;
-		case FORMAT_A8R8G8B8:       return component < 3;
-		case FORMAT_A8B8G8R8:       return component < 3;
-		case FORMAT_SRGB8_A8:       return component < 3;
-		case FORMAT_R32F:           return component < 1;
-		case FORMAT_G32R32F:        return component < 2;
-		case FORMAT_A32B32G32R32F:  return component < 3;
-		case FORMAT_R8:             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_A16B16G16R16I:  return component < 3;
-		case FORMAT_A16B16G16R16UI: return component < 3;
-		case FORMAT_YV12_BT601:     return component < 3;
-		case FORMAT_YV12_BT709:     return component < 3;
-		case FORMAT_YV12_JFIF:      return component < 3;
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:      return component < 3;
+		case VK_FORMAT_R8_SNORM:                 return component < 1;
+		case VK_FORMAT_R8G8_SNORM:               return component < 2;
+		case VK_FORMAT_R8G8B8A8_SNORM:           return component < 3;
+		case VK_FORMAT_R8_SINT:                  return component < 1;
+		case VK_FORMAT_R8_UINT:                  return component < 1;
+		case VK_FORMAT_R8G8_SINT:                return component < 2;
+		case VK_FORMAT_R8G8_UINT:                return component < 2;
+		case VK_FORMAT_R8G8B8A8_SINT:            return component < 3;
+		case VK_FORMAT_R8G8B8A8_UINT:            return component < 3;
+		case VK_FORMAT_R32_SINT:                 return component < 1;
+		case VK_FORMAT_R32_UINT:                 return component < 1;
+		case VK_FORMAT_R32G32_SINT:              return component < 2;
+		case VK_FORMAT_R32G32_UINT:              return component < 2;
+		case VK_FORMAT_R32G32B32A32_SINT:        return component < 3;
+		case VK_FORMAT_R32G32B32A32_UINT:        return component < 3;
+		case VK_FORMAT_R8G8_UNORM:               return component < 2;
+		case VK_FORMAT_B8G8R8A8_UNORM:           return component < 3;
+		case VK_FORMAT_R8G8B8A8_UNORM:           return component < 3;
+		case VK_FORMAT_R8G8B8A8_SRGB:            return component < 3;
+		case VK_FORMAT_R32_SFLOAT:               return component < 1;
+		case VK_FORMAT_R32G32_SFLOAT:            return component < 2;
+		case VK_FORMAT_R32G32B32A32_SFLOAT:      return component < 3;
+		case VK_FORMAT_R8_UNORM:                 return component < 1;
+		case VK_FORMAT_R16G16_UNORM:             return component < 2;
+		case VK_FORMAT_R16G16B16A16_UNORM:       return component < 3;
+		case VK_FORMAT_R16_SINT:                 return component < 1;
+		case VK_FORMAT_R16_UINT:                 return component < 1;
+		case VK_FORMAT_R16G16_SINT:              return component < 2;
+		case VK_FORMAT_R16G16_UINT:              return component < 2;
+		case VK_FORMAT_R16G16B16A16_SINT:        return component < 3;
+		case VK_FORMAT_R16G16B16A16_UINT:        return component < 3;
+		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: return component < 3;
 		default:
 			ASSERT(false);
 		}
diff --git a/src/WSI/FrameBuffer.cpp b/src/WSI/FrameBuffer.cpp
index 772c0a0..4b408c1 100644
--- a/src/WSI/FrameBuffer.cpp
+++ b/src/WSI/FrameBuffer.cpp
@@ -40,7 +40,7 @@
 
 		this->width = width;
 		this->height = height;
-		format = FORMAT_A8R8G8B8;
+		format = VK_FORMAT_B8G8R8A8_UNORM;
 		stride = 0;
 
 		windowed = !fullscreen || forceWindowed;
@@ -187,13 +187,13 @@
 
 				switch(state.destFormat)
 				{
-				case FORMAT_A8R8G8B8:
+				case VK_FORMAT_B8G8R8A8_UNORM:
 					{
 						Int x = x0;
 
 						switch(state.sourceFormat)
 						{
-						case FORMAT_A8R8G8B8:
+						case VK_FORMAT_B8G8R8A8_UNORM:
 							For(, x < width - 3, x += 4)
 							{
 								*Pointer<Int4>(d, 1) = *Pointer<Int4>(s, sStride % 16 ? 1 : 16);
@@ -202,7 +202,7 @@
 								d += 4 * dBytes;
 							}
 							break;
-						case FORMAT_A8B8G8R8:
+						case VK_FORMAT_R8G8B8A8_UNORM:
 							For(, x < width - 3, x += 4)
 							{
 								Int4 bgra = *Pointer<Int4>(s, sStride % 16 ? 1 : 16);
@@ -215,7 +215,7 @@
 								d += 4 * dBytes;
 							}
 							break;
-						case FORMAT_A16B16G16R16:
+						case VK_FORMAT_R16G16B16A16_UNORM:
 							For(, x < width - 1, x += 2)
 							{
 								Short4 c0 = As<UShort4>(Swizzle(*Pointer<Short4>(s + 0), 0xC6)) >> 8;
@@ -227,7 +227,7 @@
 								d += 2 * dBytes;
 							}
 							break;
-						case FORMAT_R5G6B5:
+						case VK_FORMAT_R5G6B5_UNORM_PACK16:
 							For(, x < width - 3, x += 4)
 							{
 								Int4 rgb = Int4(*Pointer<Short4>(s));
@@ -249,10 +249,10 @@
 						{
 							switch(state.sourceFormat)
 							{
-							case FORMAT_A8R8G8B8:
+							case VK_FORMAT_B8G8R8A8_UNORM:
 								*Pointer<Int>(d) = *Pointer<Int>(s);
 								break;
-							case FORMAT_A8B8G8R8:
+							case VK_FORMAT_R8G8B8A8_UNORM:
 								{
 									Int rgba = *Pointer<Int>(s);
 
@@ -261,14 +261,14 @@
 									                   (rgba & Int(0xFF00FF00));
 								}
 								break;
-							case FORMAT_A16B16G16R16:
+							case VK_FORMAT_R16G16B16A16_UNORM:
 								{
 									Short4 c = As<UShort4>(Swizzle(*Pointer<Short4>(s), 0xC6)) >> 8;
 
 									*Pointer<Int>(d) = Int(As<Int2>(PackUnsigned(c, c)));
 								}
 								break;
-							case FORMAT_R5G6B5:
+							case VK_FORMAT_R5G6B5_UNORM_PACK16:
 								{
 									Int rgb = Int(*Pointer<Short>(s));
 
@@ -288,14 +288,14 @@
 						}
 					}
 					break;
-				case FORMAT_A8B8G8R8:
-				case FORMAT_SRGB8_A8:
+				case VK_FORMAT_R8G8B8A8_UNORM:
+				case VK_FORMAT_R8G8B8A8_SRGB:
 					{
 						Int x = x0;
 
 						switch(state.sourceFormat)
 						{
-						case FORMAT_A8B8G8R8:
+						case VK_FORMAT_R8G8B8A8_UNORM:
 							For(, x < width - 3, x += 4)
 							{
 								*Pointer<Int4>(d, 1) = *Pointer<Int4>(s, sStride % 16 ? 1 : 16);
@@ -304,7 +304,7 @@
 								d += 4 * dBytes;
 							}
 							break;
-						case FORMAT_A8R8G8B8:
+						case VK_FORMAT_B8G8R8A8_UNORM:
 							For(, x < width - 3, x += 4)
 							{
 								Int4 bgra = *Pointer<Int4>(s, sStride % 16 ? 1 : 16);
@@ -317,7 +317,7 @@
 								d += 4 * dBytes;
 							}
 							break;
-						case FORMAT_A16B16G16R16:
+						case VK_FORMAT_R16G16B16A16_UNORM:
 							For(, x < width - 1, x += 2)
 							{
 								Short4 c0 = *Pointer<UShort4>(s + 0) >> 8;
@@ -329,7 +329,7 @@
 								d += 2 * dBytes;
 							}
 							break;
-						case FORMAT_R5G6B5:
+						case VK_FORMAT_R5G6B5_UNORM_PACK16:
 							For(, x < width - 3, x += 4)
 							{
 								Int4 rgb = Int4(*Pointer<Short4>(s));
@@ -352,10 +352,10 @@
 						{
 							switch(state.sourceFormat)
 							{
-							case FORMAT_A8B8G8R8:
+							case VK_FORMAT_R8G8B8A8_UNORM:
 								*Pointer<Int>(d) = *Pointer<Int>(s);
 								break;
-							case FORMAT_A8R8G8B8:
+							case VK_FORMAT_B8G8R8A8_UNORM:
 								{
 									Int bgra = *Pointer<Int>(s);
 									*Pointer<Int>(d) = ((bgra & Int(0x00FF0000)) >> 16) |
@@ -363,14 +363,14 @@
 									                   (bgra & Int(0xFF00FF00));
 								}
 								break;
-							case FORMAT_A16B16G16R16:
+							case VK_FORMAT_R16G16B16A16_UNORM:
 								{
 									Short4 c = *Pointer<UShort4>(s) >> 8;
 
 									*Pointer<Int>(d) = Int(As<Int2>(PackUnsigned(c, c)));
 								}
 								break;
-							case FORMAT_R5G6B5:
+							case VK_FORMAT_R5G6B5_UNORM_PACK16:
 								{
 									Int rgb = Int(*Pointer<Short>(s));
 
@@ -390,13 +390,13 @@
 						}
 					}
 					break;
-				case FORMAT_R5G6B5:
+				case VK_FORMAT_R5G6B5_UNORM_PACK16:
 					{
 						For(Int x = x0, x < width, x++)
 						{
 							switch(state.sourceFormat)
 							{
-							case FORMAT_A8R8G8B8:
+							case VK_FORMAT_B8G8R8A8_UNORM:
 								{
 									Int c = *Pointer<Int>(s);
 
@@ -405,7 +405,7 @@
 									                           (c & 0x000000F8) >> 3);
 								}
 								break;
-							case FORMAT_A8B8G8R8:
+							case VK_FORMAT_R8G8B8A8_UNORM:
 								{
 									Int c = *Pointer<Int>(s);
 
@@ -414,7 +414,7 @@
 									                           (c & 0x000000F8) << 8);
 								}
 								break;
-							case FORMAT_A16B16G16R16:
+							case VK_FORMAT_R16G16B16A16_UNORM:
 								{
 									Short4 cc = *Pointer<UShort4>(s) >> 8;
 									Int c = Int(As<Int2>(PackUnsigned(cc, cc)));
@@ -424,7 +424,7 @@
 									                           (c & 0x000000F8) << 8);
 								}
 								break;
-							case FORMAT_R5G6B5:
+							case VK_FORMAT_R5G6B5_UNORM_PACK16:
 								*Pointer<Short>(d) = *Pointer<Short>(s);
 								break;
 							default:
@@ -488,16 +488,16 @@
 
 		switch(state.sourceFormat)
 		{
-		case FORMAT_A8R8G8B8:
+		case VK_FORMAT_B8G8R8A8_UNORM:
 			c2 = Unpack(*Pointer<Byte4>(s));
 			break;
-		case FORMAT_A8B8G8R8:
+		case VK_FORMAT_R8G8B8A8_UNORM:
 			c2 = Swizzle(Unpack(*Pointer<Byte4>(s)), 0xC6);
 			break;
-		case FORMAT_A16B16G16R16:
+		case VK_FORMAT_R16G16B16A16_UNORM:
 			c2 = Swizzle(*Pointer<Short4>(s), 0xC6);
 			break;
-		case FORMAT_R5G6B5:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
 			{
 				Int rgb(*Pointer<Short>(s));
 				rgb = 0xFF000000 |
@@ -524,18 +524,18 @@
 
 		switch(state.destFormat)
 		{
-		case FORMAT_A8R8G8B8:
+		case VK_FORMAT_B8G8R8A8_UNORM:
 			*Pointer<Byte4>(d) = Byte4(PackUnsigned(c1, c1));
 			break;
-		case FORMAT_A8B8G8R8:
-		case FORMAT_SRGB8_A8:
+		case VK_FORMAT_R8G8B8A8_UNORM:
+		case VK_FORMAT_R8G8B8A8_SRGB:
 			{
 				c1 = Swizzle(c1, 0xC6);
 
 				*Pointer<Byte4>(d) = Byte4(PackUnsigned(c1, c1));
 			}
 			break;
-		case FORMAT_R5G6B5:
+		case VK_FORMAT_R5G6B5_UNORM_PACK16:
 			{
 				Int c = Int(As<Int2>(PackUnsigned(c1, c1)));
 
diff --git a/src/WSI/FrameBuffer.hpp b/src/WSI/FrameBuffer.hpp
index 761db18..b41fbe3 100644
--- a/src/WSI/FrameBuffer.hpp
+++ b/src/WSI/FrameBuffer.hpp
@@ -29,8 +29,8 @@
 	{
 		int width;
 		int height;
-		Format destFormat;
-		Format sourceFormat;
+		VkFormat destFormat;
+		VkFormat sourceFormat;
 		int destStride;
 		int sourceStride;
 		int cursorWidth;
@@ -65,7 +65,7 @@
 		int width;
 		int height;
 		int stride;
-		Format format;
+		VkFormat format;
 
 	private:
 		void copyLocked();
diff --git a/src/WSI/FrameBufferAndroid.cpp b/src/WSI/FrameBufferAndroid.cpp
index 8bc114e..415ad69 100644
--- a/src/WSI/FrameBufferAndroid.cpp
+++ b/src/WSI/FrameBufferAndroid.cpp
@@ -100,13 +100,13 @@
 
 		switch(buffer->format)
 		{
-		case HAL_PIXEL_FORMAT_RGB_565:   format = FORMAT_R5G6B5; break;
-		case HAL_PIXEL_FORMAT_RGBA_8888: format = FORMAT_A8B8G8R8; break;
+		case HAL_PIXEL_FORMAT_RGB_565:   format = VK_FORMAT_R5G6B5_UNORM_PACK16; break;
+		case HAL_PIXEL_FORMAT_RGBA_8888: format = VK_FORMAT_R8G8B8A8_UNORM; break;
 #if ANDROID_PLATFORM_SDK_VERSION > 16
 		case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED: format = FORMAT_X8B8G8R8; break;
 #endif
 		case HAL_PIXEL_FORMAT_RGBX_8888: format = FORMAT_X8B8G8R8; break;
-		case HAL_PIXEL_FORMAT_BGRA_8888: format = FORMAT_A8R8G8B8; break;
+		case HAL_PIXEL_FORMAT_BGRA_8888: format = VK_FORMAT_B8G8R8A8_UNORM; break;
 		case HAL_PIXEL_FORMAT_RGB_888:
 			// Frame buffers are expected to have 16-bit or 32-bit colors, not 24-bit.
 			TRACE("Unsupported frame buffer format RGB_888"); ASSERT(false);
@@ -114,7 +114,7 @@
 			break;
 		default:
 			TRACE("Unsupported frame buffer format %d", buffer->format); ASSERT(false);
-			format = FORMAT_NULL;
+			format = VK_FORMAT_UNDEFINED;
 			break;
 		}
 
diff --git a/src/WSI/FrameBufferDD.cpp b/src/WSI/FrameBufferDD.cpp
index dcf1c9f..48963ee 100644
--- a/src/WSI/FrameBufferDD.cpp
+++ b/src/WSI/FrameBufferDD.cpp
@@ -106,12 +106,12 @@
 
 			switch(ddsd.ddpfPixelFormat.dwRGBBitCount)
 			{
-			case 32: format = FORMAT_A8R8G8B8; break;
-			case 16: format = FORMAT_R5G6B5;   break;
-			default: format = FORMAT_NULL;     break;
+			case 32: format = VK_FORMAT_B8G8R8A8_UNORM;      break;
+			case 16: format = VK_FORMAT_R5G6B5_UNORM_PACK16; break;
+			default: format = VK_FORMAT_UNDEFINED;           break;
 			}
 
-			if((result != DD_OK && result != DDERR_PRIMARYSURFACEALREADYEXISTS) || (format == FORMAT_NULL))
+			if((result != DD_OK && result != DDERR_PRIMARYSURFACEALREADYEXISTS) || (format == VK_FORMAT_UNDEFINED))
 			{
 				assert(!"Failed to initialize graphics: Incompatible display mode.");
 			}
@@ -205,12 +205,12 @@
 
 		do
 		{
-			format = FORMAT_A8R8G8B8;
+			format = VK_FORMAT_B8G8R8A8_UNORM;
 			result = directDraw->SetDisplayMode(width, height, 32);
 
 			if(result == DDERR_INVALIDMODE)
 			{
-				format = FORMAT_R5G6B5;
+				format = VK_FORMAT_R5G6B5_UNORM_PACK16;
 				result = directDraw->SetDisplayMode(width, height, 16);
 
 				if(result == DDERR_INVALIDMODE)
diff --git a/src/WSI/FrameBufferGDI.cpp b/src/WSI/FrameBufferGDI.cpp
index e932eb4..f7c7d07 100644
--- a/src/WSI/FrameBufferGDI.cpp
+++ b/src/WSI/FrameBufferGDI.cpp
@@ -37,7 +37,7 @@
 
 		init(this->windowHandle);
 
-		format = FORMAT_A8R8G8B8;
+		format = VK_FORMAT_B8G8R8A8_UNORM;
 	}
 
 	FrameBufferGDI::~FrameBufferGDI()