RGB32F texture sampling fix

A cl recently introduced the XRB32F internal format, but while it
fixed some cases where this format is used as a rendertarget, it
seems to have caused regressions in sampling. A new case has been
added in the sampling code to handle this new format properly.

Change-Id: I7aa537a410d7b68c47771a72dec487e4b4c4e8be
Reviewed-on: https://swiftshader-review.googlesource.com/5147
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/Shader/SamplerCore.cpp b/src/Shader/SamplerCore.cpp
index 4f8943a..a6f0715 100644
--- a/src/Shader/SamplerCore.cpp
+++ b/src/Shader/SamplerCore.cpp
@@ -1950,6 +1950,15 @@
 			c.w = *Pointer<Float4>(buffer[f3] + index[3] * 16, 16);
 			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?
 			c.x.xy = *Pointer<Float4>(buffer[f0] + index[0] * 8);