Commit 9e3f24f6 by Geoff Lang

Update Renderer::copyToRenderTarget to return Error objects.

BUG=angle:520 Change-Id: Ieab2d031d638056676e07d80aa024b6c6f12f3d6 Reviewed-on: https://chromium-review.googlesource.com/216642Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 431cbc8e
...@@ -170,10 +170,10 @@ class Renderer ...@@ -170,10 +170,10 @@ class Renderer
virtual int getMaxSwapInterval() const = 0; virtual int getMaxSwapInterval() const = 0;
// Pixel operations // Pixel operations
virtual bool copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source) = 0; virtual gl::Error copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source) = 0;
virtual bool copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source) = 0; virtual gl::Error copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source) = 0;
virtual bool copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source) = 0; virtual gl::Error copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source) = 0;
virtual bool copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source) = 0; virtual gl::Error copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source) = 0;
virtual gl::Error copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual gl::Error copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorage *storage, GLint level) = 0; GLint xoffset, GLint yoffset, TextureStorage *storage, GLint level) = 0;
......
...@@ -664,7 +664,7 @@ bool TextureD3D_2D::ensureRenderTarget() ...@@ -664,7 +664,7 @@ bool TextureD3D_2D::ensureRenderTarget()
{ {
TextureStorage *newRenderTargetStorage = createCompleteStorage(true); TextureStorage *newRenderTargetStorage = createCompleteStorage(true);
if (!mRenderer->copyToRenderTarget2D(newRenderTargetStorage, mTexStorage)) if (mRenderer->copyToRenderTarget2D(newRenderTargetStorage, mTexStorage).isError())
{ {
delete newRenderTargetStorage; delete newRenderTargetStorage;
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
...@@ -1121,7 +1121,7 @@ bool TextureD3D_Cube::ensureRenderTarget() ...@@ -1121,7 +1121,7 @@ bool TextureD3D_Cube::ensureRenderTarget()
{ {
TextureStorage *newRenderTargetStorage = createCompleteStorage(true); TextureStorage *newRenderTargetStorage = createCompleteStorage(true);
if (!mRenderer->copyToRenderTargetCube(newRenderTargetStorage, mTexStorage)) if (mRenderer->copyToRenderTargetCube(newRenderTargetStorage, mTexStorage).isError())
{ {
delete newRenderTargetStorage; delete newRenderTargetStorage;
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
...@@ -1609,7 +1609,7 @@ bool TextureD3D_3D::ensureRenderTarget() ...@@ -1609,7 +1609,7 @@ bool TextureD3D_3D::ensureRenderTarget()
{ {
TextureStorage *newRenderTargetStorage = createCompleteStorage(true); TextureStorage *newRenderTargetStorage = createCompleteStorage(true);
if (!mRenderer->copyToRenderTarget3D(newRenderTargetStorage, mTexStorage)) if (mRenderer->copyToRenderTarget3D(newRenderTargetStorage, mTexStorage).isError())
{ {
delete newRenderTargetStorage; delete newRenderTargetStorage;
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
...@@ -2090,7 +2090,7 @@ bool TextureD3D_2DArray::ensureRenderTarget() ...@@ -2090,7 +2090,7 @@ bool TextureD3D_2DArray::ensureRenderTarget()
{ {
TextureStorage *newRenderTargetStorage = createCompleteStorage(true); TextureStorage *newRenderTargetStorage = createCompleteStorage(true);
if (!mRenderer->copyToRenderTarget2DArray(newRenderTargetStorage, mTexStorage)) if (mRenderer->copyToRenderTarget2DArray(newRenderTargetStorage, mTexStorage).isError())
{ {
delete newRenderTargetStorage; delete newRenderTargetStorage;
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
......
...@@ -1879,10 +1879,10 @@ int Renderer11::getMaxSwapInterval() const ...@@ -1879,10 +1879,10 @@ int Renderer11::getMaxSwapInterval() const
return 4; return 4;
} }
bool Renderer11::copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source) gl::Error Renderer11::copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source)
{ {
if (source && dest) ASSERT(source && dest);
{
TextureStorage11_2D *source11 = TextureStorage11_2D::makeTextureStorage11_2D(source); TextureStorage11_2D *source11 = TextureStorage11_2D::makeTextureStorage11_2D(source);
TextureStorage11_2D *dest11 = TextureStorage11_2D::makeTextureStorage11_2D(dest); TextureStorage11_2D *dest11 = TextureStorage11_2D::makeTextureStorage11_2D(dest);
...@@ -1890,16 +1890,13 @@ bool Renderer11::copyToRenderTarget2D(TextureStorage *dest, TextureStorage *sour ...@@ -1890,16 +1890,13 @@ bool Renderer11::copyToRenderTarget2D(TextureStorage *dest, TextureStorage *sour
dest11->invalidateSwizzleCache(); dest11->invalidateSwizzleCache();
return true; return gl::Error(GL_NO_ERROR);
}
return false;
} }
bool Renderer11::copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source) gl::Error Renderer11::copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source)
{ {
if (source && dest) ASSERT(source && dest);
{
TextureStorage11_Cube *source11 = TextureStorage11_Cube::makeTextureStorage11_Cube(source); TextureStorage11_Cube *source11 = TextureStorage11_Cube::makeTextureStorage11_Cube(source);
TextureStorage11_Cube *dest11 = TextureStorage11_Cube::makeTextureStorage11_Cube(dest); TextureStorage11_Cube *dest11 = TextureStorage11_Cube::makeTextureStorage11_Cube(dest);
...@@ -1907,16 +1904,13 @@ bool Renderer11::copyToRenderTargetCube(TextureStorage *dest, TextureStorage *so ...@@ -1907,16 +1904,13 @@ bool Renderer11::copyToRenderTargetCube(TextureStorage *dest, TextureStorage *so
dest11->invalidateSwizzleCache(); dest11->invalidateSwizzleCache();
return true; return gl::Error(GL_NO_ERROR);
}
return false;
} }
bool Renderer11::copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source) gl::Error Renderer11::copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source)
{ {
if (source && dest) ASSERT(source && dest);
{
TextureStorage11_3D *source11 = TextureStorage11_3D::makeTextureStorage11_3D(source); TextureStorage11_3D *source11 = TextureStorage11_3D::makeTextureStorage11_3D(source);
TextureStorage11_3D *dest11 = TextureStorage11_3D::makeTextureStorage11_3D(dest); TextureStorage11_3D *dest11 = TextureStorage11_3D::makeTextureStorage11_3D(dest);
...@@ -1924,16 +1918,13 @@ bool Renderer11::copyToRenderTarget3D(TextureStorage *dest, TextureStorage *sour ...@@ -1924,16 +1918,13 @@ bool Renderer11::copyToRenderTarget3D(TextureStorage *dest, TextureStorage *sour
dest11->invalidateSwizzleCache(); dest11->invalidateSwizzleCache();
return true; return gl::Error(GL_NO_ERROR);
}
return false;
} }
bool Renderer11::copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source) gl::Error Renderer11::copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source)
{ {
if (source && dest) ASSERT(source && dest);
{
TextureStorage11_2DArray *source11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(source); TextureStorage11_2DArray *source11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(source);
TextureStorage11_2DArray *dest11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(dest); TextureStorage11_2DArray *dest11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(dest);
...@@ -1941,10 +1932,7 @@ bool Renderer11::copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage ...@@ -1941,10 +1932,7 @@ bool Renderer11::copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage
dest11->invalidateSwizzleCache(); dest11->invalidateSwizzleCache();
return true; return gl::Error(GL_NO_ERROR);
}
return false;
} }
gl::Error Renderer11::copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, gl::Error Renderer11::copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
......
...@@ -115,10 +115,10 @@ class Renderer11 : public Renderer ...@@ -115,10 +115,10 @@ class Renderer11 : public Renderer
virtual int getMaxSwapInterval() const; virtual int getMaxSwapInterval() const;
// Pixel operations // Pixel operations
virtual bool copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source); virtual gl::Error copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source);
virtual bool copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source); virtual gl::Error copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source);
virtual bool copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source); virtual gl::Error copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source);
virtual bool copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source); virtual gl::Error copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source);
virtual gl::Error copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual gl::Error copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorage *storage, GLint level); GLint xoffset, GLint yoffset, TextureStorage *storage, GLint level);
......
...@@ -2336,12 +2336,10 @@ int Renderer9::getMaxSwapInterval() const ...@@ -2336,12 +2336,10 @@ int Renderer9::getMaxSwapInterval() const
return mMaxSwapInterval; return mMaxSwapInterval;
} }
bool Renderer9::copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source) gl::Error Renderer9::copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source)
{ {
bool result = false; ASSERT(source && dest);
if (source && dest)
{
TextureStorage9_2D *source9 = TextureStorage9_2D::makeTextureStorage9_2D(source); TextureStorage9_2D *source9 = TextureStorage9_2D::makeTextureStorage9_2D(source);
TextureStorage9_2D *dest9 = TextureStorage9_2D::makeTextureStorage9_2D(dest); TextureStorage9_2D *dest9 = TextureStorage9_2D::makeTextureStorage9_2D(dest);
...@@ -2351,27 +2349,24 @@ bool Renderer9::copyToRenderTarget2D(TextureStorage *dest, TextureStorage *sourc ...@@ -2351,27 +2349,24 @@ bool Renderer9::copyToRenderTarget2D(TextureStorage *dest, TextureStorage *sourc
IDirect3DSurface9 *srcSurf = source9->getSurfaceLevel(i, false); IDirect3DSurface9 *srcSurf = source9->getSurfaceLevel(i, false);
IDirect3DSurface9 *dstSurf = dest9->getSurfaceLevel(i, false); IDirect3DSurface9 *dstSurf = dest9->getSurfaceLevel(i, false);
result = copyToRenderTarget(dstSurf, srcSurf, source9->isManaged()); gl::Error error = copyToRenderTarget(dstSurf, srcSurf, source9->isManaged());
SafeRelease(srcSurf); SafeRelease(srcSurf);
SafeRelease(dstSurf); SafeRelease(dstSurf);
if (!result) if (error.isError())
{ {
return false; return error;
}
} }
} }
return result; return gl::Error(GL_NO_ERROR);
} }
bool Renderer9::copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source) gl::Error Renderer9::copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source)
{ {
bool result = false; ASSERT(source && dest);
if (source && dest)
{
TextureStorage9_Cube *source9 = TextureStorage9_Cube::makeTextureStorage9_Cube(source); TextureStorage9_Cube *source9 = TextureStorage9_Cube::makeTextureStorage9_Cube(source);
TextureStorage9_Cube *dest9 = TextureStorage9_Cube::makeTextureStorage9_Cube(dest); TextureStorage9_Cube *dest9 = TextureStorage9_Cube::makeTextureStorage9_Cube(dest);
int levels = source9->getLevelCount(); int levels = source9->getLevelCount();
...@@ -2382,34 +2377,33 @@ bool Renderer9::copyToRenderTargetCube(TextureStorage *dest, TextureStorage *sou ...@@ -2382,34 +2377,33 @@ bool Renderer9::copyToRenderTargetCube(TextureStorage *dest, TextureStorage *sou
IDirect3DSurface9 *srcSurf = source9->getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + f, i, false); IDirect3DSurface9 *srcSurf = source9->getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + f, i, false);
IDirect3DSurface9 *dstSurf = dest9->getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + f, i, true); IDirect3DSurface9 *dstSurf = dest9->getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + f, i, true);
result = copyToRenderTarget(dstSurf, srcSurf, source9->isManaged()); gl::Error error = copyToRenderTarget(dstSurf, srcSurf, source9->isManaged());
SafeRelease(srcSurf); SafeRelease(srcSurf);
SafeRelease(dstSurf); SafeRelease(dstSurf);
if (!result) if (error.isError())
{ {
return false; return error;
}
} }
} }
} }
return result; return gl::Error(GL_NO_ERROR);
} }
bool Renderer9::copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source) gl::Error Renderer9::copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source)
{ {
// 3D textures are not available in the D3D9 backend. // 3D textures are not available in the D3D9 backend.
UNREACHABLE(); UNREACHABLE();
return false; return gl::Error(GL_INVALID_OPERATION);
} }
bool Renderer9::copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source) gl::Error Renderer9::copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source)
{ {
// 2D array textures are not supported by the D3D9 backend. // 2D array textures are not supported by the D3D9 backend.
UNREACHABLE(); UNREACHABLE();
return false; return gl::Error(GL_INVALID_OPERATION);
} }
D3DPOOL Renderer9::getBufferPool(DWORD usage) const D3DPOOL Renderer9::getBufferPool(DWORD usage) const
...@@ -2995,10 +2989,10 @@ D3DPOOL Renderer9::getTexturePool(DWORD usage) const ...@@ -2995,10 +2989,10 @@ D3DPOOL Renderer9::getTexturePool(DWORD usage) const
return D3DPOOL_DEFAULT; return D3DPOOL_DEFAULT;
} }
bool Renderer9::copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurface9 *source, bool fromManaged) gl::Error Renderer9::copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurface9 *source, bool fromManaged)
{ {
if (source && dest) ASSERT(source && dest);
{
HRESULT result = D3DERR_OUTOFVIDEOMEMORY; HRESULT result = D3DERR_OUTOFVIDEOMEMORY;
if (fromManaged) if (fromManaged)
...@@ -3025,11 +3019,10 @@ bool Renderer9::copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurface9 *s ...@@ -3025,11 +3019,10 @@ bool Renderer9::copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurface9 *s
if (FAILED(result)) if (FAILED(result))
{ {
ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY); ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY);
return false; return gl::Error(GL_OUT_OF_MEMORY, "Failed to blit internal texture, result: 0x%X.", result);
}
} }
return true; return gl::Error(GL_NO_ERROR);
} }
Image *Renderer9::createImage() Image *Renderer9::createImage()
......
...@@ -119,10 +119,10 @@ class Renderer9 : public Renderer ...@@ -119,10 +119,10 @@ class Renderer9 : public Renderer
virtual int getMaxSwapInterval() const; virtual int getMaxSwapInterval() const;
// Pixel operations // Pixel operations
virtual bool copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source); virtual gl::Error copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source);
virtual bool copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source); virtual gl::Error copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source);
virtual bool copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source); virtual gl::Error copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source);
virtual bool copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source); virtual gl::Error copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source);
virtual gl::Error copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual gl::Error copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorage *storage, GLint level); GLint xoffset, GLint yoffset, TextureStorage *storage, GLint level);
...@@ -214,7 +214,7 @@ class Renderer9 : public Renderer ...@@ -214,7 +214,7 @@ class Renderer9 : public Renderer
gl::Error getCountingIB(size_t count, StaticIndexBufferInterface **outIB); gl::Error getCountingIB(size_t count, StaticIndexBufferInterface **outIB);
bool copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurface9 *source, bool fromManaged); gl::Error copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurface9 *source, bool fromManaged);
gl::FramebufferAttachment *getNullColorbuffer(gl::FramebufferAttachment *depthbuffer); gl::FramebufferAttachment *getNullColorbuffer(gl::FramebufferAttachment *depthbuffer);
D3DPOOL getBufferPool(DWORD usage) const; D3DPOOL getBufferPool(DWORD usage) const;
......
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