diff --git a/src/Common/Math.hpp b/src/Common/Math.hpp
index 4d0d06b..c58bb52 100644
--- a/src/Common/Math.hpp
+++ b/src/Common/Math.hpp
@@ -209,49 +209,103 @@
 	template<const int n>
 	inline unsigned int unorm(float x)
 	{
-		const unsigned int max = 0xFFFFFFFF >> (32 - n);
+		static const unsigned int max = 0xFFFFFFFF >> (32 - n);
+		static const float maxf = static_cast<float>(max);
 
-		if(x > 1)
+		if(x >= 1.0f)
 		{
 			return max;
 		}
-		else if(x < 0)
+		else if(x <= 0.0f)
 		{
 			return 0;
 		}
 		else
 		{
-			return (unsigned int)(max * x + 0.5f);
+			return static_cast<unsigned int>(maxf * x + 0.5f);
 		}
 	}
 
 	template<const int n>
 	inline int snorm(float x)
 	{
-		const unsigned int min = 0x80000000 >> (32 - n);
-		const unsigned int max = 0xFFFFFFFF >> (32 - n + 1);
-		const unsigned int range = 0xFFFFFFFF >> (32 - n);
+		static const unsigned int min = 0x80000000 >> (32 - n);
+		static const unsigned int max = 0xFFFFFFFF >> (32 - n + 1);
+		static const float maxf = static_cast<float>(max);
+		static const unsigned int range = 0xFFFFFFFF >> (32 - n);
 
-		if(x > 0)
+		if(x >= 0.0f)
 		{
-			if(x > 1)
+			if(x >= 1.0f)
 			{
 				return max;
 			}
 			else
 			{
-				return (int)(max * x + 0.5f);
+				return static_cast<int>(maxf * x + 0.5f);
 			}
 		}
 		else
 		{
-			if(x < -1)
+			if(x <= -1.0f)
 			{
 				return min;
 			}
 			else
 			{
-				return (int)(max * x - 0.5f) & range;
+				return static_cast<int>(maxf * x - 0.5f) & range;
+			}
+		}
+	}
+
+	template<const int n>
+	inline unsigned int ucast(float x)
+	{
+		static const unsigned int max = 0xFFFFFFFF >> (32 - n);
+		static const float maxf = static_cast<float>(max);
+
+		if(x >= maxf)
+		{
+			return max;
+		}
+		else if(x <= 0.0f)
+		{
+			return 0;
+		}
+		else
+		{
+			return static_cast<unsigned int>(x + 0.5f);
+		}
+	}
+
+	template<const int n>
+	inline int scast(float x)
+	{
+		static const unsigned int min = 0x80000000 >> (32 - n);
+		static const unsigned int max = 0xFFFFFFFF >> (32 - n + 1);
+		static const float maxf = static_cast<float>(max);
+		static const unsigned int range = 0xFFFFFFFF >> (32 - n);
+
+		if(x > 0.0f)
+		{
+			if(x >= maxf)
+			{
+				return max;
+			}
+			else
+			{
+				return static_cast<int>(maxf * x + 0.5f);
+			}
+		}
+		else
+		{
+			if(x <= -1.0f)
+			{
+				return min;
+			}
+			else
+			{
+				return static_cast<int>(maxf * x - 0.5f) & range;
 			}
 		}
 	}
diff --git a/src/Renderer/Surface.cpp b/src/Renderer/Surface.cpp
index 61fc9bc..74213f9 100644
--- a/src/Renderer/Surface.cpp
+++ b/src/Renderer/Surface.cpp
@@ -66,9 +66,30 @@
 		case FORMAT_A8:
 			*(unsigned char*)element = unorm<8>(color.a);
 			break;
+		case FORMAT_R8I_SNORM:
+			*(char*)element = snorm<8>(color.r);
+			break;
 		case FORMAT_R8:
 			*(unsigned char*)element = unorm<8>(color.r);
 			break;
