Commit 4df0c65b by Nicolas Capens

Use namespaces for context owned objects.

Bug 19219444 Change-Id: I9606dfb30693a15a06896d83888022ccbaa8db2e Reviewed-on: https://swiftshader-review.googlesource.com/5010Tested-by: 's avatarNicolas Capens <capn@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 433ae74c
......@@ -46,7 +46,7 @@ public:
return map.begin()->first;
}
GLuint allocate()
GLuint allocate(ObjectType *object = nullptr)
{
GLuint name = freeName;
......@@ -55,13 +55,13 @@ public:
name++;
}
map.insert({name, nullptr});
map.insert({name, object});
freeName = name + 1;
return name;
}
bool isReserved(GLuint name)
bool isReserved(GLuint name) const
{
return map.find(name) != map.end();
}
......@@ -96,13 +96,8 @@ public:
return nullptr;
}
ObjectType *find(GLuint name)
ObjectType *find(GLuint name) const
{
if(name < baseName)
{
return nullptr;
}
auto element = map.find(name);
if(element == map.end())
......
......@@ -523,7 +523,7 @@ public:
bool isDepthTestEnabled() const;
void setDepthFunc(GLenum depthFunc);
void setDepthRange(float zNear, float zFar);
void setBlendEnabled(bool enabled);
bool isBlendEnabled() const;
void setBlendFactors(GLenum sourceRGB, GLenum destRGB, GLenum sourceAlpha, GLenum destAlpha);
......@@ -590,7 +590,7 @@ public:
void setPackAlignment(GLint alignment);
GLint getPackAlignment() const;
// These create and destroy methods are merely pass-throughs to
// These create and destroy methods are merely pass-throughs to
// ResourceManager, which owns these object types
GLuint createBuffer();
GLuint createShader(GLenum type);
......@@ -674,8 +674,8 @@ public:
GLenum getError();
static int getSupportedMultisampleCount(int requested);
void blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
void blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
GLbitfield mask);
......@@ -753,17 +753,9 @@ private:
BindingPointer<Texture2D> mProxyTexture2DZero;
BindingPointer<TextureCubeMap> mTextureCubeMapZero;
typedef std::map<GLint, Framebuffer*> FramebufferMap;
FramebufferMap mFramebufferMap;
//NameSpace mFramebufferNameSpace;
typedef std::map<GLint, Fence*> FenceMap;
FenceMap mFenceMap;
//NameSpace mFenceNameSpace;
typedef std::map<GLint, Query*> QueryMap;
QueryMap mQueryMap;
//NameSpace mQueryNameSpace;
gl::NameSpace<Framebuffer> mFramebufferNameSpace;
gl::NameSpace<Fence, 0> mFenceNameSpace;
gl::NameSpace<Query> mQueryNameSpace;
VertexDataManager *mVertexDataManager;
IndexDataManager *mIndexDataManager;
......@@ -778,7 +770,7 @@ private:
bool mHasBeenCurrent;
unsigned int mAppliedProgramSerial;
// state caching flags
bool mDepthStateDirty;
bool mMaskStateDirty;
......
......@@ -245,9 +245,9 @@ Context::Context(const egl::Config *config, const Context *shareContext)
Context::~Context()
{
while(!mFramebufferMap.empty())
while(!mFramebufferNameSpace.empty())
{
deleteFramebuffer(mFramebufferMap.begin()->first);
deleteFramebuffer(mFramebufferNameSpace.firstName());
}
for(int type = 0; type < TEXTURE_TYPE_COUNT; type++)
......@@ -933,54 +933,39 @@ GLuint Context::createRenderbuffer()
// Returns an unused framebuffer name
GLuint Context::createFramebuffer()
{
GLuint handle = mFramebufferNameSpace.allocate();
mFramebufferMap[handle] = nullptr;
return handle;
return mFramebufferNameSpace.allocate();
}
void Context::deleteBuffer(GLuint buffer)
{
if(mResourceManager->getBuffer(buffer))
{
detachBuffer(buffer);
}
detachBuffer(buffer);
mResourceManager->deleteBuffer(buffer);
}
void Context::deleteTexture(GLuint texture)
{
if(mResourceManager->getTexture(texture))
{
detachTexture(texture);
}
detachTexture(texture);
mResourceManager->deleteTexture(texture);
}
void Context::deleteRenderbuffer(GLuint renderbuffer)
{
if(mResourceManager->getRenderbuffer(renderbuffer))
{
detachRenderbuffer(renderbuffer);
}
detachRenderbuffer(renderbuffer);
mResourceManager->deleteRenderbuffer(renderbuffer);
}
void Context::deleteFramebuffer(GLuint framebuffer)
{
FramebufferMap::iterator framebufferObject = mFramebufferMap.find(framebuffer);
detachFramebuffer(framebuffer);
if(framebufferObject != mFramebufferMap.end())
{
detachFramebuffer(framebuffer);
Framebuffer *framebufferObject = mFramebufferNameSpace.remove(framebuffer);
delete framebufferObject->second;
mFramebufferNameSpace.remove(framebufferObject->first);
mFramebufferMap.erase(framebufferObject);
if(framebufferObject)
{
delete framebufferObject;
}
}
......@@ -1036,7 +1021,7 @@ void Context::bindFramebuffer(GLuint framebuffer)
{
if(!getFramebuffer(framebuffer))
{
mFramebufferMap[framebuffer] = new Framebuffer();
mFramebufferNameSpace.insert(framebuffer, new Framebuffer());
}
mState.framebuffer = framebuffer;
......@@ -1051,8 +1036,8 @@ void Context::bindRenderbuffer(GLuint renderbuffer)
void Context::setFramebufferZero(Framebuffer *buffer)
{
delete mFramebufferMap[0];
mFramebufferMap[0] = buffer;
delete mFramebufferNameSpace.remove(0);
mFramebufferNameSpace.insert(0, buffer);
}
void Context::setRenderbufferStorage(RenderbufferStorage *renderbuffer)
......@@ -1063,16 +1048,7 @@ void Context::setRenderbufferStorage(RenderbufferStorage *renderbuffer)
Framebuffer *Context::getFramebuffer(unsigned int handle)
{
FramebufferMap::iterator framebuffer = mFramebufferMap.find(handle);
if(framebuffer == mFramebufferMap.end())
{
return nullptr;
}
else
{
return framebuffer->second;
}
return mFramebufferNameSpace.find(handle);
}
Buffer *Context::getArrayBuffer()
......
......@@ -594,9 +594,7 @@ private:
gl::BindingPointer<Texture2D> mTexture2DZero;
gl::BindingPointer<TextureExternal> mTextureExternalZero;
typedef std::map<GLint, Framebuffer*> FramebufferMap;
FramebufferMap mFramebufferMap;
gl::NameSpace<Framebuffer> mFramebufferNameSpace;
gl::NameSpace<Framebuffer> mFramebufferNameSpace;
VertexDataManager *mVertexDataManager;
IndexDataManager *mIndexDataManager;
......
......@@ -86,7 +86,7 @@ void ResourceManager::deleteBuffer(GLuint buffer)
void ResourceManager::deleteTexture(GLuint texture)
{
Texture *textureObject = mTextureNameSpace.find(texture);
Texture *textureObject = mTextureNameSpace.remove(texture);
if(textureObject)
{
......@@ -96,7 +96,7 @@ void ResourceManager::deleteTexture(GLuint texture)
void ResourceManager::deleteRenderbuffer(GLuint renderbuffer)
{
Renderbuffer *renderbufferObject = mRenderbufferNameSpace.find(renderbuffer);
Renderbuffer *renderbufferObject = mRenderbufferNameSpace.remove(renderbuffer);
if(renderbufferObject)
{
......
......@@ -575,7 +575,7 @@ public:
void bindIndexedUniformBuffer(GLuint buffer, GLuint index, GLintptr offset, GLsizeiptr size);
void bindGenericTransformFeedbackBuffer(GLuint buffer);
void bindIndexedTransformFeedbackBuffer(GLuint buffer, GLuint index, GLintptr offset, GLsizeiptr size);
bool bindTransformFeedback(GLuint transformFeedback);
void bindTransformFeedback(GLuint transformFeedback);
bool bindSampler(GLuint unit, GLuint sampler);
void useProgram(GLuint program);
......@@ -709,24 +709,10 @@ private:
gl::BindingPointer<TextureCubeMap> mTextureCubeMapZero;
gl::BindingPointer<TextureExternal> mTextureExternalZero;
typedef std::map<GLint, Framebuffer*> FramebufferMap;
FramebufferMap mFramebufferMap;
gl::NameSpace<Framebuffer> mFramebufferNameSpace;
typedef std::map<GLint, Fence*> FenceMap;
FenceMap mFenceMap;
gl::NameSpace<Fence, 0> mFenceNameSpace;
typedef std::map<GLint, Query*> QueryMap;
QueryMap mQueryMap;
gl::NameSpace<Query> mQueryNameSpace;
typedef std::map<GLint, VertexArray*> VertexArrayMap;
VertexArrayMap mVertexArrayMap;
gl::NameSpace<Framebuffer> mFramebufferNameSpace;
gl::NameSpace<Fence, 0> mFenceNameSpace;
gl::NameSpace<Query> mQueryNameSpace;
gl::NameSpace<VertexArray> mVertexArrayNameSpace;
typedef std::map<GLint, TransformFeedback*> TransformFeedbackMap;
TransformFeedbackMap mTransformFeedbackMap;
gl::NameSpace<TransformFeedback> mTransformFeedbackNameSpace;
VertexDataManager *mVertexDataManager;
......
......@@ -3576,10 +3576,7 @@ GL_APICALL void GL_APIENTRY glBindTransformFeedback(GLenum target, GLuint id)
return error(GL_INVALID_OPERATION);
}
if(!context->bindTransformFeedback(id))
{
return error(GL_INVALID_OPERATION);
}
context->bindTransformFeedback(id);
}
}
......
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