Moves creation of renderer-specific texture storage objects to the renderer.

TRAC #22300

Author: Shannon Woods
Signed-off-by: Geoff Lang
Signed-off-by: Daniel Koch

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1614 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/Renderer.h b/src/libGLESv2/renderer/Renderer.h
index 40fc000..fd13609 100644
--- a/src/libGLESv2/renderer/Renderer.h
+++ b/src/libGLESv2/renderer/Renderer.h
@@ -173,6 +173,9 @@
     // Image operations
     virtual Image *createImage() = 0;
     virtual void generateMipmap(Image *dest, Image *source) = 0;
+    virtual TextureStorage *createTextureStorage2D(SwapChain *swapChain) = 0;
+    virtual TextureStorage *createTextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height) = 0;
+    virtual TextureStorage *createTextureStorageCube(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size) = 0;
 
     // Buffer creation
     virtual VertexBuffer *createVertexBuffer() = 0;
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index 15d5126..e2a20bb 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -1274,4 +1274,25 @@
     return;
 }
 
+TextureStorage *Renderer11::createTextureStorage2D(SwapChain *swapChain)
+{
+    // TODO 
+    UNIMPLEMENTED();
+    return NULL;
+}
+
+TextureStorage *Renderer11::createTextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
+{
+    // TODO
+    UNIMPLEMENTED();
+    return NULL;
+}
+
+TextureStorage *Renderer11::createTextureStorageCube(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
+{
+    // TODO
+    UNIMPLEMENTED();
+    return NULL;
+}
+
 }
\ No newline at end of file
diff --git a/src/libGLESv2/renderer/Renderer11.h b/src/libGLESv2/renderer/Renderer11.h
index f415279..440a239 100644
--- a/src/libGLESv2/renderer/Renderer11.h
+++ b/src/libGLESv2/renderer/Renderer11.h
@@ -140,6 +140,9 @@
     // Image operations
     virtual Image *createImage();
     virtual void generateMipmap(Image *dest, Image *source);
+    virtual TextureStorage *createTextureStorage2D(SwapChain *swapChain);
+    virtual TextureStorage *createTextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
+    virtual TextureStorage *createTextureStorageCube(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
 
     // Buffer creation
     virtual VertexBuffer *createVertexBuffer();
diff --git a/src/libGLESv2/renderer/Renderer9.cpp b/src/libGLESv2/renderer/Renderer9.cpp
index 19a0c6f..a3a4176 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -3074,4 +3074,20 @@
     Image9::generateMipmap(dst9, src9);
 }
 
+TextureStorage *Renderer9::createTextureStorage2D(SwapChain *swapChain)
+{
+    SwapChain9 *swapChain9 = SwapChain9::makeSwapChain9(swapChain);
+    return new TextureStorage9_2D(this, swapChain9);
+}
+
+TextureStorage *Renderer9::createTextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
+{
+    return new TextureStorage9_2D(this, levels, internalformat, usage, forceRenderable, width, height);
+}
+
+TextureStorage *Renderer9::createTextureStorageCube(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
+{
+    return new TextureStorage9_Cube(this, levels, internalformat, usage, forceRenderable, size);
+}
+
 }
\ No newline at end of file
diff --git a/src/libGLESv2/renderer/Renderer9.h b/src/libGLESv2/renderer/Renderer9.h
index 1c25baa..2aa8dd4 100644
--- a/src/libGLESv2/renderer/Renderer9.h
+++ b/src/libGLESv2/renderer/Renderer9.h
@@ -171,6 +171,9 @@
     // Image operations
     virtual Image *createImage();
     virtual void generateMipmap(Image *dest, Image *source);
+    virtual TextureStorage *createTextureStorage2D(SwapChain *swapChain);
+    virtual TextureStorage *createTextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
+    virtual TextureStorage *createTextureStorageCube(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
 
     // Buffer creation
     virtual VertexBuffer *createVertexBuffer();
diff --git a/src/libGLESv2/renderer/TextureStorage.cpp b/src/libGLESv2/renderer/TextureStorage.cpp
index 694d1db..f67055d 100644
--- a/src/libGLESv2/renderer/TextureStorage.cpp
+++ b/src/libGLESv2/renderer/TextureStorage.cpp
@@ -68,15 +68,13 @@
 TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, SwapChain9 *swapchain) 
     : mRenderTargetSerial(gl::RenderbufferStorage::issueSerial())
 {
-    TextureStorage9_2D *newInterface = new TextureStorage9_2D(renderer, swapchain);
-    mInstance = newInterface;
+    mInstance = renderer->createTextureStorage2D(swapchain);
 }
 
 TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
     : mRenderTargetSerial(gl::RenderbufferStorage::issueSerial())
 {
-    TextureStorage9_2D *newInterface = new TextureStorage9_2D(renderer, levels, internalformat, usage, forceRenderable, width, height); // D3D9_REPLACE
-    mInstance = newInterface;
+    mInstance = renderer->createTextureStorage2D(levels, internalformat, usage, forceRenderable, width, height);
 }
 
 TextureStorageInterface2D::~TextureStorageInterface2D()
@@ -101,8 +99,7 @@
 TextureStorageInterfaceCube::TextureStorageInterfaceCube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
     : mFirstRenderTargetSerial(gl::RenderbufferStorage::issueCubeSerials())
 {
-    TextureStorage9_Cube *newInterface = new TextureStorage9_Cube(renderer, levels, internalformat, usage, forceRenderable, size); // D3D9_REPLACE
-    mInstance = newInterface;
+    mInstance = renderer->createTextureStorageCube(levels, internalformat, usage, forceRenderable, size);
 }
 
 TextureStorageInterfaceCube::~TextureStorageInterfaceCube()