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
{