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())
......
...@@ -523,7 +523,7 @@ public: ...@@ -523,7 +523,7 @@ public:
bool isDepthTestEnabled() const; bool isDepthTestEnabled() const;
void setDepthFunc(GLenum depthFunc); void setDepthFunc(GLenum depthFunc);
void setDepthRange(float zNear, float zFar); void setDepthRange(float zNear, float zFar);
void setBlendEnabled(bool enabled); void setBlendEnabled(bool enabled);
bool isBlendEnabled() const; bool isBlendEnabled() const;
void setBlendFactors(GLenum sourceRGB, GLenum destRGB, GLenum sourceAlpha, GLenum destAlpha); void setBlendFactors(GLenum sourceRGB, GLenum destRGB, GLenum sourceAlpha, GLenum destAlpha);
...@@ -590,7 +590,7 @@ public: ...@@ -590,7 +590,7 @@ public:
void setPackAlignment(GLint alignment); void setPackAlignment(GLint alignment);
GLint getPackAlignment() const; 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 // ResourceManager, which owns these object types
GLuint createBuffer(); GLuint createBuffer();
GLuint createShader(GLenum type); GLuint createShader(GLenum type);
...@@ -674,8 +674,8 @@ public: ...@@ -674,8 +674,8 @@ public:
GLenum getError(); GLenum getError();
static int getSupportedMultisampleCount(int requested); 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, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
GLbitfield mask); GLbitfield mask);
...@@ -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;
...@@ -778,7 +770,7 @@ private: ...@@ -778,7 +770,7 @@ private:
bool mHasBeenCurrent; bool mHasBeenCurrent;
unsigned int mAppliedProgramSerial; unsigned int mAppliedProgramSerial;
// state caching flags // state caching flags
bool mDepthStateDirty; bool mDepthStateDirty;
bool mMaskStateDirty; bool mMaskStateDirty;
......
...@@ -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); detachFramebuffer(framebuffer);
if(framebufferObject != mFramebufferMap.end()) Framebuffer *framebufferObject = mFramebufferNameSpace.remove(framebuffer);
{
detachFramebuffer(framebuffer);
delete framebufferObject->second; if(framebufferObject)
mFramebufferNameSpace.remove(framebufferObject->first); {
mFramebufferMap.erase(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,9 +594,7 @@ private: ...@@ -594,9 +594,7 @@ private:
gl::BindingPointer<Texture2D> mTexture2DZero; gl::BindingPointer<Texture2D> mTexture2DZero;
gl::BindingPointer<TextureExternal> mTextureExternalZero; gl::BindingPointer<TextureExternal> mTextureExternalZero;
typedef std::map<GLint, Framebuffer*> FramebufferMap; gl::NameSpace<Framebuffer> mFramebufferNameSpace;
FramebufferMap mFramebufferMap;
gl::NameSpace<Framebuffer> mFramebufferNameSpace;
VertexDataManager *mVertexDataManager; VertexDataManager *mVertexDataManager;
IndexDataManager *mIndexDataManager; IndexDataManager *mIndexDataManager;
......
...@@ -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; gl::NameSpace<Framebuffer> mFramebufferNameSpace;
FramebufferMap mFramebufferMap; gl::NameSpace<Fence, 0> mFenceNameSpace;
gl::NameSpace<Framebuffer> mFramebufferNameSpace; gl::NameSpace<Query> mQueryNameSpace;
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<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