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
parent ad8a0d3a
......@@ -21,6 +21,7 @@ class RenderTarget
{
mWidth = 0;
mHeight = 0;
mDepth = 0;
mInternalFormat = GL_NONE;
mActualFormat = GL_NONE;
mSamples = 0;
......@@ -30,6 +31,7 @@ class RenderTarget
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 @@ class RenderTarget
struct Desc {
GLsizei width;
GLsizei height;
GLsizei depth;
GLenum format;
};
protected:
GLsizei mWidth;
GLsizei mHeight;
GLsizei mDepth;
GLenum mInternalFormat;
GLenum mActualFormat;
GLsizei mSamples;
......
......@@ -177,7 +177,8 @@ static unsigned int getDSVSubresourceIndex(ID3D11Resource *resource, ID3D11Depth
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 @@ RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *rtv,
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, ID3D11RenderTargetView *rtv,
}
}
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 @@ RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv,
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, ID3D11DepthStencilView *dsv,
}
}
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 @@ RenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height
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 @@ RenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height
}
ASSERT(SUCCEEDED(result));
if (depth)
if (depthStencil)
{
D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
dsvDesc.Format = requestedFormat;
......@@ -332,6 +336,7 @@ RenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height
mWidth = width;
mHeight = height;
mDepth = 1;
mInternalFormat = format;
mSamples = supportedSamples;
mActualFormat = d3d11_gl::ConvertTextureInternalFormat(requestedFormat);
......
......@@ -20,8 +20,8 @@ class Renderer11;
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();
......
......@@ -29,7 +29,8 @@ RenderTarget9::RenderTarget9(Renderer *renderer, IDirect3DSurface9 *surface)
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 @@ RenderTarget9::RenderTarget9(Renderer *renderer, GLsizei width, GLsizei height,
mWidth = width;
mHeight = height;
mDepth = 1;
mInternalFormat = format;
mSamples = supportedSamples;
mActualFormat = d3d9_gl::GetEquivalentFormat(requestedFormat);
......
......@@ -2933,7 +2933,7 @@ RenderTarget *Renderer11::createRenderTarget(SwapChain *swapChain, bool depth)
// 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 *Renderer11::createRenderTarget(SwapChain *swapChain, bool depth)
renderTarget = new RenderTarget11(this, swapChain11->getRenderTarget(),
swapChain11->getOffscreenTexture(),
swapChain11->getRenderTargetShaderResource(),
swapChain11->getWidth(), swapChain11->getHeight());
swapChain11->getWidth(), swapChain11->getHeight(), 1);
}
return renderTarget;
}
......
......@@ -376,7 +376,8 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
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 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
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 @@ RenderTarget *TextureStorage11_Cube::getRenderTarget(GLenum faceTarget, int leve
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 @@ RenderTarget *TextureStorage11_Cube::getRenderTarget(GLenum faceTarget, int leve
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 @@ RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer)
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 @@ RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int l
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
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment