Commit fddfe9c9 by Nicolas Capens

Fix reserving user picked object names.

Bug 19219444 Change-Id: Ic0e3c5a37174917a541452bab9f92738bc766044 Reviewed-on: https://swiftshader-review.googlesource.com/4986Tested-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 c57e5366
...@@ -48,6 +48,16 @@ public: ...@@ -48,6 +48,16 @@ public:
return name; return name;
} }
void insert(GLuint name)
{
std::unordered_set<GLuint>::insert(name);
if(name == freeName)
{
freeName++;
}
}
void release(GLuint name) void release(GLuint name)
{ {
erase(name); erase(name);
...@@ -55,7 +65,7 @@ public: ...@@ -55,7 +65,7 @@ public:
} }
private: private:
GLuint freeName; GLuint freeName; // Lowest known potentially free name
}; };
} }
......
...@@ -125,7 +125,7 @@ Context::Context(const egl::Config *config, const Context *shareContext) ...@@ -125,7 +125,7 @@ Context::Context(const egl::Config *config, const Context *shareContext)
mState.textureUnit[i].operand2Alpha = GL_SRC_ALPHA; mState.textureUnit[i].operand2Alpha = GL_SRC_ALPHA;
} }
if(shareContext != NULL) if(shareContext)
{ {
mResourceManager = shareContext->mResourceManager; mResourceManager = shareContext->mResourceManager;
mResourceManager->addRef(); mResourceManager->addRef();
...@@ -254,21 +254,21 @@ Context::~Context() ...@@ -254,21 +254,21 @@ Context::~Context()
{ {
for(int sampler = 0; sampler < MAX_TEXTURE_UNITS; sampler++) for(int sampler = 0; sampler < MAX_TEXTURE_UNITS; sampler++)
{ {
mState.samplerTexture[type][sampler] = NULL; mState.samplerTexture[type][sampler] = nullptr;
} }
} }
for(int i = 0; i < MAX_VERTEX_ATTRIBS; i++) for(int i = 0; i < MAX_VERTEX_ATTRIBS; i++)
{ {
mState.vertexAttribute[i].mBoundBuffer = NULL; mState.vertexAttribute[i].mBoundBuffer = nullptr;
} }
mState.arrayBuffer = NULL; mState.arrayBuffer = nullptr;
mState.elementArrayBuffer = NULL; mState.elementArrayBuffer = nullptr;
mState.renderbuffer = NULL; mState.renderbuffer = nullptr;
mTexture2DZero = NULL; mTexture2DZero = nullptr;
mTextureExternalZero = NULL; mTextureExternalZero = nullptr;
delete mVertexDataManager; delete mVertexDataManager;
delete mIndexDataManager; delete mIndexDataManager;
...@@ -935,7 +935,7 @@ GLuint Context::createFramebuffer() ...@@ -935,7 +935,7 @@ GLuint Context::createFramebuffer()
{ {
GLuint handle = mFramebufferNameSpace.allocate(); GLuint handle = mFramebufferNameSpace.allocate();
mFramebufferMap[handle] = NULL; mFramebufferMap[handle] = nullptr;
return handle; return handle;
} }
...@@ -1044,6 +1044,8 @@ void Context::bindFramebuffer(GLuint framebuffer) ...@@ -1044,6 +1044,8 @@ void Context::bindFramebuffer(GLuint framebuffer)
void Context::bindRenderbuffer(GLuint renderbuffer) void Context::bindRenderbuffer(GLuint renderbuffer)
{ {
mResourceManager->checkRenderbufferAllocation(renderbuffer);
mState.renderbuffer = getRenderbuffer(renderbuffer); mState.renderbuffer = getRenderbuffer(renderbuffer);
} }
...@@ -1065,7 +1067,7 @@ Framebuffer *Context::getFramebuffer(unsigned int handle) ...@@ -1065,7 +1067,7 @@ Framebuffer *Context::getFramebuffer(unsigned int handle)
if(framebuffer == mFramebufferMap.end()) if(framebuffer == mFramebufferMap.end())
{ {
return NULL; return nullptr;
} }
else else
{ {
...@@ -2976,19 +2978,19 @@ void Context::detachBuffer(GLuint buffer) ...@@ -2976,19 +2978,19 @@ void Context::detachBuffer(GLuint buffer)
if(mState.arrayBuffer.name() == buffer) if(mState.arrayBuffer.name() == buffer)
{ {
mState.arrayBuffer = NULL; mState.arrayBuffer = nullptr;
} }
if(mState.elementArrayBuffer.name() == buffer) if(mState.elementArrayBuffer.name() == buffer)
{ {
mState.elementArrayBuffer = NULL; mState.elementArrayBuffer = nullptr;
} }
for(int attribute = 0; attribute < MAX_VERTEX_ATTRIBS; attribute++) for(int attribute = 0; attribute < MAX_VERTEX_ATTRIBS; attribute++)
{ {
if(mState.vertexAttribute[attribute].mBoundBuffer.name() == buffer) if(mState.vertexAttribute[attribute].mBoundBuffer.name() == buffer)
{ {
mState.vertexAttribute[attribute].mBoundBuffer = NULL; mState.vertexAttribute[attribute].mBoundBuffer = nullptr;
} }
} }
} }
...@@ -3005,7 +3007,7 @@ void Context::detachTexture(GLuint texture) ...@@ -3005,7 +3007,7 @@ void Context::detachTexture(GLuint texture)
{ {
if(mState.samplerTexture[type][sampler].name() == texture) if(mState.samplerTexture[type][sampler].name() == texture)
{ {
mState.samplerTexture[type][sampler] = NULL; mState.samplerTexture[type][sampler] = nullptr;
} }
} }
} }
......
...@@ -61,7 +61,7 @@ GLuint ResourceManager::createBuffer() ...@@ -61,7 +61,7 @@ GLuint ResourceManager::createBuffer()
{ {
GLuint handle = mBufferNameSpace.allocate(); GLuint handle = mBufferNameSpace.allocate();
mBufferMap[handle] = NULL; mBufferMap[handle] = nullptr;
return handle; return handle;
} }
...@@ -71,7 +71,7 @@ GLuint ResourceManager::createTexture() ...@@ -71,7 +71,7 @@ GLuint ResourceManager::createTexture()
{ {
GLuint handle = mTextureNameSpace.allocate(); GLuint handle = mTextureNameSpace.allocate();
mTextureMap[handle] = NULL; mTextureMap[handle] = nullptr;
return handle; return handle;
} }
...@@ -81,7 +81,7 @@ GLuint ResourceManager::createRenderbuffer() ...@@ -81,7 +81,7 @@ GLuint ResourceManager::createRenderbuffer()
{ {
GLuint handle = mRenderbufferNameSpace.allocate(); GLuint handle = mRenderbufferNameSpace.allocate();
mRenderbufferMap[handle] = NULL; mRenderbufferMap[handle] = nullptr;
return handle; return handle;
} }
...@@ -128,7 +128,7 @@ Buffer *ResourceManager::getBuffer(unsigned int handle) ...@@ -128,7 +128,7 @@ Buffer *ResourceManager::getBuffer(unsigned int handle)
if(buffer == mBufferMap.end()) if(buffer == mBufferMap.end())
{ {
return NULL; return nullptr;
} }
else else
{ {
...@@ -138,13 +138,13 @@ Buffer *ResourceManager::getBuffer(unsigned int handle) ...@@ -138,13 +138,13 @@ Buffer *ResourceManager::getBuffer(unsigned int handle)
Texture *ResourceManager::getTexture(unsigned int handle) Texture *ResourceManager::getTexture(unsigned int handle)
{ {
if(handle == 0) return NULL; if(handle == 0) return nullptr;
TextureMap::iterator texture = mTextureMap.find(handle); TextureMap::iterator texture = mTextureMap.find(handle);
if(texture == mTextureMap.end()) if(texture == mTextureMap.end())
{ {
return NULL; return nullptr;
} }
else else
{ {
...@@ -158,16 +158,10 @@ Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle) ...@@ -158,16 +158,10 @@ Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle)
if(renderbuffer == mRenderbufferMap.end()) if(renderbuffer == mRenderbufferMap.end())
{ {
return NULL; return nullptr;
} }
else else
{ {
if (!renderbuffer->second)
{
Renderbuffer *renderbufferObject = new Renderbuffer(handle, new Colorbuffer(0, 0, GL_RGBA4_OES, 0));
mRenderbufferMap[handle] = renderbufferObject;
renderbufferObject->addRef();
}
return renderbuffer->second; return renderbuffer->second;
} }
} }
...@@ -182,8 +176,10 @@ void ResourceManager::checkBufferAllocation(unsigned int buffer) ...@@ -182,8 +176,10 @@ void ResourceManager::checkBufferAllocation(unsigned int buffer)
if(buffer != 0 && !getBuffer(buffer)) if(buffer != 0 && !getBuffer(buffer))
{ {
Buffer *bufferObject = new Buffer(buffer); Buffer *bufferObject = new Buffer(buffer);
mBufferMap[buffer] = bufferObject;
bufferObject->addRef(); bufferObject->addRef();
mBufferNameSpace.insert(buffer);
mBufferMap[buffer] = bufferObject;
} }
} }
...@@ -207,8 +203,22 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type) ...@@ -207,8 +203,22 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type)
return; return;
} }
mTextureMap[texture] = textureObject;
textureObject->addRef(); textureObject->addRef();
mTextureNameSpace.insert(texture);
mTextureMap[texture] = textureObject;
}
}
void ResourceManager::checkRenderbufferAllocation(GLuint handle)
{
if(handle != 0 && !getRenderbuffer(handle))
{
Renderbuffer *renderbufferObject = new Renderbuffer(handle, new Colorbuffer(0, 0, GL_RGBA4_OES, 0));
renderbufferObject->addRef();
mRenderbufferNameSpace.insert(handle);
mRenderbufferMap[handle] = renderbufferObject;
} }
} }
......
...@@ -62,6 +62,7 @@ public: ...@@ -62,6 +62,7 @@ public:
void checkBufferAllocation(unsigned int buffer); void checkBufferAllocation(unsigned int buffer);
void checkTextureAllocation(GLuint texture, TextureType type); void checkTextureAllocation(GLuint texture, TextureType type);
void checkRenderbufferAllocation(GLuint handle);
private: private:
std::size_t mRefCount; std::size_t mRefCount;
......
...@@ -141,7 +141,7 @@ GLuint ResourceManager::createRenderbuffer() ...@@ -141,7 +141,7 @@ GLuint ResourceManager::createRenderbuffer()
// Returns an unused sampler name // Returns an unused sampler name
GLuint ResourceManager::createSampler() GLuint ResourceManager::createSampler()
{ {
GLuint handle = mSamplerHandleAllocator.allocate(); GLuint handle = mSamplerNameSpace.allocate();
mSamplerMap[handle] = nullptr; mSamplerMap[handle] = nullptr;
...@@ -151,7 +151,7 @@ GLuint ResourceManager::createSampler() ...@@ -151,7 +151,7 @@ GLuint ResourceManager::createSampler()
// Returns the next unused fence name, and allocates the fence // Returns the next unused fence name, and allocates the fence
GLuint ResourceManager::createFenceSync(GLenum condition, GLbitfield flags) GLuint ResourceManager::createFenceSync(GLenum condition, GLbitfield flags)
{ {
GLuint handle = mFenceSyncHandleAllocator.allocate(); GLuint handle = mFenceSyncNameSpace.allocate();
FenceSync* fenceSync = new FenceSync(handle, condition, flags); FenceSync* fenceSync = new FenceSync(handle, condition, flags);
mFenceSyncMap[handle] = fenceSync; mFenceSyncMap[handle] = fenceSync;
...@@ -240,7 +240,7 @@ void ResourceManager::deleteSampler(GLuint sampler) ...@@ -240,7 +240,7 @@ void ResourceManager::deleteSampler(GLuint sampler)
if(samplerObject != mSamplerMap.end()) if(samplerObject != mSamplerMap.end())
{ {
mSamplerHandleAllocator.release(samplerObject->first); mSamplerNameSpace.release(samplerObject->first);
if(samplerObject->second) samplerObject->second->release(); if(samplerObject->second) samplerObject->second->release();
mSamplerMap.erase(samplerObject); mSamplerMap.erase(samplerObject);
} }
...@@ -252,7 +252,7 @@ void ResourceManager::deleteFenceSync(GLuint fenceSync) ...@@ -252,7 +252,7 @@ void ResourceManager::deleteFenceSync(GLuint fenceSync)
if(fenceObjectIt != mFenceSyncMap.end()) if(fenceObjectIt != mFenceSyncMap.end())
{ {
mFenceSyncHandleAllocator.release(fenceObjectIt->first); mFenceSyncNameSpace.release(fenceObjectIt->first);
if(fenceObjectIt->second) fenceObjectIt->second->release(); if(fenceObjectIt->second) fenceObjectIt->second->release();
mFenceSyncMap.erase(fenceObjectIt); mFenceSyncMap.erase(fenceObjectIt);
} }
...@@ -368,8 +368,10 @@ void ResourceManager::checkBufferAllocation(unsigned int buffer) ...@@ -368,8 +368,10 @@ void ResourceManager::checkBufferAllocation(unsigned int buffer)
if(buffer != 0 && !getBuffer(buffer)) if(buffer != 0 && !getBuffer(buffer))
{ {
Buffer *bufferObject = new Buffer(buffer); Buffer *bufferObject = new Buffer(buffer);
mBufferMap[buffer] = bufferObject;
bufferObject->addRef(); bufferObject->addRef();
mBufferNameSpace.insert(buffer);
mBufferMap[buffer] = bufferObject;
} }
} }
...@@ -405,8 +407,10 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type) ...@@ -405,8 +407,10 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type)
return; return;
} }
mTextureMap[texture] = textureObject;
textureObject->addRef(); textureObject->addRef();
mTextureNameSpace.insert(texture);
mTextureMap[texture] = textureObject;
} }
} }
...@@ -415,8 +419,10 @@ void ResourceManager::checkRenderbufferAllocation(GLuint handle) ...@@ -415,8 +419,10 @@ void ResourceManager::checkRenderbufferAllocation(GLuint handle)
if(handle != 0 && !getRenderbuffer(handle)) if(handle != 0 && !getRenderbuffer(handle))
{ {
Renderbuffer *renderbufferObject = new Renderbuffer(handle, new Colorbuffer(0, 0, GL_RGBA4_OES, 0)); Renderbuffer *renderbufferObject = new Renderbuffer(handle, new Colorbuffer(0, 0, GL_RGBA4_OES, 0));
mRenderbufferMap[handle] = renderbufferObject;
renderbufferObject->addRef(); renderbufferObject->addRef();
mRenderbufferNameSpace.insert(handle);
mRenderbufferMap[handle] = renderbufferObject;
} }
} }
...@@ -425,9 +431,10 @@ void ResourceManager::checkSamplerAllocation(GLuint sampler) ...@@ -425,9 +431,10 @@ void ResourceManager::checkSamplerAllocation(GLuint sampler)
if(sampler != 0 && !getSampler(sampler)) if(sampler != 0 && !getSampler(sampler))
{ {
Sampler *samplerObject = new Sampler(sampler); Sampler *samplerObject = new Sampler(sampler);
mSamplerMap[sampler] = samplerObject;
samplerObject->addRef(); samplerObject->addRef();
// Samplers cannot be created via Bind
mSamplerNameSpace.insert(sampler);
mSamplerMap[sampler] = samplerObject;
} }
} }
......
...@@ -109,11 +109,11 @@ class ResourceManager ...@@ -109,11 +109,11 @@ class ResourceManager
typedef std::map<GLint, Sampler*> SamplerMap; typedef std::map<GLint, Sampler*> SamplerMap;
SamplerMap mSamplerMap; SamplerMap mSamplerMap;
gl::NameSpace<Sampler> mSamplerHandleAllocator; gl::NameSpace<Sampler> mSamplerNameSpace;
typedef std::map<GLint, FenceSync*> FenceMap; typedef std::map<GLint, FenceSync*> FenceMap;
FenceMap mFenceSyncMap; FenceMap mFenceSyncMap;
gl::NameSpace<FenceSync> mFenceSyncHandleAllocator; gl::NameSpace<FenceSync> mFenceSyncNameSpace;
}; };
} }
......
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