Add a helper to replace FBO attachment's getSerial.

Ideally we could store a render target serial in the render target
itself. For now, this helper function allows us to finally stop
exposing rx::RenderTarget from gl::Texture.

BUG=angle:732

Change-Id: I4ffc5e0af6f0542212ad4e74adced21ebbd89462
Reviewed-on: https://chromium-review.googlesource.com/217330
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libGLESv2/Framebuffer.cpp b/src/libGLESv2/Framebuffer.cpp
index 4430e50..e82e34d 100644
--- a/src/libGLESv2/Framebuffer.cpp
+++ b/src/libGLESv2/Framebuffer.cpp
@@ -29,6 +29,7 @@
         gl::Texture *texture = attachment->getTexture();
         ASSERT(texture);
         TextureD3D *textureD3D = TextureD3D::makeTextureD3D(texture->getImplementation());
+
         return textureD3D->getRenderTarget(attachment->mipLevel(), attachment->layer());
     }
 
@@ -39,6 +40,24 @@
     return renderbuffer->getStorage()->getRenderTarget();
 }
 
+// Note: RenderTarget serials should ideally be in the RenderTargets themselves.
+unsigned int GetAttachmentSerial(gl::FramebufferAttachment *attachment)
+{
+    if (attachment->isTexture())
+    {
+        gl::Texture *texture = attachment->getTexture();
+        ASSERT(texture);
+        TextureD3D *textureD3D = TextureD3D::makeTextureD3D(texture->getImplementation());
+        return textureD3D->getRenderTargetSerial(attachment->mipLevel(), attachment->layer());
+    }
+
+    gl::Renderbuffer *renderbuffer = attachment->getRenderbuffer();
+    ASSERT(renderbuffer);
+
+    // TODO: cast to RenderbufferD3D
+    return renderbuffer->getStorage()->getSerial();
+}
+
 }
 
 namespace gl