Use a shared namespace for shader and program objects. Bug 19219444 Change-Id: I5eb797eed31ab233866e5c23d83298d3c57091a9 Reviewed-on: https://swiftshader-review.googlesource.com/4989 Reviewed-by: Alexis Hétu <sugoi@google.com> Tested-by: Nicolas Capens <capn@google.com> Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libGLESv2/ResourceManager.cpp b/src/OpenGL/libGLESv2/ResourceManager.cpp index 85f0df3..4036954 100644 --- a/src/OpenGL/libGLESv2/ResourceManager.cpp +++ b/src/OpenGL/libGLESv2/ResourceManager.cpp
@@ -36,14 +36,14 @@ deleteBuffer(mBufferNameSpace.firstName()); } - while(!mProgramMap.empty()) + while(!mProgramNameSpace.empty()) { - deleteProgram(mProgramMap.begin()->first); + deleteProgram(mProgramNameSpace.firstName()); } - while(!mShaderMap.empty()) + while(!mShaderNameSpace.empty()) { - deleteShader(mShaderMap.begin()->first); + deleteShader(mShaderNameSpace.firstName()); } while(!mRenderbufferNameSpace.empty()) @@ -86,32 +86,32 @@ return mBufferNameSpace.allocate(); } -// Returns an unused shader/program name +// Returns an unused shader name GLuint ResourceManager::createShader(GLenum type) { - GLuint handle = mProgramShaderNameSpace.allocate(); + GLuint name = mProgramShaderNameSpace.allocate(); if(type == GL_VERTEX_SHADER) { - mShaderMap[handle] = new VertexShader(this, handle); + mShaderNameSpace.insert(name, new VertexShader(this, name)); } else if(type == GL_FRAGMENT_SHADER) { - mShaderMap[handle] = new FragmentShader(this, handle); + mShaderNameSpace.insert(name, new FragmentShader(this, name)); } else UNREACHABLE(type); - return handle; + return name; } -// Returns an unused program/shader name +// Returns an unused program name GLuint ResourceManager::createProgram() { - GLuint handle = mProgramShaderNameSpace.allocate(); + GLuint name = mProgramShaderNameSpace.allocate(); - mProgramMap[handle] = new Program(this, handle); + mProgramNameSpace.insert(name, new Program(this, name)); - return handle; + return name; } // Returns an unused texture name @@ -157,38 +157,38 @@ void ResourceManager::deleteShader(GLuint shader) { - ShaderMap::iterator shaderObject = mShaderMap.find(shader); + Shader *shaderObject = mShaderNameSpace.find(shader); - if(shaderObject != mShaderMap.end()) + if(shaderObject) { - if(shaderObject->second->getRefCount() == 0) + if(shaderObject->getRefCount() == 0) { - delete shaderObject->second; - mProgramShaderNameSpace.remove(shaderObject->first); - mShaderMap.erase(shaderObject); + delete shaderObject; + mShaderNameSpace.remove(shader); + mProgramShaderNameSpace.remove(shader); } else { - shaderObject->second->flagForDeletion(); + shaderObject->flagForDeletion(); } } } void ResourceManager::deleteProgram(GLuint program) { - ProgramMap::iterator programObject = mProgramMap.find(program); + Program *programObject = mProgramNameSpace.find(program); - if(programObject != mProgramMap.end()) + if(programObject) { - if(programObject->second->getRefCount() == 0) + if(programObject->getRefCount() == 0) { - delete programObject->second; - mProgramShaderNameSpace.remove(programObject->first); - mProgramMap.erase(programObject); + delete programObject; + mProgramNameSpace.remove(program); + mProgramShaderNameSpace.remove(program); } else { - programObject->second->flagForDeletion(); + programObject->flagForDeletion(); } } } @@ -240,16 +240,7 @@ Shader *ResourceManager::getShader(unsigned int handle) { - ShaderMap::iterator shader = mShaderMap.find(handle); - - if(shader == mShaderMap.end()) - { - return nullptr; - } - else - { - return shader->second; - } + return mShaderNameSpace.find(handle); } Texture *ResourceManager::getTexture(unsigned int handle) @@ -259,16 +250,7 @@ Program *ResourceManager::getProgram(unsigned int handle) { - ProgramMap::iterator program = mProgramMap.find(handle); - - if(program == mProgramMap.end()) - { - return nullptr; - } - else - { - return program->second; - } + return mProgramNameSpace.find(handle); } Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle)
diff --git a/src/OpenGL/libGLESv2/ResourceManager.h b/src/OpenGL/libGLESv2/ResourceManager.h index 8e282e7..b12e4ea 100644 --- a/src/OpenGL/libGLESv2/ResourceManager.h +++ b/src/OpenGL/libGLESv2/ResourceManager.h
@@ -87,14 +87,9 @@ std::size_t mRefCount; gl::NameSpace<Buffer> mBufferNameSpace; - - typedef std::map<GLint, Shader*> ShaderMap; - ShaderMap mShaderMap; - - typedef std::map<GLint, Program*> ProgramMap; - ProgramMap mProgramMap; - gl::NameSpace<Program> mProgramShaderNameSpace; - + gl::NameSpace<Program> mProgramNameSpace; + gl::NameSpace<Shader> mShaderNameSpace; + gl::NameSpace<void> mProgramShaderNameSpace; // Shaders and programs share a namespace gl::NameSpace<Texture> mTextureNameSpace; gl::NameSpace<Renderbuffer> mRenderbufferNameSpace; gl::NameSpace<Sampler> mSamplerNameSpace;