Fix transform feedback type.

We were using the wrong enum for the varying type, as well as using
the row count of the type. We should be using the column count, but
for matrices we treat them as transposed.

BUG=angle:679

Change-Id: I0eb7f68f629a4372c6822f65b2de51ecc88a03ed
Reviewed-on: https://chromium-review.googlesource.com/204520
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libGLESv2/renderer/d3d11/Renderer11.cpp b/src/libGLESv2/renderer/d3d11/Renderer11.cpp
index bd54252..a58822f 100644
--- a/src/libGLESv2/renderer/d3d11/Renderer11.cpp
+++ b/src/libGLESv2/renderer/d3d11/Renderer11.cpp
@@ -2632,6 +2632,8 @@
                 for (size_t i = 0; i < transformFeedbackVaryings.size(); i++)
                 {
                     const gl::LinkedVarying &varying = transformFeedbackVaryings[i];
+                    GLenum transposedType = gl::TransposeMatrixType(varying.type);
+
                     for (size_t j = 0; j < varying.semanticIndexCount; j++)
                     {
                         D3D11_SO_DECLARATION_ENTRY entry = { 0 };
@@ -2639,7 +2641,7 @@
                         entry.SemanticName = varying.semanticName.c_str();
                         entry.SemanticIndex = varying.semanticIndex + j;
                         entry.StartComponent = 0;
-                        entry.ComponentCount = gl::VariableRowCount(type);
+                        entry.ComponentCount = gl::VariableColumnCount(transposedType);
                         entry.OutputSlot = (separatedOutputBuffers ? i : 0);
                         soDeclaration.push_back(entry);
                     }