Commit 7dc43051 by Jamie Madill Committed by Commit Bot

D3D: Move Incomplete Textures to Context9/11.

This cleans up another usage of getProxyContext. Bug: angleproject:2714 Change-Id: I5337e30cdd96e282e355c727bb40cd30e049ec1a Reviewed-on: https://chromium-review.googlesource.com/1128926Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarFrank Henigman <fjhenigman@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent e8cc4a64
...@@ -46,12 +46,6 @@ RendererD3D::RendererD3D(egl::Display *display) ...@@ -46,12 +46,6 @@ RendererD3D::RendererD3D(egl::Display *display)
RendererD3D::~RendererD3D() RendererD3D::~RendererD3D()
{ {
cleanup();
}
void RendererD3D::cleanup()
{
mIncompleteTextures.onDestroy(mDisplay->getProxyContext());
} }
bool RendererD3D::skipDraw(const gl::State &glState, gl::PrimitiveMode drawMode) bool RendererD3D::skipDraw(const gl::State &glState, gl::PrimitiveMode drawMode)
...@@ -82,13 +76,6 @@ bool RendererD3D::skipDraw(const gl::State &glState, gl::PrimitiveMode drawMode) ...@@ -82,13 +76,6 @@ bool RendererD3D::skipDraw(const gl::State &glState, gl::PrimitiveMode drawMode)
return false; return false;
} }
gl::Error RendererD3D::getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut)
{
return mIncompleteTextures.getIncompleteTexture(context, type, this, textureOut);
}
GLenum RendererD3D::getResetStatus() GLenum RendererD3D::getResetStatus()
{ {
if (!mDeviceLost) if (!mDeviceLost)
...@@ -205,17 +192,6 @@ gl::Error RendererD3D::initRenderTarget(RenderTargetD3D *renderTarget) ...@@ -205,17 +192,6 @@ gl::Error RendererD3D::initRenderTarget(RenderTargetD3D *renderTarget)
return clearRenderTarget(renderTarget, gl::ColorF(0, 0, 0, 0), 1, 0); return clearRenderTarget(renderTarget, gl::ColorF(0, 0, 0, 0), 1, 0);
} }
gl::Error RendererD3D::initializeMultisampleTextureToBlack(const gl::Context *context,
gl::Texture *glTexture)
{
ASSERT(glTexture->getType() == gl::TextureType::_2DMultisample);
TextureD3D *textureD3D = GetImplAs<TextureD3D>(glTexture);
gl::ImageIndex index = gl::ImageIndex::Make2DMultisample();
RenderTargetD3D *renderTarget = nullptr;
ANGLE_TRY(textureD3D->getRenderTarget(context, index, &renderTarget));
return clearRenderTarget(renderTarget, gl::ColorF(0.0f, 0.0f, 0.0f, 1.0f), 1.0f, 0);
}
void RendererD3D::onDirtyUniformBlockBinding(GLuint /*uniformBlockIndex*/) void RendererD3D::onDirtyUniformBlockBinding(GLuint /*uniformBlockIndex*/)
{ {
// No-op by default. Only implemented in D3D11. // No-op by default. Only implemented in D3D11.
......
...@@ -102,7 +102,7 @@ class BufferFactoryD3D : angle::NonCopyable ...@@ -102,7 +102,7 @@ class BufferFactoryD3D : angle::NonCopyable
using AttribIndexArray = gl::AttribArray<int>; using AttribIndexArray = gl::AttribArray<int>;
class RendererD3D : public BufferFactoryD3D, public MultisampleTextureInitializer class RendererD3D : public BufferFactoryD3D
{ {
public: public:
explicit RendererD3D(egl::Display *display); explicit RendererD3D(egl::Display *display);
...@@ -329,17 +329,14 @@ class RendererD3D : public BufferFactoryD3D, public MultisampleTextureInitialize ...@@ -329,17 +329,14 @@ class RendererD3D : public BufferFactoryD3D, public MultisampleTextureInitialize
angle::WorkerThreadPool *getWorkerThreadPool(); angle::WorkerThreadPool *getWorkerThreadPool();
gl::Error getIncompleteTexture(const gl::Context *context, virtual gl::Error getIncompleteTexture(const gl::Context *context,
gl::TextureType type, gl::TextureType type,
gl::Texture **textureOut); gl::Texture **textureOut) = 0;
Serial generateSerial(); Serial generateSerial();
virtual bool canSelectViewInVertexShader() const = 0; virtual bool canSelectViewInVertexShader() const = 0;
gl::Error initializeMultisampleTextureToBlack(const gl::Context *context,
gl::Texture *glTexture) override;
// Should really be handled by Program dirty bits, but that requires splitting Program9/11. // Should really be handled by Program dirty bits, but that requires splitting Program9/11.
virtual void onDirtyUniformBlockBinding(GLuint uniformBlockIndex); virtual void onDirtyUniformBlockBinding(GLuint uniformBlockIndex);
...@@ -350,8 +347,6 @@ class RendererD3D : public BufferFactoryD3D, public MultisampleTextureInitialize ...@@ -350,8 +347,6 @@ class RendererD3D : public BufferFactoryD3D, public MultisampleTextureInitialize
gl::Extensions *outExtensions, gl::Extensions *outExtensions,
gl::Limitations *outLimitations) const = 0; gl::Limitations *outLimitations) const = 0;
void cleanup();
bool skipDraw(const gl::State &glState, gl::PrimitiveMode drawMode); bool skipDraw(const gl::State &glState, gl::PrimitiveMode drawMode);
egl::Display *mDisplay; egl::Display *mDisplay;
...@@ -369,8 +364,6 @@ class RendererD3D : public BufferFactoryD3D, public MultisampleTextureInitialize ...@@ -369,8 +364,6 @@ class RendererD3D : public BufferFactoryD3D, public MultisampleTextureInitialize
mutable gl::Extensions mNativeExtensions; mutable gl::Extensions mNativeExtensions;
mutable gl::Limitations mNativeLimitations; mutable gl::Limitations mNativeLimitations;
IncompleteTextureSet mIncompleteTextures;
mutable bool mWorkaroundsInitialized; mutable bool mWorkaroundsInitialized;
mutable angle::WorkaroundsD3D mWorkarounds; mutable angle::WorkaroundsD3D mWorkarounds;
......
...@@ -122,6 +122,11 @@ gl::Error Context11::initialize() ...@@ -122,6 +122,11 @@ gl::Error Context11::initialize()
return gl::NoError(); return gl::NoError();
} }
void Context11::onDestroy(const gl::Context *context)
{
mIncompleteTextures.onDestroy(context);
}
CompilerImpl *Context11::createCompiler() CompilerImpl *Context11::createCompiler()
{ {
if (mRenderer->getRenderer11DeviceCaps().featureLevel <= D3D_FEATURE_LEVEL_9_3) if (mRenderer->getRenderer11DeviceCaps().featureLevel <= D3D_FEATURE_LEVEL_9_3)
...@@ -571,4 +576,21 @@ gl::Error Context11::memoryBarrierByRegion(const gl::Context *context, GLbitfiel ...@@ -571,4 +576,21 @@ gl::Error Context11::memoryBarrierByRegion(const gl::Context *context, GLbitfiel
return gl::NoError(); return gl::NoError();
} }
gl::Error Context11::getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut)
{
return mIncompleteTextures.getIncompleteTexture(context, type, this, textureOut);
}
gl::Error Context11::initializeMultisampleTextureToBlack(const gl::Context *context,
gl::Texture *glTexture)
{
ASSERT(glTexture->getType() == gl::TextureType::_2DMultisample);
TextureD3D *textureD3D = GetImplAs<TextureD3D>(glTexture);
gl::ImageIndex index = gl::ImageIndex::Make2DMultisample();
RenderTargetD3D *renderTarget = nullptr;
ANGLE_TRY(textureD3D->getRenderTarget(context, index, &renderTarget));
return mRenderer->clearRenderTarget(renderTarget, gl::ColorF(0.0f, 0.0f, 0.0f, 1.0f), 1.0f, 0);
}
} // namespace rx } // namespace rx
...@@ -16,13 +16,14 @@ namespace rx ...@@ -16,13 +16,14 @@ namespace rx
{ {
class Renderer11; class Renderer11;
class Context11 : public ContextImpl class Context11 : public ContextImpl, public MultisampleTextureInitializer
{ {
public: public:
Context11(const gl::ContextState &state, Renderer11 *renderer); Context11(const gl::ContextState &state, Renderer11 *renderer);
~Context11() override; ~Context11() override;
gl::Error initialize() override; gl::Error initialize() override;
void onDestroy(const gl::Context *context) override;
// Shader creation // Shader creation
CompilerImpl *createCompiler() override; CompilerImpl *createCompiler() override;
...@@ -149,11 +150,19 @@ class Context11 : public ContextImpl ...@@ -149,11 +150,19 @@ class Context11 : public ContextImpl
gl::Error triggerDrawCallProgramRecompilation(const gl::Context *context, gl::Error triggerDrawCallProgramRecompilation(const gl::Context *context,
gl::PrimitiveMode drawMode); gl::PrimitiveMode drawMode);
gl::Error getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut);
gl::Error initializeMultisampleTextureToBlack(const gl::Context *context,
gl::Texture *glTexture) override;
private: private:
gl::Error prepareForDrawCall(const gl::Context *context, gl::Error prepareForDrawCall(const gl::Context *context,
const gl::DrawCallParams &drawCallParams); const gl::DrawCallParams &drawCallParams);
Renderer11 *mRenderer; Renderer11 *mRenderer;
IncompleteTextureSet mIncompleteTextures;
}; };
} // namespace rx } // namespace rx
......
...@@ -1905,8 +1905,6 @@ bool Renderer11::testDeviceResettable() ...@@ -1905,8 +1905,6 @@ bool Renderer11::testDeviceResettable()
void Renderer11::release() void Renderer11::release()
{ {
RendererD3D::cleanup();
mScratchMemoryBuffer.clear(); mScratchMemoryBuffer.clear();
if (mAnnotator != nullptr) if (mAnnotator != nullptr)
...@@ -3886,4 +3884,10 @@ void Renderer11::onDirtyUniformBlockBinding(GLuint /*uniformBlockIndex*/) ...@@ -3886,4 +3884,10 @@ void Renderer11::onDirtyUniformBlockBinding(GLuint /*uniformBlockIndex*/)
mStateManager.invalidateProgramUniformBuffers(); mStateManager.invalidateProgramUniformBuffers();
} }
gl::Error Renderer11::getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut)
{
return GetImplAs<Context11>(context)->getIncompleteTexture(context, type, textureOut);
}
} // namespace rx } // namespace rx
...@@ -451,6 +451,10 @@ class Renderer11 : public RendererD3D ...@@ -451,6 +451,10 @@ class Renderer11 : public RendererD3D
UINT mapFlags, UINT mapFlags,
D3D11_MAPPED_SUBRESOURCE *mappedResource); D3D11_MAPPED_SUBRESOURCE *mappedResource);
gl::Error getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut) override;
private: private:
void generateCaps(gl::Caps *outCaps, void generateCaps(gl::Caps *outCaps,
gl::TextureCapsMap *outTextureCaps, gl::TextureCapsMap *outTextureCaps,
......
...@@ -41,6 +41,11 @@ gl::Error Context9::initialize() ...@@ -41,6 +41,11 @@ gl::Error Context9::initialize()
return gl::NoError(); return gl::NoError();
} }
void Context9::onDestroy(const gl::Context *context)
{
mIncompleteTextures.onDestroy(context);
}
CompilerImpl *Context9::createCompiler() CompilerImpl *Context9::createCompiler()
{ {
return new CompilerD3D(SH_HLSL_3_0_OUTPUT); return new CompilerD3D(SH_HLSL_3_0_OUTPUT);
...@@ -322,4 +327,10 @@ gl::Error Context9::memoryBarrierByRegion(const gl::Context *context, GLbitfield ...@@ -322,4 +327,10 @@ gl::Error Context9::memoryBarrierByRegion(const gl::Context *context, GLbitfield
return gl::InternalError() << "D3D9 doesn't support ES 3.1 memoryBarrierByRegion API"; return gl::InternalError() << "D3D9 doesn't support ES 3.1 memoryBarrierByRegion API";
} }
gl::Error Context9::getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut)
{
return mIncompleteTextures.getIncompleteTexture(context, type, nullptr, textureOut);
}
} // namespace rx } // namespace rx
...@@ -23,6 +23,7 @@ class Context9 : public ContextImpl ...@@ -23,6 +23,7 @@ class Context9 : public ContextImpl
~Context9() override; ~Context9() override;
gl::Error initialize() override; gl::Error initialize() override;
void onDestroy(const gl::Context *context) override;
// Shader creation // Shader creation
CompilerImpl *createCompiler() override; CompilerImpl *createCompiler() override;
...@@ -146,8 +147,13 @@ class Context9 : public ContextImpl ...@@ -146,8 +147,13 @@ class Context9 : public ContextImpl
Renderer9 *getRenderer() const { return mRenderer; } Renderer9 *getRenderer() const { return mRenderer; }
gl::Error getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut);
private: private:
Renderer9 *mRenderer; Renderer9 *mRenderer;
IncompleteTextureSet mIncompleteTextures;
}; };
} // namespace rx } // namespace rx
......
...@@ -150,8 +150,6 @@ Renderer9::~Renderer9() ...@@ -150,8 +150,6 @@ Renderer9::~Renderer9()
void Renderer9::release() void Renderer9::release()
{ {
RendererD3D::cleanup();
gl::UninitializeDebugAnnotations(); gl::UninitializeDebugAnnotations();
mTranslatedAttribCache.clear(); mTranslatedAttribCache.clear();
...@@ -3267,4 +3265,10 @@ gl::Error Renderer9::applyTextures(const gl::Context *context) ...@@ -3267,4 +3265,10 @@ gl::Error Renderer9::applyTextures(const gl::Context *context)
return gl::NoError(); return gl::NoError();
} }
gl::Error Renderer9::getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut)
{
return GetImplAs<Context9>(context)->getIncompleteTexture(context, type, textureOut);
}
} // namespace rx } // namespace rx
...@@ -390,6 +390,10 @@ class Renderer9 : public RendererD3D ...@@ -390,6 +390,10 @@ class Renderer9 : public RendererD3D
bool canSelectViewInVertexShader() const override; bool canSelectViewInVertexShader() const override;
gl::Error getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut) override;
private: private:
gl::Error drawArraysImpl(const gl::Context *context, gl::Error drawArraysImpl(const gl::Context *context,
gl::PrimitiveMode mode, gl::PrimitiveMode mode,
......
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