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)
void Context::bindRenderbuffer(GLuint renderbuffer)
{
mResourceManager->checkRenderbufferAllocation(renderbuffer);
mState.renderbuffer.set(getRenderbuffer(renderbuffer));
}
......
......@@ -162,6 +162,12 @@ Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle)
}
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;
}
}
......@@ -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
void checkBufferAllocation(unsigned int buffer);
void checkTextureAllocation(GLuint texture, TextureType type);
void checkRenderbufferAllocation(GLuint renderbuffer);
private:
std::size_t mRefCount;
......
......@@ -467,6 +467,15 @@ void GL_APIENTRY glBindRenderbufferOES(GLenum target, GLuint renderbuffer)
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);
}
}
......
......@@ -973,8 +973,6 @@ void Context::bindDrawFramebuffer(GLuint framebuffer)
void Context::bindRenderbuffer(GLuint renderbuffer)
{
mResourceManager->checkRenderbufferAllocation(renderbuffer);
mState.renderbuffer.set(getRenderbuffer(renderbuffer));
}
......
......@@ -268,6 +268,12 @@ Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle)
}
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;
}
}
......@@ -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
void checkBufferAllocation(unsigned int buffer);
void checkTextureAllocation(GLuint texture, TextureType type);
void checkRenderbufferAllocation(GLuint renderbuffer);
private:
std::size_t mRefCount;
......
......@@ -347,6 +347,15 @@ void GL_APIENTRY glBindRenderbuffer(GLenum target, GLuint renderbuffer)
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);
}
}
......
......@@ -973,8 +973,6 @@ void Context::bindDrawFramebuffer(GLuint framebuffer)
void Context::bindRenderbuffer(GLuint renderbuffer)
{
mResourceManager->checkRenderbufferAllocation(renderbuffer);
mState.renderbuffer.set(getRenderbuffer(renderbuffer));
}
......
......@@ -268,6 +268,12 @@ Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle)
}
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;
}
}
......@@ -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
void checkBufferAllocation(unsigned int buffer);
void checkTextureAllocation(GLuint texture, TextureType type);
void checkRenderbufferAllocation(GLuint renderbuffer);
private:
std::size_t mRefCount;
......
......@@ -348,6 +348,15 @@ void GL_APIENTRY glBindRenderbuffer(GLenum target, GLuint renderbuffer)
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);
}
}
......
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