+		case FORMAT_R8I:
+			*(char*)element = scast<8>(color.r);
+			break;
+		case FORMAT_R8UI:
+			*(unsigned char*)element = ucast<8>(color.r);
+			break;
+		case FORMAT_R16I:
+			*(short*)element = scast<16>(color.r);
+			break;
+		case FORMAT_R16UI:
+			*(unsigned short*)element = ucast<16>(color.r);
+			break;
+		case FORMAT_R32I:
+			*(int*)element = static_cast<int>(color.r);
+			break;
+		case FORMAT_R32UI:
+			*(unsigned int*)element = static_cast<unsigned int>(color.r);
+			break;
 		case FORMAT_R3G3B2:
 			*(unsigned char*)element = (unorm<3>(color.r) << 5) | (unorm<3>(color.g) << 2) | (unorm<2>(color.b) << 0);
 			break;
@@ -102,30 +123,117 @@
 		case FORMAT_X8R8G8B8:
 			*(unsigned int*)element = 0xFF000000 | (unorm<8>(color.r) << 16) | (unorm<8>(color.g) << 8) | (unorm<8>(color.b) << 0);
 			break;
+		case FORMAT_A8B8G8R8I_SNORM:
+			*(unsigned int*)element = (static_cast<unsigned int>(snorm<8>(color.a)) << 24) |
+			                          (static_cast<unsigned int>(snorm<8>(color.b)) << 16) |
+			                          (static_cast<unsigned int>(snorm<8>(color.g)) << 8) |
+			                          (static_cast<unsigned int>(snorm<8>(color.r)) << 0);
+			break;
 		case FORMAT_A8B8G8R8:
 			*(unsigned int*)element = (unorm<8>(color.a) << 24) | (unorm<8>(color.b) << 16) | (unorm<8>(color.g) << 8) | (unorm<8>(color.r) << 0);
 			break;
+		case FORMAT_A8B8G8R8I:
+			*(unsigned int*)element = (static_cast<unsigned int>(scast<8>(color.a)) << 24) |
+			                          (static_cast<unsigned int>(scast<8>(color.b)) << 16) |
+			                          (static_cast<unsigned int>(scast<8>(color.g)) << 8) |
+			                          (static_cast<unsigned int>(scast<8>(color.r)) << 0);
+			break;
+		case FORMAT_A8B8G8R8UI:
+			*(unsigned int*)element = (ucast<8>(color.a) << 24) | (ucast<8>(color.b) << 16) | (ucast<8>(color.g) << 8) | (ucast<8>(color.r) << 0);
+			break;
+		case FORMAT_X8B8G8R8I_SNORM:
+			*(unsigned int*)element = 0x7F000000 |
+			                          (static_cast<unsigned int>(snorm<8>(color.b)) << 16) |
+			                          (static_cast<unsigned int>(snorm<8>(color.g)) << 8) |
+			                          (static_cast<unsigned int>(snorm<8>(color.r)) << 0);
+			break;
 		case FORMAT_X8B8G8R8:
 			*(unsigned int*)element = 0xFF000000 | (unorm<8>(color.b) << 16) | (unorm<8>(color.g) << 8) | (unorm<8>(color.r) << 0);
 			break;
+		case FORMAT_X8B8G8R8I:
+			*(unsigned int*)element = 0x7F000000 |
+			                          (static_cast<unsigned int>(scast<8>(color.b)) << 16) |
+			                          (static_cast<unsigned int>(scast<8>(color.g)) << 8) |
+			                          (static_cast<unsigned int>(scast<8>(color.r)) << 0);
+		case FORMAT_X8B8G8R8UI:
+			*(unsigned int*)element = 0xFF000000 | (ucast<8>(color.b) << 16) | (ucast<8>(color.g) << 8) | (ucast<8>(color.r) << 0);
+			break;
 		case FORMAT_A2R10G10B10:
 			*(unsigned int*)element = (unorm<2>(color.a) << 30) | (unorm<10>(color.r) << 20) | (unorm<10>(color.g) << 10) | (unorm<10>(color.b) << 0);
 			break;
 		case FORMAT_A2B10G10R10:
 			*(unsigned int*)element = (unorm<2>(color.a) << 30) | (unorm<10>(color.b) << 20) | (unorm<10>(color.g) << 10) | (unorm<10>(color.r) << 0);
 			break;
