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: ...@@ -46,7 +46,7 @@ public:
return map.begin()->first; return map.begin()->first;
} }
GLuint allocate() GLuint allocate(ObjectType *object = nullptr)
{ {
GLuint name = freeName; GLuint name = freeName;
...@@ -55,13 +55,13 @@ public: ...@@ -55,13 +55,13 @@ public:
name++; name++;
} }
map.insert({name, nullptr}); map.insert({name, object});
freeName = name + 1; freeName = name + 1;
return name; return name;
} }
bool isReserved(GLuint name) bool isReserved(GLuint name) const
{ {
return map.find(name) != map.end(); return map.find(name) != map.end();
} }
...@@ -96,13 +96,8 @@ public: ...@@ -96,13 +96,8 @@ public:
return nullptr; return nullptr;
} }
ObjectType *find(GLuint name) ObjectType *find(GLuint name) const
{ {
if(name < baseName)
{
return nullptr;
}
auto element = map.find(name); auto element = map.find(name);
if(element == map.end()) if(element == map.end())
......
...@@ -753,17 +753,9 @@ private: ...@@ -753,17 +753,9 @@ private:
BindingPointer<Texture2D> mProxyTexture2DZero; BindingPointer<Texture2D> mProxyTexture2DZero;
BindingPointer<TextureCubeMap> mTextureCubeMapZero; BindingPointer<TextureCubeMap> mTextureCubeMapZero;
typedef std::map<GLint, Framebuffer*> FramebufferMap; gl::NameSpace<Framebuffer> mFramebufferNameSpace;
FramebufferMap mFramebufferMap; gl::NameSpace<Fence, 0> mFenceNameSpace;
//NameSpace mFramebufferNameSpace; gl::NameSpace<Query> mQueryNameSpace;
typedef std::map<GLint, Fence*> FenceMap;
FenceMap mFenceMap;
//NameSpace mFenceNameSpace;
typedef std::map<GLint, Query*> QueryMap;
QueryMap mQueryMap;
//NameSpace mQueryNameSpace;
VertexDataManager *mVertexDataManager; VertexDataManager *mVertexDataManager;
IndexDataManager *mIndexDataManager; IndexDataManager *mIndexDataManager;
......
...@@ -245,9 +245,9 @@ Context::Context(const egl::Config *config, const Context *shareContext) ...@@ -245,9 +245,9 @@ Context::Context(const egl::Config *config, const Context *shareContext)
Context::~Context() Context::~Context()
{ {
while(!mFramebufferMap.empty()) while(!mFramebufferNameSpace.empty())
{ {
deleteFramebuffer(mFramebufferMap.begin()->first); deleteFramebuffer(mFramebufferNameSpace.firstName());
} }
for(int type = 0; type < TEXTURE_TYPE_COUNT; type++) for(int type = 0; type < TEXTURE_TYPE_COUNT; type++)
...@@ -933,54 +933,39 @@ GLuint Context::createRenderbuffer() ...@@ -933,54 +933,39 @@ GLuint Context::createRenderbuffer()
// Returns an unused framebuffer name // Returns an unused framebuffer name
GLuint Context::createFramebuffer() GLuint Context::createFramebuffer()
{ {
GLuint handle = mFramebufferNameSpace.allocate(); return mFramebufferNameSpace.allocate();
mFramebufferMap[handle] = nullptr;
return handle;
} }
void Context::deleteBuffer(GLuint buffer) void Context::deleteBuffer(GLuint buffer)
{ {
if(mResourceManager->getBuffer(buffer))
{
detachBuffer(buffer); detachBuffer(buffer);
}
mResourceManager->deleteBuffer(buffer); mResourceManager->deleteBuffer(buffer);
} }
void Context::deleteTexture(GLuint texture) void Context::deleteTexture(GLuint texture)
{ {
if(mResourceManager->getTexture(texture))
{
detachTexture(texture); detachTexture(texture);
}
mResourceManager->deleteTexture(texture); mResourceManager->deleteTexture(texture);
} }
void Context::deleteRenderbuffer(GLuint renderbuffer) void Context::deleteRenderbuffer(GLuint renderbuffer)
{ {
if(mResourceManager->getRenderbuffer(renderbuffer))
{
detachRenderbuffer(renderbuffer); detachRenderbuffer(renderbuffer);
}
mResourceManager->deleteRenderbuffer(renderbuffer); mResourceManager->deleteRenderbuffer(renderbuffer);
} }
void Context::deleteFramebuffer(GLuint framebuffer) void Context::deleteFramebuffer(GLuint framebuffer)
{ {
FramebufferMap::iterator framebufferObject = mFramebufferMap.find(framebuffer);
if(framebufferObject != mFramebufferMap.end())
{
detachFramebuffer(framebuffer); detachFramebuffer(framebuffer);
delete framebufferObject->second; Framebuffer *framebufferObject = mFramebufferNameSpace.remove(framebuffer);
mFramebufferNameSpace.remove(framebufferObject->first);
mFramebufferMap.erase(framebufferObject); if(framebufferObject)
{
delete framebufferObject;
} }
} }
...@@ -1036,7 +1021,7 @@ void Context::bindFramebuffer(GLuint framebuffer) ...@@ -1036,7 +1021,7 @@ void Context::bindFramebuffer(GLuint framebuffer)
{ {
if(!getFramebuffer(framebuffer)) if(!getFramebuffer(framebuffer))
{ {
mFramebufferMap[framebuffer] = new Framebuffer(); mFramebufferNameSpace.insert(framebuffer, new Framebuffer());
} }
mState.framebuffer = framebuffer; mState.framebuffer = framebuffer;
...@@ -1051,8 +1036,8 @@ void Context::bindRenderbuffer(GLuint renderbuffer) ...@@ -1051,8 +1036,8 @@ void Context::bindRenderbuffer(GLuint renderbuffer)
void Context::setFramebufferZero(Framebuffer *buffer) void Context::setFramebufferZero(Framebuffer *buffer)
{ {
delete mFramebufferMap[0]; delete mFramebufferNameSpace.remove(0);
mFramebufferMap[0] = buffer; mFramebufferNameSpace.insert(0, buffer);
} }
void Context::setRenderbufferStorage(RenderbufferStorage *renderbuffer) void Context::setRenderbufferStorage(RenderbufferStorage *renderbuffer)
...@@ -1063,16 +1048,7 @@ void Context::setRenderbufferStorage(RenderbufferStorage *renderbuffer) ...@@ -1063,16 +1048,7 @@ void Context::setRenderbufferStorage(RenderbufferStorage *renderbuffer)
Framebuffer *Context::getFramebuffer(unsigned int handle) Framebuffer *Context::getFramebuffer(unsigned int handle)
{ {
FramebufferMap::iterator framebuffer = mFramebufferMap.find(handle); return mFramebufferNameSpace.find(handle);
if(framebuffer == mFramebufferMap.end())
{
return nullptr;
}
else
{
return framebuffer->second;
}
} }
Buffer *Context::getArrayBuffer() Buffer *Context::getArrayBuffer()
......
...@@ -594,8 +594,6 @@ private: ...@@ -594,8 +594,6 @@ private:
gl::BindingPointer<Texture2D> mTexture2DZero; gl::BindingPointer<Texture2D> mTexture2DZero;
gl::BindingPointer<TextureExternal> mTextureExternalZero; gl::BindingPointer<TextureExternal> mTextureExternalZero;
typedef std::map<GLint, Framebuffer*> FramebufferMap;
FramebufferMap mFramebufferMap;
gl::NameSpace<Framebuffer> mFramebufferNameSpace; gl::NameSpace<Framebuffer> mFramebufferNameSpace;
VertexDataManager *mVertexDataManager; VertexDataManager *mVertexDataManager;
......
...@@ -86,7 +86,7 @@ void ResourceManager::deleteBuffer(GLuint buffer) ...@@ -86,7 +86,7 @@ void ResourceManager::deleteBuffer(GLuint buffer)
void ResourceManager::deleteTexture(GLuint texture) void ResourceManager::deleteTexture(GLuint texture)
{ {
Texture *textureObject = mTextureNameSpace.find(texture); Texture *textureObject = mTextureNameSpace.remove(texture);
if(textureObject) if(textureObject)
{ {
...@@ -96,7 +96,7 @@ void ResourceManager::deleteTexture(GLuint texture) ...@@ -96,7 +96,7 @@ void ResourceManager::deleteTexture(GLuint texture)
void ResourceManager::deleteRenderbuffer(GLuint renderbuffer) void ResourceManager::deleteRenderbuffer(GLuint renderbuffer)
{ {
Renderbuffer *renderbufferObject = mRenderbufferNameSpace.find(renderbuffer); Renderbuffer *renderbufferObject = mRenderbufferNameSpace.remove(renderbuffer);
if(renderbufferObject) if(renderbufferObject)
{ {
......
...@@ -575,7 +575,7 @@ public: ...@@ -575,7 +575,7 @@ public:
void bindIndexedUniformBuffer(GLuint buffer, GLuint index, GLintptr offset, GLsizeiptr size); void bindIndexedUniformBuffer(GLuint buffer, GLuint index, GLintptr offset, GLsizeiptr size);
void bindGenericTransformFeedbackBuffer(GLuint buffer); void bindGenericTransformFeedbackBuffer(GLuint buffer);
void bindIndexedTransformFeedbackBuffer(GLuint buffer, GLuint index, GLintptr offset, GLsizeiptr size); void bindIndexedTransformFeedbackBuffer(GLuint buffer, GLuint index, GLintptr offset, GLsizeiptr size);
bool bindTransformFeedback(GLuint transformFeedback); void bindTransformFeedback(GLuint transformFeedback);
bool bindSampler(GLuint unit, GLuint sampler); bool bindSampler(GLuint unit, GLuint sampler);
void useProgram(GLuint program); void useProgram(GLuint program);
...@@ -709,24 +709,10 @@ private: ...@@ -709,24 +709,10 @@ private:
gl::BindingPointer<TextureCubeMap> mTextureCubeMapZero; gl::BindingPointer<TextureCubeMap> mTextureCubeMapZero;
gl::BindingPointer<TextureExternal> mTextureExternalZero; gl::BindingPointer<TextureExternal> mTextureExternalZero;
typedef std::map<GLint, Framebuffer*> FramebufferMap;
FramebufferMap mFramebufferMap;
gl::NameSpace<Framebuffer> mFramebufferNameSpace; gl::NameSpace<Framebuffer> mFramebufferNameSpace;
typedef std::map<GLint, Fence*> FenceMap;
FenceMap mFenceMap;
gl::NameSpace<Fence, 0> mFenceNameSpace; gl::NameSpace<Fence, 0> mFenceNameSpace;
typedef std::map<GLint, Query*> QueryMap;
QueryMap mQueryMap;
gl::NameSpace<Query> mQueryNameSpace; gl::NameSpace<Query> mQueryNameSpace;
typedef std::map<GLint, VertexArray*> VertexArrayMap;
VertexArrayMap mVertexArrayMap;
gl::NameSpace<VertexArray> mVertexArrayNameSpace; gl::NameSpace<VertexArray> mVertexArrayNameSpace;
typedef std::map<GLint, TransformFeedback*> TransformFeedbackMap;
TransformFeedbackMap mTransformFeedbackMap;
gl::NameSpace<TransformFeedback> mTransformFeedbackNameSpace; gl::NameSpace<TransformFeedback> mTransformFeedbackNameSpace;
VertexDataManager *mVertexDataManager; VertexDataManager *mVertexDataManager;
......
...@@ -3576,10 +3576,7 @@ GL_APICALL void GL_APIENTRY glBindTransformFeedback(GLenum target, GLuint id) ...@@ -3576,10 +3576,7 @@ GL_APICALL void GL_APIENTRY glBindTransformFeedback(GLenum target, GLuint id)
return error(GL_INVALID_OPERATION); return error(GL_INVALID_OPERATION);
} }
if(!context->bindTransformFeedback(id)) context->bindTransformFeedback(id);
{
return error(GL_INVALID_OPERATION);
}
} }
} }
......
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