Add generic Impl casting helper methods.

GetAs and GetImplAs are template helpers that can replace all of our
custom "makeTextureD3D", etc methods. This will help save code across
different back-ends.

Change-Id: Ib3215c005bfac5a819c5d8f7d60a73a725241332
Reviewed-on: https://chromium-review.googlesource.com/245390
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/d3d/VertexDataManager.cpp b/src/libANGLE/renderer/d3d/VertexDataManager.cpp
index eade346..c051a8a 100644
--- a/src/libANGLE/renderer/d3d/VertexDataManager.cpp
+++ b/src/libANGLE/renderer/d3d/VertexDataManager.cpp
@@ -95,7 +95,7 @@
         if (attrib.enabled)
         {
             gl::Buffer *buffer = attrib.buffer.get();
-            BufferD3D *storage = buffer ? BufferD3D::makeBufferD3D(buffer->getImplementation()) : NULL;
+            BufferD3D *storage = buffer ? GetImplAs<BufferD3D>(buffer) : NULL;
             StaticVertexBufferInterface *staticBuffer = storage ? storage->getStaticVertexBuffer() : NULL;
 
             if (staticBuffer)
@@ -196,7 +196,7 @@
 
             if (buffer)
             {
-                BufferD3D *bufferImpl = BufferD3D::makeBufferD3D(buffer->getImplementation());
+                BufferD3D *bufferImpl = GetImplAs<BufferD3D>(buffer);
                 bufferImpl->promoteStaticUsage(count * ComputeVertexAttributeTypeSize(curAttrib));
             }
         }
@@ -212,7 +212,7 @@
 
     if (buffer)
     {
-        BufferD3D *bufferImpl = BufferD3D::makeBufferD3D(buffer->getImplementation());
+        BufferD3D *bufferImpl = GetImplAs<BufferD3D>(buffer);
         StaticVertexBufferInterface *staticBuffer = bufferImpl->getStaticVertexBuffer();
 
         if (staticBuffer &&
@@ -231,7 +231,7 @@
                                                    GLsizei instances) const
 {
     gl::Buffer *buffer = attrib.buffer.get();
-    BufferD3D *bufferImpl = buffer ? BufferD3D::makeBufferD3D(buffer->getImplementation()) : NULL;
+    BufferD3D *bufferImpl = buffer ? GetImplAs<BufferD3D>(buffer) : NULL;
     StaticVertexBufferInterface *staticBuffer = bufferImpl ? bufferImpl->getStaticVertexBuffer() : NULL;
     VertexBufferInterface *vertexBuffer = staticBuffer ? staticBuffer : static_cast<VertexBufferInterface*>(mStreamingBuffer);
 
@@ -275,7 +275,7 @@
     gl::Buffer *buffer = attrib.buffer.get();
     ASSERT(buffer || attrib.pointer);
 
-    BufferD3D *storage = buffer ? BufferD3D::makeBufferD3D(buffer->getImplementation()) : NULL;
+    BufferD3D *storage = buffer ? GetImplAs<BufferD3D>(buffer) : NULL;
     StaticVertexBufferInterface *staticBuffer = storage ? storage->getStaticVertexBuffer() : NULL;
     VertexBufferInterface *vertexBuffer = staticBuffer ? staticBuffer : static_cast<VertexBufferInterface*>(mStreamingBuffer);
     bool directStorage = vertexBuffer->directStoragePossible(attrib, currentValue);