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;