Refactor ResourceManager into separate managers per resource type.
BUG=angleproject:1639
Change-Id: I943f553cfb0e0feb57953770784b48e22fccc875
Reviewed-on: https://chromium-review.googlesource.com/423172
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index 99cd014..ffc6e82 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -46,7 +46,7 @@
{
template <typename T>
-std::vector<gl::Path *> GatherPaths(gl::ResourceManager &resourceManager,
+std::vector<gl::Path *> GatherPaths(gl::PathManager &resourceManager,
GLsizei numPaths,
const void *paths,
GLuint pathBase)
@@ -66,7 +66,7 @@
return ret;
}
-std::vector<gl::Path *> GatherPaths(gl::ResourceManager &resourceManager,
+std::vector<gl::Path *> GatherPaths(gl::PathManager &resourceManager,
GLsizei numPaths,
GLenum pathNameType,
const void *paths,
@@ -239,12 +239,12 @@
const Context *shareContext,
const egl::AttributeMap &attribs)
- : ValidationContext(GetClientVersion(attribs),
+ : ValidationContext(shareContext,
+ GetClientVersion(attribs),
&mGLState,
mCaps,
mTextureCaps,
mExtensions,
- nullptr,
mLimitations,
mFramebufferMap,
GetNoError(attribs)),
@@ -258,8 +258,7 @@
mContextLostForced(false),
mResetStrategy(GetResetStrategy(attribs)),
mRobustAccess(GetRobustAccess(attribs)),
- mCurrentSurface(nullptr),
- mResourceManager(nullptr)
+ mCurrentSurface(nullptr)
{
if (mRobustAccess)
{
@@ -274,18 +273,6 @@
mFenceNVHandleAllocator.setBaseHandle(0);
- if (shareContext != nullptr)
- {
- mResourceManager = shareContext->mResourceManager;
- mResourceManager->addRef();
- }
- else
- {
- mResourceManager = new ResourceManager();
- }
-
- mState.mResourceManager = mResourceManager;
-
// [OpenGL ES 2.0.24] section 3.7 page 83:
// In the initial state, TEXTURE_2D and TEXTURE_CUBE_MAP have twodimensional
// and cube map texture state vectors respectively associated with them.
@@ -444,11 +431,6 @@
releaseSurface();
}
- if (mResourceManager)
- {
- mResourceManager->release();
- }
-
SafeDelete(mCompiler);
}
@@ -521,39 +503,39 @@
GLuint Context::createBuffer()
{
- return mResourceManager->createBuffer();
+ return mState.mBuffers->createBuffer();
}
GLuint Context::createProgram()
{
- return mResourceManager->createProgram(mImplementation.get());
+ return mState.mShaderPrograms->createProgram(mImplementation.get());
}
GLuint Context::createShader(GLenum type)
{
- return mResourceManager->createShader(mImplementation.get(), mLimitations, type);
+ return mState.mShaderPrograms->createShader(mImplementation.get(), mLimitations, type);
}
GLuint Context::createTexture()
{
- return mResourceManager->createTexture();
+ return mState.mTextures->createTexture();
}
GLuint Context::createRenderbuffer()
{
- return mResourceManager->createRenderbuffer();
+ return mState.mRenderbuffers->createRenderbuffer();
}
GLsync Context::createFenceSync()
{
- GLuint handle = mResourceManager->createFenceSync(mImplementation.get());
+ GLuint handle = mState.mFenceSyncs->createFenceSync(mImplementation.get());
return reinterpret_cast<GLsync>(static_cast<uintptr_t>(handle));
}
GLuint Context::createPaths(GLsizei range)
{
- auto resultOrError = mResourceManager->createPaths(mImplementation.get(), range);
+ auto resultOrError = mState.mPaths->createPaths(mImplementation.get(), range);
if (resultOrError.isError())
{
handleError(resultOrError.getError());
@@ -571,7 +553,7 @@
GLuint Context::createSampler()
{
- return mResourceManager->createSampler();
+ return mState.mSamplers->createSampler();
}
GLuint Context::createTransformFeedback()
@@ -612,42 +594,42 @@
void Context::deleteBuffer(GLuint buffer)
{
- if (mResourceManager->getBuffer(buffer))
+ if (mState.mBuffers->getBuffer(buffer))
{
detachBuffer(buffer);
}
- mResourceManager->deleteBuffer(buffer);
+ mState.mBuffers->deleteBuffer(buffer);
}
void Context::deleteShader(GLuint shader)
{
- mResourceManager->deleteShader(shader);
+ mState.mShaderPrograms->deleteShader(shader);
}
void Context::deleteProgram(GLuint program)
{
- mResourceManager->deleteProgram(program);
+ mState.mShaderPrograms->deleteProgram(program);
}
void Context::deleteTexture(GLuint texture)
{
- if (mResourceManager->getTexture(texture))
+ if (mState.mTextures->getTexture(texture))
{
detachTexture(texture);
}
- mResourceManager->deleteTexture(texture);
+ mState.mTextures->deleteTexture(texture);
}
void Context::deleteRenderbuffer(GLuint renderbuffer)
{
- if (mResourceManager->getRenderbuffer(renderbuffer))
+ if (mState.mRenderbuffers->getRenderbuffer(renderbuffer))
{
detachRenderbuffer(renderbuffer);
}
- mResourceManager->deleteRenderbuffer(renderbuffer);
+ mState.mRenderbuffers->deleteRenderbuffer(renderbuffer);
}
void Context::deleteFenceSync(GLsync fenceSync)
@@ -656,17 +638,18 @@
// wait commands finish. However, since the name becomes invalid, we cannot query the fence,
// and since our API is currently designed for being called from a single thread, we can delete
// the fence immediately.
- mResourceManager->deleteFenceSync(static_cast<GLuint>(reinterpret_cast<uintptr_t>(fenceSync)));
+ mState.mFenceSyncs->deleteFenceSync(
+ static_cast<GLuint>(reinterpret_cast<uintptr_t>(fenceSync)));
}
void Context::deletePaths(GLuint first, GLsizei range)
{
- mResourceManager->deletePaths(first, range);
+ mState.mPaths->deletePaths(first, range);
}
bool Context::hasPathData(GLuint path) const
{
- const auto *pathObj = mResourceManager->getPath(path);
+ const auto *pathObj = mState.mPaths->getPath(path);
if (pathObj == nullptr)
return false;
@@ -675,7 +658,7 @@
bool Context::hasPath(GLuint path) const
{
- return mResourceManager->hasPath(path);
+ return mState.mPaths->hasPath(path);
}
void Context::setPathCommands(GLuint path,
@@ -685,14 +668,14 @@
GLenum coordType,
const void *coords)
{
- auto *pathObject = mResourceManager->getPath(path);
+ auto *pathObject = mState.mPaths->getPath(path);
handleError(pathObject->setCommands(numCommands, commands, numCoords, coordType, coords));
}
void Context::setPathParameterf(GLuint path, GLenum pname, GLfloat value)
{
- auto *pathObj = mResourceManager->getPath(path);
+ auto *pathObj = mState.mPaths->getPath(path);
switch (pname)
{
@@ -719,7 +702,7 @@
void Context::getPathParameterfv(GLuint path, GLenum pname, GLfloat *value) const
{
- const auto *pathObj = mResourceManager->getPath(path);
+ const auto *pathObj = mState.mPaths->getPath(path);
switch (pname)
{
@@ -768,12 +751,12 @@
void Context::deleteSampler(GLuint sampler)
{
- if (mResourceManager->getSampler(sampler))
+ if (mState.mSamplers->getSampler(sampler))
{
detachSampler(sampler);
}
- mResourceManager->deleteSampler(sampler);
+ mState.mSamplers->deleteSampler(sampler);
}
void Context::deleteTransformFeedback(GLuint transformFeedback)
@@ -835,22 +818,23 @@
Buffer *Context::getBuffer(GLuint handle) const
{
- return mResourceManager->getBuffer(handle);
+ return mState.mBuffers->getBuffer(handle);
}
Texture *Context::getTexture(GLuint handle) const
{
- return mResourceManager->getTexture(handle);
+ return mState.mTextures->getTexture(handle);
}
Renderbuffer *Context::getRenderbuffer(GLuint handle) const
{
- return mResourceManager->getRenderbuffer(handle);
+ return mState.mRenderbuffers->getRenderbuffer(handle);
}
FenceSync *Context::getFenceSync(GLsync handle) const
{
- return mResourceManager->getFenceSync(static_cast<GLuint>(reinterpret_cast<uintptr_t>(handle)));
+ return mState.mFenceSyncs->getFenceSync(
+ static_cast<GLuint>(reinterpret_cast<uintptr_t>(handle)));
}
VertexArray *Context::getVertexArray(GLuint handle) const
@@ -861,7 +845,7 @@
Sampler *Context::getSampler(GLuint handle) const
{
- return mResourceManager->getSampler(handle);
+ return mState.mSamplers->getSampler(handle);
}
TransformFeedback *Context::getTransformFeedback(GLuint handle) const
@@ -950,24 +934,24 @@
bool Context::isSampler(GLuint samplerName) const
{
- return mResourceManager->isSampler(samplerName);
+ return mState.mSamplers->isSampler(samplerName);
}
void Context::bindArrayBuffer(GLuint bufferHandle)
{
- Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle);
+ Buffer *buffer = mState.mBuffers->checkBufferAllocation(mImplementation.get(), bufferHandle);
mGLState.setArrayBufferBinding(buffer);
}
void Context::bindDrawIndirectBuffer(GLuint bufferHandle)
{
- Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle);
+ Buffer *buffer = mState.mBuffers->checkBufferAllocation(mImplementation.get(), bufferHandle);
mGLState.setDrawIndirectBufferBinding(buffer);
}
void Context::bindElementArrayBuffer(GLuint bufferHandle)
{
- Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle);
+ Buffer *buffer = mState.mBuffers->checkBufferAllocation(mImplementation.get(), bufferHandle);
mGLState.getVertexArray()->setElementArrayBuffer(buffer);
}
@@ -981,7 +965,7 @@
}
else
{
- texture = mResourceManager->checkTextureAllocation(mImplementation.get(), handle, target);
+ texture = mState.mTextures->checkTextureAllocation(mImplementation.get(), handle, target);
}
ASSERT(texture);
@@ -1010,13 +994,13 @@
{
ASSERT(textureUnit < mCaps.maxCombinedTextureImageUnits);
Sampler *sampler =
- mResourceManager->checkSamplerAllocation(mImplementation.get(), samplerHandle);
+ mState.mSamplers->checkSamplerAllocation(mImplementation.get(), samplerHandle);
mGLState.setSamplerBinding(textureUnit, sampler);
}
void Context::bindGenericUniformBuffer(GLuint bufferHandle)
{
- Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle);
+ Buffer *buffer = mState.mBuffers->checkBufferAllocation(mImplementation.get(), bufferHandle);
mGLState.setGenericUniformBufferBinding(buffer);
}
@@ -1025,13 +1009,13 @@
GLintptr offset,
GLsizeiptr size)
{
- Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle);
+ Buffer *buffer = mState.mBuffers->checkBufferAllocation(mImplementation.get(), bufferHandle);
mGLState.setIndexedUniformBufferBinding(index, buffer, offset, size);
}
void Context::bindGenericTransformFeedbackBuffer(GLuint bufferHandle)
{
- Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle);
+ Buffer *buffer = mState.mBuffers->checkBufferAllocation(mImplementation.get(), bufferHandle);
mGLState.getCurrentTransformFeedback()->bindGenericBuffer(buffer);
}
@@ -1040,31 +1024,31 @@
GLintptr offset,
GLsizeiptr size)
{
- Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle);
+ Buffer *buffer = mState.mBuffers->checkBufferAllocation(mImplementation.get(), bufferHandle);
mGLState.getCurrentTransformFeedback()->bindIndexedBuffer(index, buffer, offset, size);
}
void Context::bindCopyReadBuffer(GLuint bufferHandle)
{
- Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle);
+ Buffer *buffer = mState.mBuffers->checkBufferAllocation(mImplementation.get(), bufferHandle);
mGLState.setCopyReadBufferBinding(buffer);
}
void Context::bindCopyWriteBuffer(GLuint bufferHandle)
{
- Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle);
+ Buffer *buffer = mState.mBuffers->checkBufferAllocation(mImplementation.get(), bufferHandle);
mGLState.setCopyWriteBufferBinding(buffer);
}
void Context::bindPixelPackBuffer(GLuint bufferHandle)
{
- Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle);
+ Buffer *buffer = mState.mBuffers->checkBufferAllocation(mImplementation.get(), bufferHandle);
mGLState.setPixelPackBufferBinding(buffer);
}
void Context::bindPixelUnpackBuffer(GLuint bufferHandle)
{
- Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle);
+ Buffer *buffer = mState.mBuffers->checkBufferAllocation(mImplementation.get(), bufferHandle);
mGLState.setPixelUnpackBufferBinding(buffer);
}
@@ -1742,7 +1726,7 @@
void Context::stencilFillPath(GLuint path, GLenum fillMode, GLuint mask)
{
- const auto *pathObj = mResourceManager->getPath(path);
+ const auto *pathObj = mState.mPaths->getPath(path);
if (!pathObj)
return;
@@ -1754,7 +1738,7 @@
void Context::stencilStrokePath(GLuint path, GLint reference, GLuint mask)
{
- const auto *pathObj = mResourceManager->getPath(path);
+ const auto *pathObj = mState.mPaths->getPath(path);
if (!pathObj)
return;
@@ -1766,7 +1750,7 @@
void Context::coverFillPath(GLuint path, GLenum coverMode)
{
- const auto *pathObj = mResourceManager->getPath(path);
+ const auto *pathObj = mState.mPaths->getPath(path);
if (!pathObj)
return;
@@ -1778,7 +1762,7 @@
void Context::coverStrokePath(GLuint path, GLenum coverMode)
{
- const auto *pathObj = mResourceManager->getPath(path);
+ const auto *pathObj = mState.mPaths->getPath(path);
if (!pathObj)
return;
@@ -1790,7 +1774,7 @@
void Context::stencilThenCoverFillPath(GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode)
{
- const auto *pathObj = mResourceManager->getPath(path);
+ const auto *pathObj = mState.mPaths->getPath(path);
if (!pathObj)
return;
@@ -1805,7 +1789,7 @@
GLuint mask,
GLenum coverMode)
{
- const auto *pathObj = mResourceManager->getPath(path);
+ const auto *pathObj = mState.mPaths->getPath(path);
if (!pathObj)
return;
@@ -1823,8 +1807,7 @@
GLenum transformType,
const GLfloat *transformValues)
{
- const auto &pathObjects =
- GatherPaths(*mResourceManager, numPaths, pathNameType, paths, pathBase);
+ const auto &pathObjects = GatherPaths(*mState.mPaths, numPaths, pathNameType, paths, pathBase);
// TODO(svaisanen@nvidia.com): maybe sync only state required for path rendering?
syncRendererState();
@@ -1840,8 +1823,7 @@
GLenum transformType,
const GLfloat *transformValues)
{
- const auto &pathObjects =
- GatherPaths(*mResourceManager, numPaths, pathNameType, paths, pathBase);
+ const auto &pathObjects = GatherPaths(*mState.mPaths, numPaths, pathNameType, paths, pathBase);
// TODO(svaisanen@nvidia.com): maybe sync only state required for path rendering?
syncRendererState();
@@ -1859,8 +1841,7 @@
GLenum transformType,
const GLfloat *transformValues)
{
- const auto &pathObjects =
- GatherPaths(*mResourceManager, numPaths, pathNameType, paths, pathBase);
+ const auto &pathObjects = GatherPaths(*mState.mPaths, numPaths, pathNameType, paths, pathBase);
// TODO(svaisanen@nvidia.com): maybe sync only state required for path rendering?
syncRendererState();
@@ -1878,8 +1859,7 @@
GLenum transformType,
const GLfloat *transformValues)
{
- const auto &pathObjects =
- GatherPaths(*mResourceManager, numPaths, pathNameType, paths, pathBase);
+ const auto &pathObjects = GatherPaths(*mState.mPaths, numPaths, pathNameType, paths, pathBase);
// TODO(svaisanen@nvidia.com): maybe sync only state required for path rendering?
syncRendererState();
@@ -1898,8 +1878,7 @@
GLenum transformType,
const GLfloat *transformValues)
{
- const auto &pathObjects =
- GatherPaths(*mResourceManager, numPaths, pathNameType, paths, pathBase);
+ const auto &pathObjects = GatherPaths(*mState.mPaths, numPaths, pathNameType, paths, pathBase);
// TODO(svaisanen@nvidia.com): maybe sync only state required for path rendering?
syncRendererState();
@@ -1918,8 +1897,7 @@
GLenum transformType,
const GLfloat *transformValues)
{
- const auto &pathObjects =
- GatherPaths(*mResourceManager, numPaths, pathNameType, paths, pathBase);
+ const auto &pathObjects = GatherPaths(*mState.mPaths, numPaths, pathNameType, paths, pathBase);
// TODO(svaisanen@nvidia.com): maybe sync only state required for path rendering?
syncRendererState();
@@ -2224,42 +2202,42 @@
void Context::samplerParameteri(GLuint sampler, GLenum pname, GLint param)
{
Sampler *samplerObject =
- mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
+ mState.mSamplers->checkSamplerAllocation(mImplementation.get(), sampler);
SetSamplerParameteri(samplerObject, pname, param);
}
void Context::samplerParameteriv(GLuint sampler, GLenum pname, const GLint *param)
{
Sampler *samplerObject =
- mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
+ mState.mSamplers->checkSamplerAllocation(mImplementation.get(), sampler);
SetSamplerParameteriv(samplerObject, pname, param);
}
void Context::samplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
{
Sampler *samplerObject =
- mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
+ mState.mSamplers->checkSamplerAllocation(mImplementation.get(), sampler);
SetSamplerParameterf(samplerObject, pname, param);
}
void Context::samplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param)
{
Sampler *samplerObject =
- mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
+ mState.mSamplers->checkSamplerAllocation(mImplementation.get(), sampler);
SetSamplerParameterfv(samplerObject, pname, param);
}
void Context::getSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
{
const Sampler *samplerObject =
- mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
+ mState.mSamplers->checkSamplerAllocation(mImplementation.get(), sampler);
QuerySamplerParameteriv(samplerObject, pname, params);
}
void Context::getSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
{
const Sampler *samplerObject =
- mResourceManager->checkSamplerAllocation(mImplementation.get(), sampler);
+ mState.mSamplers->checkSamplerAllocation(mImplementation.get(), sampler);
QuerySamplerParameterfv(samplerObject, pname, params);
}
@@ -3594,8 +3572,8 @@
void Context::attachShader(GLuint program, GLuint shader)
{
- auto programObject = mResourceManager->getProgram(program);
- auto shaderObject = mResourceManager->getShader(shader);
+ auto programObject = mState.mShaderPrograms->getProgram(program);
+ auto shaderObject = mState.mShaderPrograms->getShader(shader);
ASSERT(programObject && shaderObject);
programObject->attachShader(shaderObject);
}
@@ -3708,7 +3686,7 @@
{
ASSERT(target == GL_RENDERBUFFER);
Renderbuffer *object =
- mResourceManager->checkRenderbufferAllocation(mImplementation.get(), renderbuffer);
+ mState.mRenderbuffers->checkRenderbufferAllocation(mImplementation.get(), renderbuffer);
mGLState.setRenderbufferBinding(object);
}