Commit 42a584d5 by Alexis Hetu Committed by Alexis Hétu

Sending proper GL error on invalid Renderbuffer.

Instead of creating a new Renderbuffer in case of an invalid Renderbuffer, it will now instead send a GL_INVALID_OPERATION error. BUG=14598385 Change-Id: I0425061fcc26e86348ef881f18c68acaa142e9c9 Reviewed-on: https://swiftshader-review.googlesource.com/1340Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com> Tested-by: 's avatarAlexis Hétu <sugoi@google.com>
parent a86d5e11
...@@ -827,8 +827,6 @@ void Context::bindFramebuffer(GLuint framebuffer) ...@@ -827,8 +827,6 @@ void Context::bindFramebuffer(GLuint framebuffer)
void Context::bindRenderbuffer(GLuint renderbuffer) void Context::bindRenderbuffer(GLuint renderbuffer)
{ {
mResourceManager->checkRenderbufferAllocation(renderbuffer);
mState.renderbuffer.set(getRenderbuffer(renderbuffer)); mState.renderbuffer.set(getRenderbuffer(renderbuffer));
} }
......
...@@ -162,6 +162,12 @@ Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle) ...@@ -162,6 +162,12 @@ Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle)
} }
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;
} }
} }
...@@ -206,14 +212,4 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type) ...@@ -206,14 +212,4 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type)
} }
} }
void ResourceManager::checkRenderbufferAllocation(GLuint renderbuffer)
{
if(renderbuffer != 0 && !getRenderbuffer(renderbuffer))
{
Renderbuffer *renderbufferObject = new Renderbuffer(renderbuffer, new Colorbuffer(0, 0, GL_RGBA4_OES, 0));
mRenderbufferMap[renderbuffer] = renderbufferObject;
renderbufferObject->addRef();
}
}
} }
...@@ -63,7 +63,6 @@ class ResourceManager ...@@ -63,7 +63,6 @@ class ResourceManager
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 renderbuffer);
private: private:
std::size_t mRefCount; std::size_t mRefCount;
......
...@@ -467,6 +467,15 @@ void GL_APIENTRY glBindRenderbufferOES(GLenum target, GLuint renderbuffer) ...@@ -467,6 +467,15 @@ void GL_APIENTRY glBindRenderbufferOES(GLenum target, GLuint renderbuffer)
if(context) if(context)
{ {
if (renderbuffer != 0 && !context->getRenderbuffer(renderbuffer))
{
// [OpenGL ES 2.0.25] Section 4.4.3 page 112
// [OpenGL ES 3.0.2] Section 4.4.2 page 201
// 'renderbuffer' must be either zero or the name of an existing renderbuffer object of
// type 'renderbuffertarget', otherwise an INVALID_OPERATION error is generated.
return error(GL_INVALID_OPERATION);
}
context->bindRenderbuffer(renderbuffer); context->bindRenderbuffer(renderbuffer);
} }
} }
......
...@@ -973,8 +973,6 @@ void Context::bindDrawFramebuffer(GLuint framebuffer) ...@@ -973,8 +973,6 @@ void Context::bindDrawFramebuffer(GLuint framebuffer)
void Context::bindRenderbuffer(GLuint renderbuffer) void Context::bindRenderbuffer(GLuint renderbuffer)
{ {
mResourceManager->checkRenderbufferAllocation(renderbuffer);
mState.renderbuffer.set(getRenderbuffer(renderbuffer)); mState.renderbuffer.set(getRenderbuffer(renderbuffer));
} }
......
...@@ -268,6 +268,12 @@ Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle) ...@@ -268,6 +268,12 @@ Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle)
} }
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;
} }
} }
...@@ -316,14 +322,4 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type) ...@@ -316,14 +322,4 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type)
} }
} }
void ResourceManager::checkRenderbufferAllocation(GLuint renderbuffer)
{
if(renderbuffer != 0 && !getRenderbuffer(renderbuffer))
{
Renderbuffer *renderbufferObject = new Renderbuffer(renderbuffer, new Colorbuffer(0, 0, GL_RGBA4, 0));
mRenderbufferMap[renderbuffer] = renderbufferObject;
renderbufferObject->addRef();
}
}
} }
...@@ -71,7 +71,6 @@ class ResourceManager ...@@ -71,7 +71,6 @@ class ResourceManager
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 renderbuffer);
private: private:
std::size_t mRefCount; std::size_t mRefCount;
......
...@@ -347,6 +347,15 @@ void GL_APIENTRY glBindRenderbuffer(GLenum target, GLuint renderbuffer) ...@@ -347,6 +347,15 @@ void GL_APIENTRY glBindRenderbuffer(GLenum target, GLuint renderbuffer)
if(context) if(context)
{ {
if (renderbuffer != 0 && !context->getRenderbuffer(renderbuffer))
{
// [OpenGL ES 2.0.25] Section 4.4.3 page 112
// [OpenGL ES 3.0.2] Section 4.4.2 page 201
// 'renderbuffer' must be either zero or the name of an existing renderbuffer object of
// type 'renderbuffertarget', otherwise an INVALID_OPERATION error is generated.
return error(GL_INVALID_OPERATION);
}
context->bindRenderbuffer(renderbuffer); context->bindRenderbuffer(renderbuffer);
} }
} }
......
...@@ -973,8 +973,6 @@ void Context::bindDrawFramebuffer(GLuint framebuffer) ...@@ -973,8 +973,6 @@ void Context::bindDrawFramebuffer(GLuint framebuffer)
void Context::bindRenderbuffer(GLuint renderbuffer) void Context::bindRenderbuffer(GLuint renderbuffer)
{ {
mResourceManager->checkRenderbufferAllocation(renderbuffer);
mState.renderbuffer.set(getRenderbuffer(renderbuffer)); mState.renderbuffer.set(getRenderbuffer(renderbuffer));
} }
......
...@@ -268,6 +268,12 @@ Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle) ...@@ -268,6 +268,12 @@ Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle)
} }
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;
} }
} }
...@@ -316,14 +322,4 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type) ...@@ -316,14 +322,4 @@ void ResourceManager::checkTextureAllocation(GLuint texture, TextureType type)
} }
} }
void ResourceManager::checkRenderbufferAllocation(GLuint renderbuffer)
{
if(renderbuffer != 0 && !getRenderbuffer(renderbuffer))
{
Renderbuffer *renderbufferObject = new Renderbuffer(renderbuffer, new Colorbuffer(0, 0, GL_RGBA4, 0));
mRenderbufferMap[renderbuffer] = renderbufferObject;
renderbufferObject->addRef();
}
}
} }
...@@ -71,7 +71,6 @@ class ResourceManager ...@@ -71,7 +71,6 @@ class ResourceManager
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 renderbuffer);
private: private:
std::size_t mRefCount; std::size_t mRefCount;
......
...@@ -348,6 +348,15 @@ void GL_APIENTRY glBindRenderbuffer(GLenum target, GLuint renderbuffer) ...@@ -348,6 +348,15 @@ void GL_APIENTRY glBindRenderbuffer(GLenum target, GLuint renderbuffer)
if(context) if(context)
{ {
if (renderbuffer != 0 && !context->getRenderbuffer(renderbuffer))
{
// [OpenGL ES 2.0.25] Section 4.4.3 page 112
// [OpenGL ES 3.0.2] Section 4.4.2 page 201
// 'renderbuffer' must be either zero or the name of an existing renderbuffer object of
// type 'renderbuffertarget', otherwise an INVALID_OPERATION error is generated.
return error(GL_INVALID_OPERATION);
}
context->bindRenderbuffer(renderbuffer); context->bindRenderbuffer(renderbuffer);
} }
} }
......
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