RenderTargets now store a depth value.

TRAC #22926

Signed-off-by: Jamie Madill
Signed-off-by: Nicolas Capens
Author: Geoff Lang

git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2279 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/RenderTarget.h b/src/libGLESv2/renderer/RenderTarget.h
index 80de39f..1601da2 100644
--- a/src/libGLESv2/renderer/RenderTarget.h
+++ b/src/libGLESv2/renderer/RenderTarget.h
@@ -21,6 +21,7 @@
     {
         mWidth = 0;
         mHeight = 0;
+        mDepth = 0;
         mInternalFormat = GL_NONE;
         mActualFormat = GL_NONE;
         mSamples = 0;
@@ -30,6 +31,7 @@
 
     GLsizei getWidth() { return mWidth; }
     GLsizei getHeight() { return mHeight; }
+    GLsizei getDepth() { return mDepth; }
     GLenum getInternalFormat() { return mInternalFormat; }
     GLenum getActualFormat() { return mActualFormat; }
     GLsizei getSamples() { return mSamples; }
@@ -37,12 +39,14 @@
     struct Desc {
         GLsizei width;
         GLsizei height;
+        GLsizei depth;
         GLenum  format;
     };
 
   protected:
     GLsizei mWidth;
     GLsizei mHeight;
+    GLsizei mDepth;
     GLenum mInternalFormat;
     GLenum mActualFormat;
     GLsizei mSamples;
diff --git a/src/libGLESv2/renderer/RenderTarget11.cpp b/src/libGLESv2/renderer/RenderTarget11.cpp
index 29d894a..e82dc6c 100644
--- a/src/libGLESv2/renderer/RenderTarget11.cpp
+++ b/src/libGLESv2/renderer/RenderTarget11.cpp
@@ -177,7 +177,8 @@
     return D3D11CalcSubresource(mipSlice, arraySlice, mipLevels);
 }
 
-RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *rtv, ID3D11Resource *resource, ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height)
+RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *rtv, ID3D11Resource *resource,
+                               ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth)
 {
     mRenderer = Renderer11::makeRenderer11(renderer);
     mTexture = resource;
@@ -197,6 +198,7 @@
         mSubresourceIndex = getRTVSubresourceIndex(mTexture, mRenderTarget);
         mWidth = width;
         mHeight = height;
+        mDepth = depth;
         mSamples = samples;
 
         mInternalFormat = d3d11_gl::ConvertTextureInternalFormat(desc.Format);
@@ -204,7 +206,8 @@
     }
 }
 
-RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv, ID3D11Resource *resource, ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height)
+RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv, ID3D11Resource *resource,
+                               ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth)
 {
     mRenderer = Renderer11::makeRenderer11(renderer);
     mTexture = resource;
@@ -224,6 +227,7 @@
         mSubresourceIndex = getDSVSubresourceIndex(mTexture, mDepthStencil);
         mWidth = width;
         mHeight = height;
+        mDepth = depth;
         mSamples = samples;
 
         mInternalFormat = d3d11_gl::ConvertTextureInternalFormat(desc.Format);
@@ -231,7 +235,7 @@
     }
 }
 
-RenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height, GLenum format, GLsizei samples, bool depth)
+RenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height, GLenum format, GLsizei samples, bool depthStencil)
 {
     mRenderer = Renderer11::makeRenderer11(renderer);
     mTexture = NULL;
@@ -262,7 +266,7 @@
         desc.Usage = D3D11_USAGE_DEFAULT;
         desc.CPUAccessFlags = 0;
         desc.MiscFlags = 0;
-        desc.BindFlags = (depth ? D3D11_BIND_DEPTH_STENCIL : (D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE));
+        desc.BindFlags = (depthStencil ? D3D11_BIND_DEPTH_STENCIL : (D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE));
 
         ID3D11Device *device = mRenderer->getDevice();
         ID3D11Texture2D *texture = NULL;
@@ -276,7 +280,7 @@
         }
         ASSERT(SUCCEEDED(result));
 
-        if (depth)
+        if (depthStencil)
         {
             D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
             dsvDesc.Format = requestedFormat;
@@ -332,6 +336,7 @@
 
     mWidth = width;
     mHeight = height;
+    mDepth = 1;
     mInternalFormat = format;
     mSamples = supportedSamples;
     mActualFormat = d3d11_gl::ConvertTextureInternalFormat(requestedFormat);
diff --git a/src/libGLESv2/renderer/RenderTarget11.h b/src/libGLESv2/renderer/RenderTarget11.h
index 01d3537..3b86e99 100644
--- a/src/libGLESv2/renderer/RenderTarget11.h
+++ b/src/libGLESv2/renderer/RenderTarget11.h
@@ -20,8 +20,8 @@
 class RenderTarget11 : public RenderTarget
 {
   public:
-    RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *rtv, ID3D11Resource *resource, ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height);
-    RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv, ID3D11Resource *resource, ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height);
+    RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *rtv, ID3D11Resource *resource, ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth);
+    RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv, ID3D11Resource *resource, ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth);
     RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height, GLenum format, GLsizei samples, bool depth);
     virtual ~RenderTarget11();
 
