Make RendererD3D a bit smaller.

Move some D3D11-specific stuff into Renderer11, and remove a few
virtual methods that weren't needed to be virtual.

BUG=angleproject:1369

Change-Id: Id37e7271ffc28b089dbea123dca70f38c1a06ffb
Reviewed-on: https://chromium-review.googlesource.com/345913
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/common/string_utils.cpp b/src/common/string_utils.cpp
index acb0376..73da759 100644
--- a/src/common/string_utils.cpp
+++ b/src/common/string_utils.cpp
@@ -12,6 +12,8 @@
 #include <fstream>
 #include <sstream>
 
+#include "common/platform.h"
+
 namespace angle
 {
 
@@ -133,4 +135,24 @@
     return !inFile.fail();
 }
 
+Optional<std::vector<wchar_t>> WidenString(size_t length, const char *cString)
+{
+    std::vector<wchar_t> wcstring(length + 1);
+#if !defined(ANGLE_PLATFORM_WINDOWS)
+    size_t written = mbstowcs(wcstring.data(), cString, length + 1);
+    if (written == 0)
+    {
+        return Optional<std::vector<wchar_t>>::Invalid();
+    }
+#else
+    size_t convertedChars = 0;
+    errno_t err = mbstowcs_s(&convertedChars, wcstring.data(), length + 1, cString, _TRUNCATE);
+    if (err != 0)
+    {
+        return Optional<std::vector<wchar_t>>::Invalid();
+    }
+#endif
+    return Optional<std::vector<wchar_t>>(wcstring);
 }
+
+}  // namespace angle