+		case FORMAT_G8R8I_SNORM:
+			*(unsigned short*)element = (static_cast<unsigned short>(snorm<8>(color.g)) << 8) |
+			                            (static_cast<unsigned short>(snorm<8>(color.r)) << 0);
+			break;
 		case FORMAT_G8R8:
-			*(unsigned int*)element = (unorm<8>(color.g) << 8) | (unorm<8>(color.r) << 0);
+			*(unsigned short*)element = (unorm<8>(color.g) << 8) | (unorm<8>(color.r) << 0);
+			break;
+		case FORMAT_G8R8I:
+			*(unsigned short*)element = (static_cast<unsigned short>(scast<8>(color.g)) << 8) |
+			                            (static_cast<unsigned short>(scast<8>(color.r)) << 0);
+			break;
+		case FORMAT_G8R8UI:
+			*(unsigned short*)element = (ucast<8>(color.g) << 8) | (ucast<8>(color.r) << 0);
 			break;
 		case FORMAT_G16R16:
 			*(unsigned int*)element = (unorm<16>(color.g) << 16) | (unorm<16>(color.r) << 0);
 			break;
+		case FORMAT_G16R16I:
+			*(unsigned int*)element = (static_cast<unsigned int>(scast<16>(color.g)) << 16) |
+			                          (static_cast<unsigned int>(scast<16>(color.r)) << 0);
+			break;
+		case FORMAT_G16R16UI:
+			*(unsigned int*)element = (ucast<16>(color.g) << 16) | (ucast<16>(color.r) << 0);
+			break;
+		case FORMAT_G32R32I:
+		case FORMAT_G32R32UI:
+			((unsigned int*)element)[0] = static_cast<unsigned int>(color.r);
+			((unsigned int*)element)[1] = static_cast<unsigned int>(color.g);
+			break;
 		case FORMAT_A16B16G16R16:
 			((unsigned short*)element)[0] = unorm<16>(color.r);
 			((unsigned short*)element)[1] = unorm<16>(color.g);
 			((unsigned short*)element)[2] = unorm<16>(color.b);
 			((unsigned short*)element)[3] = unorm<16>(color.a);
 			break;
+		case FORMAT_A16B16G16R16I:
+			((unsigned short*)element)[0] = static_cast<unsigned short>(scast<16>(color.r));
+			((unsigned short*)element)[1] = static_cast<unsigned short>(scast<16>(color.g));
+			((unsigned short*)element)[2] = static_cast<unsigned short>(scast<16>(color.b));
+			((unsigned short*)element)[3] = static_cast<unsigned short>(scast<16>(color.a));
+			break;
+		case FORMAT_A16B16G16R16UI:
+			((unsigned short*)element)[0] = static_cast<unsigned short>(ucast<16>(color.r));
+			((unsigned short*)element)[1] = static_cast<unsigned short>(ucast<16>(color.g));
+			((unsigned short*)element)[2] = static_cast<unsigned short>(ucast<16>(color.b));
+			((unsigned short*)element)[3] = static_cast<unsigned short>(ucast<16>(color.a));
+			break;
+		case FORMAT_X16B16G16R16I:
+			((unsigned short*)element)[0] = static_cast<unsigned short>(scast<16>(color.r));
+			((unsigned short*)element)[1] = static_cast<unsigned short>(scast<16>(color.g));
+			((unsigned short*)element)[2] = static_cast<unsigned short>(scast<16>(color.b));
+			break;
+		case FORMAT_X16B16G16R16UI:
+			((unsigned short*)element)[0] = static_cast<unsigned short>(ucast<16>(color.r));
+			((unsigned short*)element)[1] = static_cast<unsigned short>(ucast<16>(color.g));
+			((unsigned short*)element)[2] = static_cast<unsigned short>(ucast<16>(color.b));
+			break;
+		case FORMAT_A32B32G32R32I:
+		case FORMAT_A32B32G32R32UI:
+			((unsigned int*)element)[0] = static_cast<unsigned int>(color.r);
+			((unsigned int*)element)[1] = static_cast<unsigned int>(color.g);
+			((unsigned int*)element)[2] = static_cast<unsigned int>(color.b);
+			((unsigned int*)element)[3] = static_cast<unsigned int>(color.a);
+			break;
+		case FORMAT_X32B32G32R32I:
+		case FORMAT_X32B32G32R32UI:
+			((unsigned int*)element)[0] = static_cast<unsigned int>(color.r);
+			((unsigned int*)element)[1] = static_cast<unsigned int>(color.g);
+			((unsigned int*)element)[2] = static_cast<unsigned int>(color.b);
+			break;
 		case FORMAT_V8U8:
 			*(unsigned short*)element = (snorm<8>(color.g) << 8) | (snorm<8>(color.r) << 0);
 			break;
