Support 3-component integer formats natively.

Change-Id: Id48bc7a232c50b753da64cb914e75b5d590ae47d
Reviewed-on: https://swiftshader-review.googlesource.com/14369
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Shader/SamplerCore.cpp b/src/Shader/SamplerCore.cpp
index c51dbf9..0c86815 100644
--- a/src/Shader/SamplerCore.cpp
+++ b/src/Shader/SamplerCore.cpp
@@ -2001,6 +2001,13 @@
 				c.w = Pointer<Short4>(buffer[f3])[index[3]];
 				transpose4x4(c.x, c.y, c.z, c.w);
 				break;
+			case 3:
+				c.x = Pointer<Short4>(buffer[f0])[index[0]];
+				c.y = Pointer<Short4>(buffer[f1])[index[1]];
+				c.z = Pointer<Short4>(buffer[f2])[index[2]];
+				c.w = Pointer<Short4>(buffer[f3])[index[3]];
+				transpose4x3(c.x, c.y, c.z, c.w);
+				break;
 			case 2:
 				c.x = *Pointer<Short4>(buffer[f0] + 4 * index[0]);
 				c.x = As<Short4>(UnpackLow(c.x, *Pointer<Short4>(buffer[f1] + 4 * index[1])));
@@ -2159,13 +2166,11 @@
 				transpose4x4(c.x, c.y, c.z, c.w);
 				break;
 			case 3:
-				ASSERT(state.textureFormat == FORMAT_X32B32G32R32F);
 				c.x = *Pointer<Float4>(buffer[f0] + index[0] * 16, 16);
 				c.y = *Pointer<Float4>(buffer[f1] + index[1] * 16, 16);
 				c.z = *Pointer<Float4>(buffer[f2] + index[2] * 16, 16);
 				c.w = *Pointer<Float4>(buffer[f3] + index[3] * 16, 16);
 				transpose4x3(c.x, c.y, c.z, c.w);
-				c.w = Float4(1.0f);
 				break;
 			case 2:
 				// FIXME: Optimal shuffling?