Represent vector construction with ConstructorVector.

This constructor aggregates scalars and smaller vectors together into
one vector. It is not responsible for splats or typecasts; those are
handled in separate classes which were added previously.

Change-Id: I9194bec50d58d94c331e0bb883686e26b86af347
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/392816
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
diff --git a/src/sksl/SkSLDehydrator.cpp b/src/sksl/SkSLDehydrator.cpp
index 263dda2..abf0314 100644
--- a/src/sksl/SkSLDehydrator.cpp
+++ b/src/sksl/SkSLDehydrator.cpp
@@ -21,6 +21,7 @@
 #include "src/sksl/ir/SkSLConstructorMatrixResize.h"
 #include "src/sksl/ir/SkSLConstructorScalarCast.h"
 #include "src/sksl/ir/SkSLConstructorSplat.h"
+#include "src/sksl/ir/SkSLConstructorVector.h"
 #include "src/sksl/ir/SkSLConstructorVectorCast.h"
 #include "src/sksl/ir/SkSLContinueStatement.h"
 #include "src/sksl/ir/SkSLDiscardStatement.h"
@@ -323,6 +324,12 @@
                 this->writeExpressionSpan(e->as<ConstructorSplat>().argumentSpan());
                 break;
 
+            case Expression::Kind::kConstructorVector:
+                this->writeCommand(Rehydrator::kConstructorVector_Command);
+                this->write(e->type());
+                this->writeExpressionSpan(e->as<ConstructorVector>().argumentSpan());
+                break;
+
             case Expression::Kind::kConstructorVectorCast:
                 this->writeCommand(Rehydrator::kConstructorVectorCast_Command);
                 this->write(e->type());