@@ -304,9 +412,18 @@
 			b = 0;
 			a = *(unsigned char*)element * (1.0f / 0xFF);
 			break;
+		case FORMAT_R8I_SNORM:
+			r = max((*(signed char*)element) * (1.0f / 0x7F), -1.0f);
+			break;
 		case FORMAT_R8:
 			r = *(unsigned char*)element * (1.0f / 0xFF);
 			break;
+		case FORMAT_R8I:
+			r = *(signed char*)element;
+			break;
+		case FORMAT_R8UI:
+			r = *(unsigned char*)element;
+			break;
 		case FORMAT_R3G3B2:
 			{
 				unsigned char rgb = *(unsigned char*)element;
@@ -412,6 +529,16 @@
 				b = (xrgb & 0x000000FF) * (1.0f / 0x000000FF);
 			}
 			break;
+		case FORMAT_A8B8G8R8I_SNORM:
+			{
+				signed char* abgr = (signed char*)element;
+				
+				r = max(abgr[0] * (1.0f / 0x7F), -1.0f);
+				g = max(abgr[1] * (1.0f / 0x7F), -1.0f);
+				b = max(abgr[2] * (1.0f / 0x7F), -1.0f);
+				a = max(abgr[3] * (1.0f / 0x7F), -1.0f);
+			}
+			break;
 		case FORMAT_A8B8G8R8:
 			{
 				unsigned int abgr = *(unsigned int*)element;
@@ -422,6 +549,35 @@
 				r = (abgr & 0x000000FF) * (1.0f / 0x000000FF);
 			}
 			break;
+		case FORMAT_A8B8G8R8I:
+			{
+				signed char* abgr = (signed char*)element;
+				
+				r = abgr[0];
+				g = abgr[1];
+				b = abgr[2];
+				a = abgr[3];
+			}
+			break;
+		case FORMAT_A8B8G8R8UI:
+			{
+				unsigned char* abgr = (unsigned char*)element;
+
+				r = abgr[0];
+				g = abgr[1];
+				b = abgr[2];
+				a = abgr[3];
+			}
+			break;
+		case FORMAT_X8B8G8R8I_SNORM:
+			{
+				signed char* bgr = (signed char*)element;
+				
+				r = max(bgr[0] * (1.0f / 0x7F), -1.0f);
+				g = max(bgr[1] * (1.0f / 0x7F), -1.0f);
+				b = max(bgr[2] * (1.0f / 0x7F), -1.0f);
+			}
+			break;
 		case FORMAT_X8B8G8R8:
 			{
 				unsigned int xbgr = *(unsigned int*)element;
@@ -431,6 +587,32 @@
 				r = (xbgr & 0x000000FF) * (1.0f / 0x000000FF);
 			}
 			break;
+		case FORMAT_X8B8G8R8I:
+			{
+				signed char* bgr = (signed char*)element;
+				
+				r = bgr[0];
+				g = bgr[1];
+				b = bgr[2];
+			}
+			break;
+		case FORMAT_X8B8G8R8UI:
+			{
+				unsigned char* bgr = (unsigned char*)element;
+
+				r = bgr[0];
+				g = bgr[1];
+				b = bgr[2];
+			}
+			break;
+		case FORMAT_G8R8I_SNORM:
+			{
+				signed char* gr = (signed char*)element;
+				
+				r = (gr[0] & 0xFF00) * (1.0f / 0xFF00);
+				g = (gr[1] & 0x00FF) * (1.0f / 0x00FF);
+			}
+			break;
 		case FORMAT_G8R8:
 			{
 				unsigned short gr = *(unsigned short*)element;
@@ -439,6 +621,36 @@
 				r = (gr & 0x00FF) * (1.0f / 0x00FF);
 			}
 			break;