diff --git a/src/libGLESv2/renderer/RenderTarget9.cpp b/src/libGLESv2/renderer/RenderTarget9.cpp
index a84c709..7ab0936 100644
--- a/src/libGLESv2/renderer/RenderTarget9.cpp
+++ b/src/libGLESv2/renderer/RenderTarget9.cpp
@@ -29,7 +29,8 @@
 
         mWidth = description.Width;
         mHeight = description.Height;
-        
+        mDepth = 1;
+
         mInternalFormat = d3d9_gl::GetEquivalentFormat(description.Format);
         mActualFormat = d3d9_gl::GetEquivalentFormat(description.Format);
         mSamples = d3d9_gl::GetSamplesFromMultisampleType(description.MultiSampleType);
@@ -80,6 +81,7 @@
 
     mWidth = width;
     mHeight = height;
+    mDepth = 1;
     mInternalFormat = format;
     mSamples = supportedSamples;
     mActualFormat = d3d9_gl::GetEquivalentFormat(requestedFormat);
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index 6ba552c..2738fb6 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -2933,7 +2933,7 @@
         // Note: depth stencil may be NULL for 0 sized surfaces
         renderTarget = new RenderTarget11(this, swapChain11->getDepthStencil(),
                                           swapChain11->getDepthStencilTexture(), NULL,
-                                          swapChain11->getWidth(), swapChain11->getHeight());
+                                          swapChain11->getWidth(), swapChain11->getHeight(), 1);
     }
     else
     {
@@ -2941,7 +2941,7 @@
         renderTarget = new RenderTarget11(this, swapChain11->getRenderTarget(),
                                           swapChain11->getOffscreenTexture(),
                                           swapChain11->getRenderTargetShaderResource(),
-                                          swapChain11->getWidth(), swapChain11->getHeight());
+                                          swapChain11->getWidth(), swapChain11->getHeight(), 1);
     }
     return renderTarget;
 }
diff --git a/src/libGLESv2/renderer/TextureStorage11.cpp b/src/libGLESv2/renderer/TextureStorage11.cpp
index 5307ced..024a778 100644
--- a/src/libGLESv2/renderer/TextureStorage11.cpp
+++ b/src/libGLESv2/renderer/TextureStorage11.cpp
@@ -376,7 +376,8 @@
 
                 mRenderTarget[level] = new RenderTarget11(mRenderer, rtv, mTexture, srv,
                                                           std::max(mTextureWidth >> level, 1U),
-                                                          std::max(mTextureHeight >> level, 1U));
+                                                          std::max(mTextureHeight >> level, 1U),
+                                                          1);
             }
             else if (mDepthStencilFormat != DXGI_FORMAT_UNKNOWN)
             {
@@ -402,7 +403,8 @@
 
                 mRenderTarget[level] = new RenderTarget11(mRenderer, dsv, mTexture, srv,
                                                           std::max(mTextureWidth >> level, 1U),
-                                                          std::max(mTextureHeight >> level, 1U));
+                                                          std::max(mTextureHeight >> level, 1U),
+                                                          1);
             }
             else
             {
@@ -607,7 +609,8 @@
 
                 mRenderTarget[faceIdx][level] = new RenderTarget11(mRenderer, rtv, mTexture, srv,
                                                                    std::max(mTextureWidth >> level, 1U),
-                                                                   std::max(mTextureHeight >> level, 1U));
+                                                                   std::max(mTextureHeight >> level, 1U),
+                                                                   1);
             }
             else if (mDepthStencilFormat != DXGI_FORMAT_UNKNOWN)
             {
@@ -634,7 +637,8 @@
 
                 mRenderTarget[faceIdx][level] = new RenderTarget11(mRenderer, dsv, mTexture, srv,
                                                                    std::max(mTextureWidth >> level, 1U),
-                                                                   std::max(mTextureHeight >> level, 1U));
+                                                                   std::max(mTextureHeight >> level, 1U),
+                                                                   1);
             }
             else
             {
@@ -836,7 +840,8 @@
 
                 mRenderTargets[key] = new RenderTarget11(mRenderer, rtv, mTexture, srv,
                                                          std::max(mTextureWidth >> mipLevel, 1U),
-                                                         std::max(mTextureHeight >> mipLevel, 1U));
+                                                         std::max(mTextureHeight >> mipLevel, 1U),
+                                                         1);
             }
             else
             {
@@ -1029,7 +1034,8 @@
 
                 mRenderTargets[key] = new RenderTarget11(mRenderer, rtv, mTexture, srv,
                                                          std::max(mTextureWidth >> mipLevel, 1U),
-                                                         std::max(mTextureHeight >> mipLevel, 1U));
+                                                         std::max(mTextureHeight >> mipLevel, 1U),
+                                                         1);
             }
             else
             {