Construct SIMD pointers from an std::vector instead of array

Pointer4 is slated to become SIMD::Pointer and thus should not be
constructed from 4 scalar pointers or an std::array<> of size 4. This
change makes it take an std::vector<> instead so it can have arbitrary
SIMD width in a subsequent change.

The castFrom() methods were using 4 nullptr arguments to initialize a
Pointer4 variable as being of 'array' type. Instead of replacing that
with an std::vector<> of nullptr elements, these methods were replaced
with constructors which initialize the class to the right type.

Bug: b/214583550
Change-Id: I0eff17a9ff5ef4e0822e0108a6aad64727c81249
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/66790
Reviewed-by: Alexis Hétu <sugoi@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Pipeline/SpirvShaderMemory.cpp b/src/Pipeline/SpirvShaderMemory.cpp
index 0317704..b3caa83 100644
--- a/src/Pipeline/SpirvShaderMemory.cpp
+++ b/src/Pipeline/SpirvShaderMemory.cpp
@@ -432,7 +432,7 @@
 				auto robustness = getOutOfBoundsBehavior(id, state);
 				ASSERT(routine->pipelineLayout->getDescriptorType(d.DescriptorSet, d.Binding) != VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT);
 
-				std::array<Pointer<Byte>, 4> pointers;
+				std::vector<Pointer<Byte>> pointers(SIMD::Width);
 				for(int i = 0; i < SIMD::Width; i++)
 				{
 					pointers[i] = *Pointer<Pointer<Byte>>(set.getPointerForLane(i) + Extract(descriptorOffset, i) + OFFSET(vk::BufferDescriptor, ptr));