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/FramebufferD3D.cpp b/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
index 7d93ea4..263f980 100644
--- a/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
+++ b/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
@@ -333,7 +333,7 @@
     {
         gl::Texture *texture = attachment->getTexture();
         ASSERT(texture);
-        TextureD3D *textureD3D = TextureD3D::makeTextureD3D(texture->getImplementation());
+        TextureD3D *textureD3D = GetImplAs<TextureD3D>(texture);
         const gl::ImageIndex *index = attachment->getTextureImageIndex();
         ASSERT(index);
         return textureD3D->getRenderTarget(*index, outRT);
@@ -369,7 +369,7 @@
     {
         gl::Texture *texture = attachment->getTexture();
         ASSERT(texture);
-        TextureD3D *textureD3D = TextureD3D::makeTextureD3D(texture->getImplementation());
+        TextureD3D *textureD3D = GetImplAs<TextureD3D>(texture);
         const gl::ImageIndex *index = attachment->getTextureImageIndex();
         ASSERT(index);
         return textureD3D->getRenderTargetSerial(*index);