Commit 3416ff3e by Jamie Madill Committed by Commit Bot

D3D: Check for error before createTextureStorageEGLImage.

Previously we were just dumping any unexpected errors here. Fix this by passing in the RT explicitly in the constructor, although we still store the EGLImage pointer in case the RT changes. BUG=angleproject:1455 Change-Id: Ie4d4a07c3a7b3a5ccc0a43c4e80bfc6ee43a676b Reviewed-on: https://chromium-review.googlesource.com/365411Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent f7ccaf73
...@@ -197,7 +197,8 @@ class RendererD3D : public BufferFactoryD3D ...@@ -197,7 +197,8 @@ class RendererD3D : public BufferFactoryD3D
virtual gl::Error generateMipmapUsingD3D(TextureStorage *storage, virtual gl::Error generateMipmapUsingD3D(TextureStorage *storage,
const gl::TextureState &textureState) = 0; const gl::TextureState &textureState) = 0;
virtual TextureStorage *createTextureStorage2D(SwapChainD3D *swapChain) = 0; virtual TextureStorage *createTextureStorage2D(SwapChainD3D *swapChain) = 0;
virtual TextureStorage *createTextureStorageEGLImage(EGLImageD3D *eglImage) = 0; virtual TextureStorage *createTextureStorageEGLImage(EGLImageD3D *eglImage,
RenderTargetD3D *renderTargetD3D) = 0;
virtual TextureStorage *createTextureStorageExternal( virtual TextureStorage *createTextureStorageExternal(
egl::Stream *stream, egl::Stream *stream,
const egl::Stream::GLTextureDescription &desc) = 0; const egl::Stream::GLTextureDescription &desc) = 0;
......
...@@ -1061,7 +1061,11 @@ gl::Error TextureD3D_2D::setEGLImageTarget(GLenum target, egl::Image *image) ...@@ -1061,7 +1061,11 @@ gl::Error TextureD3D_2D::setEGLImageTarget(GLenum target, egl::Image *image)
SafeDelete(mTexStorage); SafeDelete(mTexStorage);
mImageArray[0]->markClean(); mImageArray[0]->markClean();
mTexStorage = mRenderer->createTextureStorageEGLImage(eglImaged3d); // Pass in the RenderTargetD3D here: createTextureStorage can't generate an error.
RenderTargetD3D *renderTargetD3D = nullptr;
ANGLE_TRY(eglImaged3d->getRenderTarget(&renderTargetD3D));
mTexStorage = mRenderer->createTextureStorageEGLImage(eglImaged3d, renderTargetD3D);
mEGLImageTarget = true; mEGLImageTarget = true;
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
...@@ -3323,8 +3327,12 @@ gl::Error TextureD3D_External::setEGLImageTarget(GLenum target, egl::Image *imag ...@@ -3323,8 +3327,12 @@ gl::Error TextureD3D_External::setEGLImageTarget(GLenum target, egl::Image *imag
{ {
EGLImageD3D *eglImaged3d = GetImplAs<EGLImageD3D>(image); EGLImageD3D *eglImaged3d = GetImplAs<EGLImageD3D>(image);
// Pass in the RenderTargetD3D here: createTextureStorage can't generate an error.
RenderTargetD3D *renderTargetD3D = nullptr;
ANGLE_TRY(eglImaged3d->getRenderTarget(&renderTargetD3D));
SafeDelete(mTexStorage); SafeDelete(mTexStorage);
mTexStorage = mRenderer->createTextureStorageEGLImage(eglImaged3d); mTexStorage = mRenderer->createTextureStorageEGLImage(eglImaged3d, renderTargetD3D);
return gl::NoError(); return gl::NoError();
} }
......
...@@ -3599,9 +3599,10 @@ TextureStorage *Renderer11::createTextureStorage2D(SwapChainD3D *swapChain) ...@@ -3599,9 +3599,10 @@ TextureStorage *Renderer11::createTextureStorage2D(SwapChainD3D *swapChain)
return new TextureStorage11_2D(this, swapChain11); return new TextureStorage11_2D(this, swapChain11);
} }
TextureStorage *Renderer11::createTextureStorageEGLImage(EGLImageD3D *eglImage) TextureStorage *Renderer11::createTextureStorageEGLImage(EGLImageD3D *eglImage,
RenderTargetD3D *renderTargetD3D)
{ {
return new TextureStorage11_EGLImage(this, eglImage); return new TextureStorage11_EGLImage(this, eglImage, GetAs<RenderTarget11>(renderTargetD3D));
} }
TextureStorage *Renderer11::createTextureStorageExternal( TextureStorage *Renderer11::createTextureStorageExternal(
......
...@@ -246,7 +246,8 @@ class Renderer11 : public RendererD3D ...@@ -246,7 +246,8 @@ class Renderer11 : public RendererD3D
gl::Error generateMipmapUsingD3D(TextureStorage *storage, gl::Error generateMipmapUsingD3D(TextureStorage *storage,
const gl::TextureState &textureState) override; const gl::TextureState &textureState) override;
TextureStorage *createTextureStorage2D(SwapChainD3D *swapChain) override; TextureStorage *createTextureStorage2D(SwapChainD3D *swapChain) override;
TextureStorage *createTextureStorageEGLImage(EGLImageD3D *eglImage) override; TextureStorage *createTextureStorageEGLImage(EGLImageD3D *eglImage,
RenderTargetD3D *renderTargetD3D) override;
TextureStorage *createTextureStorageExternal( TextureStorage *createTextureStorageExternal(
egl::Stream *stream, egl::Stream *stream,
const egl::Stream::GLTextureDescription &desc) override; const egl::Stream::GLTextureDescription &desc) override;
......
...@@ -1555,16 +1555,15 @@ gl::Error TextureStorage11_External::getSwizzleRenderTarget(int mipLevel, ...@@ -1555,16 +1555,15 @@ gl::Error TextureStorage11_External::getSwizzleRenderTarget(int mipLevel,
return gl::Error(GL_INVALID_OPERATION); return gl::Error(GL_INVALID_OPERATION);
} }
TextureStorage11_EGLImage::TextureStorage11_EGLImage(Renderer11 *renderer, EGLImageD3D *eglImage) TextureStorage11_EGLImage::TextureStorage11_EGLImage(Renderer11 *renderer,
EGLImageD3D *eglImage,
RenderTarget11 *renderTarget11)
: TextureStorage11(renderer, D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE, 0), : TextureStorage11(renderer, D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE, 0),
mImage(eglImage), mImage(eglImage),
mCurrentRenderTarget(0), mCurrentRenderTarget(0),
mSwizzleTexture(nullptr), mSwizzleTexture(nullptr),
mSwizzleRenderTargets(gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS, nullptr) mSwizzleRenderTargets(gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS, nullptr)
{ {
RenderTargetD3D *renderTargetD3D = nullptr;
mImage->getRenderTarget(&renderTargetD3D);
RenderTarget11 *renderTarget11 = GetAs<RenderTarget11>(renderTargetD3D);
mCurrentRenderTarget = reinterpret_cast<uintptr_t>(renderTarget11); mCurrentRenderTarget = reinterpret_cast<uintptr_t>(renderTarget11);
mMipLevels = 1; mMipLevels = 1;
......
...@@ -233,7 +233,9 @@ class TextureStorage11_External : public TextureStorage11 ...@@ -233,7 +233,9 @@ class TextureStorage11_External : public TextureStorage11
class TextureStorage11_EGLImage final : public TextureStorage11 class TextureStorage11_EGLImage final : public TextureStorage11
{ {
public: public:
TextureStorage11_EGLImage(Renderer11 *renderer, EGLImageD3D *eglImage); TextureStorage11_EGLImage(Renderer11 *renderer,
EGLImageD3D *eglImage,
RenderTarget11 *renderTarget11);
~TextureStorage11_EGLImage() override; ~TextureStorage11_EGLImage() override;
gl::Error getResource(ID3D11Resource **outResource) override; gl::Error getResource(ID3D11Resource **outResource) override;
......
...@@ -2665,9 +2665,10 @@ TextureStorage *Renderer9::createTextureStorage2D(SwapChainD3D *swapChain) ...@@ -2665,9 +2665,10 @@ TextureStorage *Renderer9::createTextureStorage2D(SwapChainD3D *swapChain)
return new TextureStorage9_2D(this, swapChain9); return new TextureStorage9_2D(this, swapChain9);
} }
TextureStorage *Renderer9::createTextureStorageEGLImage(EGLImageD3D *eglImage) TextureStorage *Renderer9::createTextureStorageEGLImage(EGLImageD3D *eglImage,
RenderTargetD3D *renderTargetD3D)
{ {
return new TextureStorage9_EGLImage(this, eglImage); return new TextureStorage9_EGLImage(this, eglImage, GetAs<RenderTarget9>(renderTargetD3D));
} }
TextureStorage *Renderer9::createTextureStorageExternal( TextureStorage *Renderer9::createTextureStorageExternal(
......
...@@ -242,7 +242,8 @@ class Renderer9 : public RendererD3D ...@@ -242,7 +242,8 @@ class Renderer9 : public RendererD3D
gl::Error generateMipmapUsingD3D(TextureStorage *storage, gl::Error generateMipmapUsingD3D(TextureStorage *storage,
const gl::TextureState &textureState) override; const gl::TextureState &textureState) override;
TextureStorage *createTextureStorage2D(SwapChainD3D *swapChain) override; TextureStorage *createTextureStorage2D(SwapChainD3D *swapChain) override;
TextureStorage *createTextureStorageEGLImage(EGLImageD3D *eglImage) override; TextureStorage *createTextureStorageEGLImage(EGLImageD3D *eglImage,
RenderTargetD3D *renderTargetD3D) override;
TextureStorage *createTextureStorageExternal( TextureStorage *createTextureStorageExternal(
egl::Stream *stream, egl::Stream *stream,
const egl::Stream::GLTextureDescription &desc) override; const egl::Stream::GLTextureDescription &desc) override;
......
...@@ -305,14 +305,11 @@ gl::Error TextureStorage9_2D::copyToStorage(TextureStorage *destStorage) ...@@ -305,14 +305,11 @@ gl::Error TextureStorage9_2D::copyToStorage(TextureStorage *destStorage)
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
} }
TextureStorage9_EGLImage::TextureStorage9_EGLImage(Renderer9 *renderer, EGLImageD3D *image) TextureStorage9_EGLImage::TextureStorage9_EGLImage(Renderer9 *renderer,
EGLImageD3D *image,
RenderTarget9 *renderTarget9)
: TextureStorage9(renderer, D3DUSAGE_RENDERTARGET), mImage(image) : TextureStorage9(renderer, D3DUSAGE_RENDERTARGET), mImage(image)
{ {
RenderTargetD3D *renderTargetD3D = nullptr;
mImage->getRenderTarget(&renderTargetD3D);
RenderTarget9 *renderTarget9 = GetAs<RenderTarget9>(renderTargetD3D);
mInternalFormat = renderTarget9->getInternalFormat(); mInternalFormat = renderTarget9->getInternalFormat();
mTextureFormat = renderTarget9->getD3DFormat(); mTextureFormat = renderTarget9->getD3DFormat();
mTextureWidth = renderTarget9->getWidth(); mTextureWidth = renderTarget9->getWidth();
......
...@@ -89,7 +89,7 @@ class TextureStorage9_2D : public TextureStorage9 ...@@ -89,7 +89,7 @@ class TextureStorage9_2D : public TextureStorage9
class TextureStorage9_EGLImage final : public TextureStorage9 class TextureStorage9_EGLImage final : public TextureStorage9
{ {
public: public:
TextureStorage9_EGLImage(Renderer9 *renderer, EGLImageD3D *image); TextureStorage9_EGLImage(Renderer9 *renderer, EGLImageD3D *image, RenderTarget9 *renderTarget9);
~TextureStorage9_EGLImage() override; ~TextureStorage9_EGLImage() override;
gl::Error getSurfaceLevel(GLenum target, gl::Error getSurfaceLevel(GLenum target,
......
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