Changes gl::RenderbufferStorage to rx::RenderbufferImpl

BUG=angle:782

Also eliminates Colorbuffer/DepthStencilBuffer and related friends
and adds the RenderbufferD3D implementation of RenderbufferImpl.

This version fixes problems with the prior CL's handling of
render target serial issuance.

Change-Id: I7ddfbec1097723d7ea6ce93a9c034f941349108a
Reviewed-on: https://chromium-review.googlesource.com/227195
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Shannon Woods <shannonwoods@chromium.org>
diff --git a/src/libGLESv2/Renderbuffer.cpp b/src/libGLESv2/Renderbuffer.cpp
index 9406fce..30a7b86 100644
--- a/src/libGLESv2/Renderbuffer.cpp
+++ b/src/libGLESv2/Renderbuffer.cpp
@@ -4,9 +4,9 @@
 // found in the LICENSE file.
 //
 
-// Renderbuffer.cpp: the gl::Renderbuffer class and its derived classes
-// Colorbuffer, Depthbuffer and Stencilbuffer. Implements GL renderbuffer
-// objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108.
+// Renderbuffer.cpp: Implements the renderer-agnostic gl::Renderbuffer class,
+// GL renderbuffer objects and related functionality.
+// [OpenGL ES 2.0.24] section 4.4.3 page 108.
 
 #include "libGLESv2/Renderbuffer.h"
 #include "libGLESv2/Texture.h"
@@ -14,67 +14,70 @@
 #include "libGLESv2/FramebufferAttachment.h"
 #include "libGLESv2/renderer/Renderer.h"
 #include "libGLESv2/renderer/RenderTarget.h"
+#include "libGLESv2/renderer/RenderbufferImpl.h"
 
 #include "common/utilities.h"
 
 namespace gl
 {
-unsigned int RenderbufferStorage::mCurrentSerial = 1;
-
-Renderbuffer::Renderbuffer(GLuint id, RenderbufferStorage *newStorage)
+Renderbuffer::Renderbuffer(rx::RenderbufferImpl *impl, GLuint id)
   : RefCountObject(id),
-    mStorage(newStorage)
+    mRenderbuffer(impl)
 {
-    ASSERT(mStorage);
+    ASSERT(mRenderbuffer);
+
+    mWidth = mRenderbuffer->getWidth();
+    mHeight = mRenderbuffer->getHeight();
+    mInternalFormat = mRenderbuffer->getInternalFormat();
+    mActualFormat = mRenderbuffer->getActualFormat();
+    mSamples = mRenderbuffer->getSamples();
 }
 
 Renderbuffer::~Renderbuffer()
 {
-    SafeDelete(mStorage);
+    SafeDelete(mRenderbuffer);
 }
 
-void Renderbuffer::setStorage(RenderbufferStorage *newStorage)
+void Renderbuffer::setStorage(GLsizei width, GLsizei height, GLenum internalformat, GLsizei samples)
 {
-    ASSERT(newStorage);
+    mWidth = width;
+    mHeight = height;
+    mInternalFormat = internalformat;
+    mSamples = samples;
 
-    SafeDelete(mStorage);
-    mStorage = newStorage;
+    mRenderbuffer->setStorage(width, height, internalformat, samples);
+    mActualFormat = mRenderbuffer->getActualFormat();
 }
 
-RenderbufferStorage *Renderbuffer::getStorage()
+rx::RenderbufferImpl *Renderbuffer::getImplementation()
 {
-    ASSERT(mStorage);
-    return mStorage;
+    ASSERT(mRenderbuffer);
+    return mRenderbuffer;
 }
 
 GLsizei Renderbuffer::getWidth() const
 {
-    ASSERT(mStorage);
-    return mStorage->getWidth();
+    return mWidth;
 }
 
 GLsizei Renderbuffer::getHeight() const
 {
-    ASSERT(mStorage);
-    return mStorage->getHeight();
+    return mHeight;
 }
 
 GLenum Renderbuffer::getInternalFormat() const
 {
-    ASSERT(mStorage);
-    return mStorage->getInternalFormat();
+    return mInternalFormat;
 }
 
 GLenum Renderbuffer::getActualFormat() const
 {
-    ASSERT(mStorage);
-    return mStorage->getActualFormat();
+    return mActualFormat;
 }
 
 GLsizei Renderbuffer::getSamples() const
 {
-    ASSERT(mStorage);
-    return mStorage->getSamples();
+    return mSamples;
 }
 
 GLuint Renderbuffer::getRedSize() const
@@ -107,176 +110,4 @@
     return GetInternalFormatInfo(getActualFormat()).stencilBits;
 }
 
