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 ...@@ -21,6 +21,7 @@ class RenderTarget
{ {
mWidth = 0; mWidth = 0;
mHeight = 0; mHeight = 0;
mDepth = 0;
mInternalFormat = GL_NONE; mInternalFormat = GL_NONE;
mActualFormat = GL_NONE; mActualFormat = GL_NONE;
mSamples = 0; mSamples = 0;
...@@ -30,6 +31,7 @@ class RenderTarget ...@@ -30,6 +31,7 @@ class RenderTarget
GLsizei getWidth() { return mWidth; } GLsizei getWidth() { return mWidth; }
GLsizei getHeight() { return mHeight; } GLsizei getHeight() { return mHeight; }
GLsizei getDepth() { return mDepth; }
GLenum getInternalFormat() { return mInternalFormat; } GLenum getInternalFormat() { return mInternalFormat; }
GLenum getActualFormat() { return mActualFormat; } GLenum getActualFormat() { return mActualFormat; }
GLsizei getSamples() { return mSamples; } GLsizei getSamples() { return mSamples; }
...@@ -37,12 +39,14 @@ class RenderTarget ...@@ -37,12 +39,14 @@ class RenderTarget
struct Desc { struct Desc {
GLsizei width; GLsizei width;
GLsizei height; GLsizei height;
GLsizei depth;
GLenum format; GLenum format;
}; };
protected: protected:
GLsizei mWidth; GLsizei mWidth;
GLsizei mHeight; GLsizei mHeight;
GLsizei mDepth;
GLenum mInternalFormat; GLenum mInternalFormat;
GLenum mActualFormat; GLenum mActualFormat;
GLsizei mSamples; GLsizei mSamples;
......
...@@ -177,7 +177,8 @@ static unsigned int getDSVSubresourceIndex(ID3D11Resource *resource, ID3D11Depth ...@@ -177,7 +177,8 @@ static unsigned int getDSVSubresourceIndex(ID3D11Resource *resource, ID3D11Depth
return D3D11CalcSubresource(mipSlice, arraySlice, mipLevels); 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); mRenderer = Renderer11::makeRenderer11(renderer);
mTexture = resource; mTexture = resource;
...@@ -197,6 +198,7 @@ RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *rtv, ...@@ -197,6 +198,7 @@ RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *rtv,
mSubresourceIndex = getRTVSubresourceIndex(mTexture, mRenderTarget); mSubresourceIndex = getRTVSubresourceIndex(mTexture, mRenderTarget);
mWidth = width; mWidth = width;
mHeight = height; mHeight = height;
mDepth = depth;
mSamples = samples; mSamples = samples;
mInternalFormat = d3d11_gl::ConvertTextureInternalFormat(desc.Format); mInternalFormat = d3d11_gl::ConvertTextureInternalFormat(desc.Format);
...@@ -204,7 +206,8 @@ RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *rtv, ...@@ -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); mRenderer = Renderer11::makeRenderer11(renderer);
mTexture = resource; mTexture = resource;
...@@ -224,6 +227,7 @@ RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv, ...@@ -224,6 +227,7 @@ RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv,
mSubresourceIndex = getDSVSubresourceIndex(mTexture, mDepthStencil); mSubresourceIndex = getDSVSubresourceIndex(mTexture, mDepthStencil);
mWidth = width; mWidth = width;
mHeight = height; mHeight = height;
mDepth = depth;
mSamples = samples; mSamples = samples;
mInternalFormat = d3d11_gl::ConvertTextureInternalFormat(desc.Format); mInternalFormat = d3d11_gl::ConvertTextureInternalFormat(desc.Format);
...@@ -231,7 +235,7 @@ RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv, ...@@ -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); mRenderer = Renderer11::makeRenderer11(renderer);
mTexture = NULL; mTexture = NULL;
...@@ -262,7 +266,7 @@ RenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height ...@@ -262,7 +266,7 @@ RenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height
desc.Usage = D3D11_USAGE_DEFAULT; desc.Usage = D3D11_USAGE_DEFAULT;
desc.CPUAccessFlags = 0; desc.CPUAccessFlags = 0;
desc.MiscFlags = 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(); ID3D11Device *device = mRenderer->getDevice();
ID3D11Texture2D *texture = NULL; ID3D11Texture2D *texture = NULL;
...@@ -276,7 +280,7 @@ RenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height ...@@ -276,7 +280,7 @@ RenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height
} }
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
if (depth) if (depthStencil)
{ {
D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc; D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
dsvDesc.Format = requestedFormat; dsvDesc.Format = requestedFormat;
...@@ -332,6 +336,7 @@ RenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height ...@@ -332,6 +336,7 @@ RenderTarget11::RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height
mWidth = width; mWidth = width;
mHeight = height; mHeight = height;
mDepth = 1;
mInternalFormat = format; mInternalFormat = format;
mSamples = supportedSamples; mSamples = supportedSamples;
mActualFormat = d3d11_gl::ConvertTextureInternalFormat(requestedFormat); mActualFormat = d3d11_gl::ConvertTextureInternalFormat(requestedFormat);
......
...@@ -20,8 +20,8 @@ class Renderer11; ...@@ -20,8 +20,8 @@ class Renderer11;
class RenderTarget11 : public RenderTarget class RenderTarget11 : public RenderTarget
{ {
public: public:
RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *rtv, 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); 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); RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height, GLenum format, GLsizei samples, bool depth);
virtual ~RenderTarget11(); virtual ~RenderTarget11();
......
...@@ -29,7 +29,8 @@ RenderTarget9::RenderTarget9(Renderer *renderer, IDirect3DSurface9 *surface) ...@@ -29,7 +29,8 @@ RenderTarget9::RenderTarget9(Renderer *renderer, IDirect3DSurface9 *surface)
mWidth = description.Width; mWidth = description.Width;
mHeight = description.Height; mHeight = description.Height;
mDepth = 1;
mInternalFormat = d3d9_gl::GetEquivalentFormat(description.Format); mInternalFormat = d3d9_gl::GetEquivalentFormat(description.Format);
mActualFormat = d3d9_gl::GetEquivalentFormat(description.Format); mActualFormat = d3d9_gl::GetEquivalentFormat(description.Format);
mSamples = d3d9_gl::GetSamplesFromMultisampleType(description.MultiSampleType); mSamples = d3d9_gl::GetSamplesFromMultisampleType(description.MultiSampleType);
...@@ -80,6 +81,7 @@ RenderTarget9::RenderTarget9(Renderer *renderer, GLsizei width, GLsizei height, ...@@ -80,6 +81,7 @@ RenderTarget9::RenderTarget9(Renderer *renderer, GLsizei width, GLsizei height,
mWidth = width; mWidth = width;
mHeight = height; mHeight = height;
mDepth = 1;
mInternalFormat = format; mInternalFormat = format;
mSamples = supportedSamples; mSamples = supportedSamples;
mActualFormat = d3d9_gl::GetEquivalentFormat(requestedFormat); mActualFormat = d3d9_gl::GetEquivalentFormat(requestedFormat);
......
...@@ -2933,7 +2933,7 @@ RenderTarget *Renderer11::createRenderTarget(SwapChain *swapChain, bool depth) ...@@ -2933,7 +2933,7 @@ RenderTarget *Renderer11::createRenderTarget(SwapChain *swapChain, bool depth)
// Note: depth stencil may be NULL for 0 sized surfaces // Note: depth stencil may be NULL for 0 sized surfaces
renderTarget = new RenderTarget11(this, swapChain11->getDepthStencil(), renderTarget = new RenderTarget11(this, swapChain11->getDepthStencil(),
swapChain11->getDepthStencilTexture(), NULL, swapChain11->getDepthStencilTexture(), NULL,
swapChain11->getWidth(), swapChain11->getHeight()); swapChain11->getWidth(), swapChain11->getHeight(), 1);
} }
else else
{ {
...@@ -2941,7 +2941,7 @@ RenderTarget *Renderer11::createRenderTarget(SwapChain *swapChain, bool depth) ...@@ -2941,7 +2941,7 @@ RenderTarget *Renderer11::createRenderTarget(SwapChain *swapChain, bool depth)
renderTarget = new RenderTarget11(this, swapChain11->getRenderTarget(), renderTarget = new RenderTarget11(this, swapChain11->getRenderTarget(),
swapChain11->getOffscreenTexture(), swapChain11->getOffscreenTexture(),
swapChain11->getRenderTargetShaderResource(), swapChain11->getRenderTargetShaderResource(),
swapChain11->getWidth(), swapChain11->getHeight()); swapChain11->getWidth(), swapChain11->getHeight(), 1);
} }
return renderTarget; return renderTarget;
} }
......
...@@ -376,7 +376,8 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level) ...@@ -376,7 +376,8 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
mRenderTarget[level] = new RenderTarget11(mRenderer, rtv, mTexture, srv, mRenderTarget[level] = new RenderTarget11(mRenderer, rtv, mTexture, srv,
std::max(mTextureWidth >> level, 1U), std::max(mTextureWidth >> level, 1U),
std::max(mTextureHeight >> level, 1U)); std::max(mTextureHeight >> level, 1U),
1);
} }
else if (mDepthStencilFormat != DXGI_FORMAT_UNKNOWN) else if (mDepthStencilFormat != DXGI_FORMAT_UNKNOWN)
{ {
...@@ -402,7 +403,8 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level) ...@@ -402,7 +403,8 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
mRenderTarget[level] = new RenderTarget11(mRenderer, dsv, mTexture, srv, mRenderTarget[level] = new RenderTarget11(mRenderer, dsv, mTexture, srv,
std::max(mTextureWidth >> level, 1U), std::max(mTextureWidth >> level, 1U),
std::max(mTextureHeight >> level, 1U)); std::max(mTextureHeight >> level, 1U),
1);
} }
else else
{ {
...@@ -607,7 +609,8 @@ RenderTarget *TextureStorage11_Cube::getRenderTarget(GLenum faceTarget, int leve ...@@ -607,7 +609,8 @@ RenderTarget *TextureStorage11_Cube::getRenderTarget(GLenum faceTarget, int leve
mRenderTarget[faceIdx][level] = new RenderTarget11(mRenderer, rtv, mTexture, srv, mRenderTarget[faceIdx][level] = new RenderTarget11(mRenderer, rtv, mTexture, srv,
std::max(mTextureWidth >> level, 1U), std::max(mTextureWidth >> level, 1U),
std::max(mTextureHeight >> level, 1U)); std::max(mTextureHeight >> level, 1U),
1);
} }
else if (mDepthStencilFormat != DXGI_FORMAT_UNKNOWN) else if (mDepthStencilFormat != DXGI_FORMAT_UNKNOWN)
{ {
...@@ -634,7 +637,8 @@ RenderTarget *TextureStorage11_Cube::getRenderTarget(GLenum faceTarget, int leve ...@@ -634,7 +637,8 @@ RenderTarget *TextureStorage11_Cube::getRenderTarget(GLenum faceTarget, int leve
mRenderTarget[faceIdx][level] = new RenderTarget11(mRenderer, dsv, mTexture, srv, mRenderTarget[faceIdx][level] = new RenderTarget11(mRenderer, dsv, mTexture, srv,
std::max(mTextureWidth >> level, 1U), std::max(mTextureWidth >> level, 1U),
std::max(mTextureHeight >> level, 1U)); std::max(mTextureHeight >> level, 1U),
1);
} }
else else
{ {
...@@ -836,7 +840,8 @@ RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer) ...@@ -836,7 +840,8 @@ RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer)
mRenderTargets[key] = new RenderTarget11(mRenderer, rtv, mTexture, srv, mRenderTargets[key] = new RenderTarget11(mRenderer, rtv, mTexture, srv,
std::max(mTextureWidth >> mipLevel, 1U), std::max(mTextureWidth >> mipLevel, 1U),
std::max(mTextureHeight >> mipLevel, 1U)); std::max(mTextureHeight >> mipLevel, 1U),
1);
} }
else else
{ {
...@@ -1029,7 +1034,8 @@ RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int l ...@@ -1029,7 +1034,8 @@ RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int l
mRenderTargets[key] = new RenderTarget11(mRenderer, rtv, mTexture, srv, mRenderTargets[key] = new RenderTarget11(mRenderer, rtv, mTexture, srv,
std::max(mTextureWidth >> mipLevel, 1U), std::max(mTextureWidth >> mipLevel, 1U),
std::max(mTextureHeight >> mipLevel, 1U)); std::max(mTextureHeight >> mipLevel, 1U),
1);
} }
else 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