+		case FORMAT_G8R8I:
+			{
+				signed char* gr = (signed char*)element;
+				
+				r = gr[0];
+				g = gr[1];
+			}
+			break;
+		case FORMAT_G8R8UI:
+			{
+				unsigned char* gr = (unsigned char*)element;
+				
+				r = gr[0];
+				g = gr[1];
+			}
+			break;
+		case FORMAT_R16I:
+			r = *((short*)element);
+			break;
+		case FORMAT_R16UI:
+			r = *((unsigned short*)element);
+			break;
+		case FORMAT_G16R16I:
+			{
+				short* gr = (short*)element;
+				
+				r = gr[0];
+				g = gr[1];
+			}
+			break;
 		case FORMAT_G16R16:
 			{
 				unsigned int gr = *(unsigned int*)element;
@@ -447,6 +659,14 @@
 				r = (gr & 0x0000FFFF) * (1.0f / 0x0000FFFF);
 			}
 			break;
+		case FORMAT_G16R16UI:
+			{
+				unsigned short* gr = (unsigned short*)element;
+				
+				r = gr[0];
+				g = gr[1];
+			}
+			break;
 		case FORMAT_A2R10G10B10:
 			{
 				unsigned int argb = *(unsigned int*)element;
@@ -467,12 +687,110 @@
 				r = (abgr & 0x000003FF) * (1.0f / 0x000003FF);
 			}
 			break;
+		case FORMAT_A16B16G16R16I:
+			{
+				short* abgr = (short*)element;
+				
+				r = abgr[0];
+				g = abgr[1];
+				b = abgr[2];
+				a = abgr[3];
+			}
+			break;
 		case FORMAT_A16B16G16R16:
 			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:
