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)
RendererD3D::~RendererD3D()
{
cleanup();
}
void RendererD3D::cleanup()
{
mIncompleteTextures.onDestroy(mDisplay->getProxyContext());
}
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;
}
gl::Error RendererD3D::getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut)
{
return mIncompleteTextures.getIncompleteTexture(context, type, this, textureOut);
}
GLenum RendererD3D::getResetStatus()
{
if (!mDeviceLost)
......@@ -205,17 +192,6 @@ gl::Error RendererD3D::initRenderTarget(RenderTargetD3D *renderTarget)
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*/)
{
// No-op by default. Only implemented in D3D11.
......
......@@ -102,7 +102,7 @@ class BufferFactoryD3D : angle::NonCopyable
using AttribIndexArray = gl::AttribArray<int>;
class RendererD3D : public BufferFactoryD3D, public MultisampleTextureInitializer
class RendererD3D : public BufferFactoryD3D
{
public:
explicit RendererD3D(egl::Display *display);
......@@ -329,17 +329,14 @@ class RendererD3D : public BufferFactoryD3D, public MultisampleTextureInitialize
angle::WorkerThreadPool *getWorkerThreadPool();
gl::Error getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut);
virtual gl::Error getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut) = 0;
Serial generateSerial();
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.
virtual void onDirtyUniformBlockBinding(GLuint uniformBlockIndex);
......@@ -350,8 +347,6 @@ class RendererD3D : public BufferFactoryD3D, public MultisampleTextureInitialize
gl::Extensions *outExtensions,
gl::Limitations *outLimitations) const = 0;
void cleanup();
bool skipDraw(const gl::State &glState, gl::PrimitiveMode drawMode);
egl::Display *mDisplay;
......@@ -369,8 +364,6 @@ class RendererD3D : public BufferFactoryD3D, public MultisampleTextureInitialize
mutable gl::Extensions mNativeExtensions;
mutable gl::Limitations mNativeLimitations;
IncompleteTextureSet mIncompleteTextures;
mutable bool mWorkaroundsInitialized;
mutable angle::WorkaroundsD3D mWorkarounds;
......
......@@ -122,6 +122,11 @@ gl::Error Context11::initialize()
return gl::NoError();
}
void Context11::onDestroy(const gl::Context *context)
{
mIncompleteTextures.onDestroy(context);
}
CompilerImpl *Context11::createCompiler()
{
if (mRenderer->getRenderer11DeviceCaps().featureLevel <= D3D_FEATURE_LEVEL_9_3)
......@@ -571,4 +576,21 @@ gl::Error Context11::memoryBarrierByRegion(const gl::Context *context, GLbitfiel
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
......@@ -16,13 +16,14 @@ namespace rx
{
class Renderer11;
class Context11 : public ContextImpl
class Context11 : public ContextImpl, public MultisampleTextureInitializer
{
public:
Context11(const gl::ContextState &state, Renderer11 *renderer);
~Context11() override;
gl::Error initialize() override;
void onDestroy(const gl::Context *context) override;
// Shader creation
CompilerImpl *createCompiler() override;
......@@ -149,11 +150,19 @@ class Context11 : public ContextImpl
gl::Error triggerDrawCallProgramRecompilation(const gl::Context *context,
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:
gl::Error prepareForDrawCall(const gl::Context *context,
const gl::DrawCallParams &drawCallParams);
Renderer11 *mRenderer;
IncompleteTextureSet mIncompleteTextures;
};
} // namespace rx
......
......@@ -1905,8 +1905,6 @@ bool Renderer11::testDeviceResettable()
void Renderer11::release()
{
RendererD3D::cleanup();
mScratchMemoryBuffer.clear();
if (mAnnotator != nullptr)
......@@ -3886,4 +3884,10 @@ void Renderer11::onDirtyUniformBlockBinding(GLuint /*uniformBlockIndex*/)
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
......@@ -451,6 +451,10 @@ class Renderer11 : public RendererD3D
UINT mapFlags,
D3D11_MAPPED_SUBRESOURCE *mappedResource);
gl::Error getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut) override;
private:
void generateCaps(gl::Caps *outCaps,
gl::TextureCapsMap *outTextureCaps,
......
......@@ -41,6 +41,11 @@ gl::Error Context9::initialize()
return gl::NoError();
}
void Context9::onDestroy(const gl::Context *context)
{
mIncompleteTextures.onDestroy(context);
}
CompilerImpl *Context9::createCompiler()
{
return new CompilerD3D(SH_HLSL_3_0_OUTPUT);
......@@ -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";
}
gl::Error Context9::getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut)
{
return mIncompleteTextures.getIncompleteTexture(context, type, nullptr, textureOut);
}
} // namespace rx
......@@ -23,6 +23,7 @@ class Context9 : public ContextImpl
~Context9() override;
gl::Error initialize() override;
void onDestroy(const gl::Context *context) override;
// Shader creation
CompilerImpl *createCompiler() override;
......@@ -146,8 +147,13 @@ class Context9 : public ContextImpl
Renderer9 *getRenderer() const { return mRenderer; }
gl::Error getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut);
private:
Renderer9 *mRenderer;
IncompleteTextureSet mIncompleteTextures;
};
} // namespace rx
......
......@@ -150,8 +150,6 @@ Renderer9::~Renderer9()
void Renderer9::release()
{
RendererD3D::cleanup();
gl::UninitializeDebugAnnotations();
mTranslatedAttribCache.clear();
......@@ -3267,4 +3265,10 @@ gl::Error Renderer9::applyTextures(const gl::Context *context)
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
......@@ -390,6 +390,10 @@ class Renderer9 : public RendererD3D
bool canSelectViewInVertexShader() const override;
gl::Error getIncompleteTexture(const gl::Context *context,
gl::TextureType type,
gl::Texture **textureOut) override;
private:
gl::Error drawArraysImpl(const gl::Context *context,
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