-RenderbufferStorage::RenderbufferStorage() : mSerial(issueSerials(1))
-{
-    mWidth = 0;
-    mHeight = 0;
-    mInternalFormat = GL_RGBA4;
-    mActualFormat = GL_RGBA8_OES;
-    mSamples = 0;
-}
-
-RenderbufferStorage::~RenderbufferStorage()
-{
-}
-
-rx::RenderTarget *RenderbufferStorage::getRenderTarget()
-{
-    return NULL;
-}
-
-GLsizei RenderbufferStorage::getWidth() const
-{
-    return mWidth;
-}
-
-GLsizei RenderbufferStorage::getHeight() const
-{
-    return mHeight;
-}
-
-GLenum RenderbufferStorage::getInternalFormat() const
-{
-    return mInternalFormat;
-}
-
-GLenum RenderbufferStorage::getActualFormat() const
-{
-    return mActualFormat;
-}
-
-GLsizei RenderbufferStorage::getSamples() const
-{
-    return mSamples;
-}
-
-unsigned int RenderbufferStorage::getSerial() const
-{
-    return mSerial;
-}
-
-unsigned int RenderbufferStorage::issueSerials(unsigned int count)
-{
-    unsigned int firstSerial = mCurrentSerial;
-    mCurrentSerial += count;
-    return firstSerial;
-}
-
-bool RenderbufferStorage::isTexture() const
-{
-    return false;
-}
-
-unsigned int RenderbufferStorage::getTextureSerial() const
-{
-    return -1;
-}
-
-Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
-{
-    mRenderTarget = renderer->createRenderTarget(swapChain, false); 
-
-    if (mRenderTarget)
-    {
-        mWidth = mRenderTarget->getWidth();
-        mHeight = mRenderTarget->getHeight();
-        mInternalFormat = mRenderTarget->getInternalFormat();
-        mActualFormat = mRenderTarget->getActualFormat();
-        mSamples = mRenderTarget->getSamples();
-    }
-}
-
-Colorbuffer::Colorbuffer(rx::Renderer *renderer, int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
-{
-    mRenderTarget = renderer->createRenderTarget(width, height, format, samples);
-
-    if (mRenderTarget)
-    {
-        mWidth = width;
-        mHeight = height;
-        mInternalFormat = format;
-        mActualFormat = mRenderTarget->getActualFormat();
-        mSamples = mRenderTarget->getSamples();
-    }
-}
-
-Colorbuffer::~Colorbuffer()
-{
-    if (mRenderTarget)
-    {
-        delete mRenderTarget;
-    }
-}
-
-rx::RenderTarget *Colorbuffer::getRenderTarget()
-{
-    return mRenderTarget;
-}
-
-DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
-{
-    mDepthStencil = renderer->createRenderTarget(swapChain, true);
-    if (mDepthStencil)
-    {
-        mWidth = mDepthStencil->getWidth();
-        mHeight = mDepthStencil->getHeight();
-        mInternalFormat = mDepthStencil->getInternalFormat();
-        mSamples = mDepthStencil->getSamples();
-        mActualFormat = mDepthStencil->getActualFormat();
-    }
-}
-
-DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples)
-{
-
-    mDepthStencil = renderer->createRenderTarget(width, height, GL_DEPTH24_STENCIL8_OES, samples);
-
-    mWidth = mDepthStencil->getWidth();
-    mHeight = mDepthStencil->getHeight();
-    mInternalFormat = GL_DEPTH24_STENCIL8_OES;
-    mActualFormat = mDepthStencil->getActualFormat();
-    mSamples = mDepthStencil->getSamples();
-}
-
-DepthStencilbuffer::~DepthStencilbuffer()
-{
-    if (mDepthStencil)
-    {
-        delete mDepthStencil;
-    }
-}
-
-rx::RenderTarget *DepthStencilbuffer::getRenderTarget()
-{
-    return mDepthStencil;
-}
-
-Depthbuffer::Depthbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
-{
-    if (mDepthStencil)
-    {
-        mInternalFormat = GL_DEPTH_COMPONENT16;   // If the renderbuffer parameters are queried, the calling function
-                                                  // will expect one of the valid renderbuffer formats for use in 
-                                                  // glRenderbufferStorage
-    }
-}
-
-Depthbuffer::~Depthbuffer()
-{
-}
-
-Stencilbuffer::Stencilbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)
-{
-    if (mDepthStencil)
-    {
-        mInternalFormat = GL_STENCIL_INDEX8;   // If the renderbuffer parameters are queried, the calling function
-                                               // will expect one of the valid renderbuffer formats for use in 
-                                               // glRenderbufferStorage
-    }
-}
-
-Stencilbuffer::~Stencilbuffer()
-{
-}
-
 }