+			{
+				unsigned short* abgr = (unsigned short*)element;
+				
+				r = abgr[0];
+				g = abgr[1];
+				b = abgr[2];
+				a = abgr[3];
+			}
+			break;
+		case FORMAT_X16B16G16R16I:
+			{
+				short* bgr = (short*)element;
+				
+				r = bgr[0];
+				g = bgr[1];
+				b = bgr[2];
+			}
+			break;
+		case FORMAT_X16B16G16R16UI:
+			{
+				unsigned short* bgr = (unsigned short*)element;
+				
+				r = bgr[0];
+				g = bgr[1];
+				b = bgr[2];
+			}
+			break;
+		case FORMAT_A32B32G32R32I:
+			{
+				int* abgr = (int*)element;
+				
+				r = static_cast<float>(abgr[0]);
+				g = static_cast<float>(abgr[1]);
+				b = static_cast<float>(abgr[2]);
+				a = static_cast<float>(abgr[3]);
+			}
+			break;
+		case FORMAT_A32B32G32R32UI:
+			{
+				unsigned int* abgr = (unsigned int*)element;
+				
+				r = static_cast<float>(abgr[0]);
+				g = static_cast<float>(abgr[1]);
+				b = static_cast<float>(abgr[2]);
+				a = static_cast<float>(abgr[3]);
+			}
+			break;
+		case FORMAT_X32B32G32R32I:
+			{
+				int* bgr = (int*)element;
+				
+				r = static_cast<float>(bgr[0]);
+				g = static_cast<float>(bgr[1]);
+				b = static_cast<float>(bgr[2]);
+			}
+			break;
+		case FORMAT_X32B32G32R32UI:
+			{
+				unsigned int* bgr = (unsigned int*)element;
+				
+				r = static_cast<float>(bgr[0]);
+				g = static_cast<float>(bgr[1]);
+				b = static_cast<float>(bgr[2]);
+			}
+			break;
+		case FORMAT_G32R32I:
+			{
+				int* gr = (int*)element;
+				
+				r = static_cast<float>(gr[0]);
+				g = static_cast<float>(gr[1]);
+			}
+			break;
+		case FORMAT_G32R32UI:
+			{
+				unsigned int* gr = (unsigned int*)element;
+				
+				r = static_cast<float>(gr[0]);
+				g = static_cast<float>(gr[1]);
+			}
+			break;
+		case FORMAT_R32I:
+			r = static_cast<float>(*((int*)element));
+			break;
+		case FORMAT_R32UI:
+			r = static_cast<float>(*((unsigned int*)element));
+			break;
 		case FORMAT_V8U8:
 			{
 				unsigned short vu = *(unsigned short*)element;
@@ -1125,8 +1443,11 @@
 		case FORMAT_P8:					return 1;
 		case FORMAT_A8P8:				return 2;
 		case FORMAT_A8:					return 1;
+		case FORMAT_R8I:				return 1;
 		case FORMAT_R8:					return 1;
 		case FORMAT_R3G3B2:				return 1;
+		case FORMAT_R16I:				return 2;
+		case FORMAT_R16UI:				return 2;
 		case FORMAT_A8R3G3B2:			return 2;
 		case FORMAT_R5G6B5:				return 2;
 		case FORMAT_A1R5G5B5:			return 2;
@@ -1137,17 +1458,42 @@
 		case FORMAT_R4G4B4A4:           return 2;
 		case FORMAT_R8G8B8:				return 3;
 		case FORMAT_B8G8R8:             return 3;
+		case FORMAT_R32I:				return 4;
+		case FORMAT_R32UI:				return 4;
 		case FORMAT_X8R8G8B8:			return 4;
 	//	case FORMAT_X8G8R8B8Q:			return 4;
 		case FORMAT_A8R8G8B8:			return 4;
 	//	case FORMAT_A8G8R8B8Q:			return 4;
+		case FORMAT_X8B8G8R8I:			return 4;
 		case FORMAT_X8B8G8R8:			return 4;
+		case FORMAT_A8B8G8R8I:			return 4;
+		case FORMAT_R8UI:				return 1;
+		case FORMAT_G8R8UI:				return 2;
+		case FORMAT_X8B8G8R8UI:			return 4;
+		case FORMAT_A8B8G8R8UI:			return 4;
 		case FORMAT_A8B8G8R8:			return 4;
+		case FORMAT_R8I_SNORM:			return 1;
+		case FORMAT_G8R8I_SNORM:		return 2;
+		case FORMAT_X8B8G8R8I_SNORM:	return 4;
+		case FORMAT_A8B8G8R8I_SNORM:	return 4;
 		case FORMAT_A2R10G10B10:		return 4;
 		case FORMAT_A2B10G10R10:		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_X16B16G16R16I:		return 8;
+		case FORMAT_X16B16G16R16UI:		return 8;
+		case FORMAT_A16B16G16R16I:		return 8;
+		case FORMAT_A16B16G16R16UI:		return 8;
 		case FORMAT_A16B16G16R16:		return 8;
+		case FORMAT_X32B32G32R32I:		return 16;
+		case FORMAT_X32B32G32R32UI:		return 16;
+		case FORMAT_A32B32G32R32I:		return 16;
+		case FORMAT_A32B32G32R32UI:		return 16;
 		// Compressed formats
 		#if S3TC_SUPPORT
 		case FORMAT_DXT1:				return 2;   // Column of four pixels
@@ -2370,8 +2716,20 @@
 		case FORMAT_A8R8G8B8:
 		case FORMAT_A8B8G8R8:
 		case FORMAT_G8R8:
+		case FORMAT_R16UI:
 		case FORMAT_G16R16:
+		case FORMAT_G16R16UI:
+		case FORMAT_X16B16G16R16UI:
 		case FORMAT_A16B16G16R16:
+		case FORMAT_A16B16G16R16UI:
+		case FORMAT_R32UI:
+		case FORMAT_G32R32UI:
+		case FORMAT_X32B32G32R32UI:
+		case FORMAT_A32B32G32R32UI:
+		case FORMAT_R8UI:
+		case FORMAT_G8R8UI:
+		case FORMAT_X8B8G8R8UI:
+		case FORMAT_A8B8G8R8UI:
 		case FORMAT_D32F:
 		case FORMAT_D32F_COMPLEMENTARY:
 		case FORMAT_D32F_LOCKABLE:
@@ -2386,49 +2744,35 @@
 		case FORMAT_YV12_BT709:
 		case FORMAT_YV12_JFIF:
 			return true;
+		case FORMAT_A8B8G8R8I:
+		case FORMAT_A16B16G16R16I:
+		case FORMAT_A32B32G32R32I:
+		case FORMAT_A8B8G8R8I_SNORM:
+		case FORMAT_Q8W8V8U8:
+		case FORMAT_Q16W16V16U16:
+		case FORMAT_A32B32G32R32F:
+			return false;
+		case FORMAT_R32F:
+		case FORMAT_R8I:
+		case FORMAT_R16I:
+		case FORMAT_R32I:
+		case FORMAT_R8I_SNORM:
+			return component >= 1;
 		case FORMAT_V8U8:
 		case FORMAT_X8L8V8U8:
 		case FORMAT_V16U16:
-			if(component < 2)
-			{
-				return false;
-			}
-			else
-			{
-				return true;
-			}
-		case FORMAT_A16W16V16U16:
-			if(component < 3)
-			{
-				return false;
-			}
-			else
-			{
-				return true;
-			}
-		case FORMAT_Q8W8V8U8:
-		case FORMAT_Q16W16V16U16:
-			return false;
-		case FORMAT_R32F:
-			if(component < 1)
-			{
-				return false;
-			}
-			else
-			{
-				return true;
-			}
 		case FORMAT_G32R32F:
-			if(component < 2)
-			{
-				return false;
-			}
-			else
-			{
-				return true;
-			}
-		case FORMAT_A32B32G32R32F:
-			return false;
+		case FORMAT_G8R8I:
+		case FORMAT_G16R16I:
+		case FORMAT_G32R32I:
+		case FORMAT_G8R8I_SNORM:
+			return component >= 2;
+		case FORMAT_A16W16V16U16:
+		case FORMAT_X8B8G8R8I:
+		case FORMAT_X16B16G16R16I:
+		case FORMAT_X32B32G32R32I:
+		case FORMAT_X8B8G8R8I_SNORM:
+			return component >= 3;
 		default:
 			ASSERT(false);
 		}
@@ -2580,12 +2924,35 @@
 		{
 		case FORMAT_R5G6B5:         return 3;
 		case FORMAT_X8R8G8B8:       return 3;
+		case FORMAT_X8B8G8R8I:      return 3;
 		case FORMAT_X8B8G8R8:       return 3;
 		case FORMAT_A8R8G8B8:       return 4;
+		case FORMAT_A8B8G8R8I:      return 4;
 		case FORMAT_A8B8G8R8:       return 4;
+		case FORMAT_G8R8I:          return 2;
 		case FORMAT_G8R8:           return 2;
+		case FORMAT_R8I_SNORM:      return 1;
+		case FORMAT_G8R8I_SNORM:    return 2;
+		case FORMAT_X8B8G8R8I_SNORM:return 3;
+		case FORMAT_A8B8G8R8I_SNORM:return 4;
+		case FORMAT_R8UI:           return 1;
+		case FORMAT_G8R8UI:         return 2;
+		case FORMAT_X8B8G8R8UI:     return 3;
+		case FORMAT_A8B8G8R8UI:     return 4;
+		case FORMAT_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_X16B16G16R16I:  return 3;
+		case FORMAT_X16B16G16R16UI: return 3;
+		case FORMAT_A16B16G16R16I:  return 4;
+		case FORMAT_A16B16G16R16UI: return 4;
 		case FORMAT_A16B16G16R16:   return 4;
+		case FORMAT_X32B32G32R32I:  return 3;
+		case FORMAT_X32B32G32R32UI: return 3;
+		case FORMAT_A32B32G32R32I:  return 4;
+		case FORMAT_A32B32G32R32UI: return 4;
 		case FORMAT_V8U8:           return 2;
 		case FORMAT_Q8W8V8U8:       return 4;
 		case FORMAT_X8L8V8U8:       return 3;
@@ -2595,11 +2962,17 @@
 		case FORMAT_R32F:           return 1;
 		case FORMAT_G32R32F:        return 2;
 		case FORMAT_A32B32G32R32F:  return 4;
+		case FORMAT_D32F:           return 1;
 		case FORMAT_D32F_LOCKABLE:  return 1;
 		case FORMAT_D32FS8_TEXTURE: return 1;
 		case FORMAT_D32FS8_SHADOW:  return 1;
 		case FORMAT_A8:             return 1;
+		case FORMAT_R8I:            return 1;
 		case FORMAT_R8:             return 1;
+		case FORMAT_R16I:           return 1;
+		case FORMAT_R16UI:          return 1;
+		case FORMAT_R32I:           return 1;
+		case FORMAT_R32UI:          return 1;
 		case FORMAT_L8:             return 1;
 		case FORMAT_L16:            return 1;
 		case FORMAT_A8L8:           return 2;
@@ -3457,16 +3830,56 @@
 			return FORMAT_A8R8G8B8;
 		case FORMAT_A8:
 			return FORMAT_A8;
+		case FORMAT_R8I:
+			return FORMAT_R8I;
+		case FORMAT_R8UI:
+			return FORMAT_R8UI;
+		case FORMAT_R8I_SNORM:
+			return FORMAT_R8I_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_A2R10G10B10:
 		case FORMAT_A2B10G10R10:
+		case FORMAT_X16B16G16R16I:
+		case FORMAT_A16B16G16R16I:
+			return FORMAT_A16B16G16R16I;
+		case FORMAT_X16B16G16R16UI:
+		case FORMAT_A16B16G16R16UI:
+			return FORMAT_A16B16G16R16UI;
 		case FORMAT_A16B16G16R16:
 			return FORMAT_A16B16G16R16;
+		case FORMAT_X32B32G32R32I:
+		case FORMAT_A32B32G32R32I:
+			return FORMAT_A32B32G32R32I;
+		case FORMAT_X32B32G32R32UI:
+		case FORMAT_A32B32G32R32UI:
+			return FORMAT_A32B32G32R32UI;
+		case FORMAT_G8R8I:
+			return FORMAT_G8R8I;
+		case FORMAT_G8R8UI:
+			return FORMAT_G8R8UI;
+		case FORMAT_G8R8I_SNORM:
+			return FORMAT_G8R8I_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:
 			if(lockable || !quadLayoutEnabled)
 			{
@@ -3476,6 +3889,12 @@
 			{
 				return FORMAT_A8G8R8B8Q;
 			}
+		case FORMAT_A8B8G8R8I:
+			return FORMAT_A8B8G8R8I;
+		case FORMAT_A8B8G8R8UI:
+			return FORMAT_A8B8G8R8UI;
+		case FORMAT_A8B8G8R8I_SNORM:
+			return FORMAT_A8B8G8R8I_SNORM;
 		case FORMAT_R5G5B5A1:
 		case FORMAT_R4G4B4A4:
 		case FORMAT_A8B8G8R8:
@@ -3495,6 +3914,12 @@
 			{
 				return FORMAT_X8G8R8B8Q;
 			}
+		case FORMAT_X8B8G8R8I:
+			return FORMAT_X8B8G8R8I;
+		case FORMAT_X8B8G8R8UI:
+			return FORMAT_X8B8G8R8UI;
+		case FORMAT_X8B8G8R8I_SNORM:
+			return FORMAT_X8B8G8R8I_SNORM;
 		case FORMAT_B8G8R8:
 		case FORMAT_X8B8G8R8:
 			return FORMAT_X8B8G8R8;
@@ -3599,6 +4024,7 @@
 			{
 				return FORMAT_D32F;
 			}
+		case FORMAT_D32F:           return FORMAT_D32F;
 		case FORMAT_D32F_LOCKABLE:  return FORMAT_D32F_LOCKABLE;
 		case FORMAT_D32FS8_TEXTURE: return FORMAT_D32FS8_TEXTURE;
 		case FORMAT_INTZ:           return FORMAT_D32FS8_TEXTURE;
