Commit 570f7c84 by Jamie Madill

Add helper methods for FBO attachment validation.

Subsequent refactoring will eliminate duplicate code. BUG=angle:571 Change-Id: I086320beb5c432c326d29d047931575e6f2a1d64 Reviewed-on: https://chromium-review.googlesource.com/205603Tested-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org>
parent a328d569
......@@ -1077,7 +1077,7 @@ Program *Context::getProgram(GLuint handle) const
return mResourceManager->getProgram(handle);
}
Texture *Context::getTexture(GLuint handle)
Texture *Context::getTexture(GLuint handle) const
{
return mResourceManager->getTexture(handle);
}
......@@ -1124,7 +1124,7 @@ TransformFeedback *Context::getTransformFeedback(GLuint handle) const
}
}
Framebuffer *Context::getReadFramebuffer()
Framebuffer *Context::getReadFramebuffer() const
{
return getFramebuffer(mState.readFramebuffer);
}
......
......@@ -330,7 +330,7 @@ class Context
FenceSync *getFenceSync(GLsync handle) const;
Shader *getShader(GLuint handle) const;
Program *getProgram(GLuint handle) const;
Texture *getTexture(GLuint handle);
Texture *getTexture(GLuint handle) const;
Framebuffer *getFramebuffer(GLuint handle) const;
Renderbuffer *getRenderbuffer(GLuint handle);
VertexArray *getVertexArray(GLuint handle) const;
......@@ -359,7 +359,7 @@ class Context
Framebuffer *getTargetFramebuffer(GLenum target) const;
GLuint getTargetFramebufferHandle(GLenum target) const;
Framebuffer *getReadFramebuffer();
Framebuffer *getReadFramebuffer() const;
Framebuffer *getDrawFramebuffer();
const Framebuffer *getDrawFramebuffer() const;
VertexArray *getCurrentVertexArray() const;
......
......@@ -1877,14 +1877,7 @@ void __stdcall glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum t
gl::Context *context = gl::getNonLostContext();
if (context)
{
if (context->getClientVersion() < 3 &&
!ValidateES2FramebufferTextureParameters(context, target, attachment, textarget, texture, level))
{
return;
}
if (context->getClientVersion() >= 3 &&
!ValidateES3FramebufferTextureParameters(context, target, attachment, textarget, texture, level, 0, false))
if (!ValidateFramebufferTexture2D(context, target, attachment, textarget, texture, level))
{
return;
}
......@@ -6736,12 +6729,8 @@ void __stdcall glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuin
if (context)
{
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_OPERATION);
}
if (!ValidateES3FramebufferTextureParameters(context, target, attachment, GL_NONE, texture, level, layer, true))
if (!ValidateFramebufferTextureLayer(context, target, attachment, texture,
level, layer))
{
return;
}
......@@ -6761,9 +6750,9 @@ void __stdcall glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuin
{
switch (attachment)
{
case GL_DEPTH_ATTACHMENT: framebuffer->setDepthbuffer(textarget, texture, level, layer); break;
case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture, level, layer); break;
case GL_DEPTH_STENCIL_ATTACHMENT: framebuffer->setDepthStencilBuffer(textarget, texture, level, layer); break;
case GL_DEPTH_ATTACHMENT: framebuffer->setDepthbuffer(textarget, texture, level, layer); break;
case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture, level, layer); break;
case GL_DEPTH_STENCIL_ATTACHMENT: framebuffer->setDepthStencilBuffer(textarget, texture, level, layer); break;
}
}
}
......
......@@ -1433,4 +1433,22 @@ bool ValidateDrawElementsInstanced(const gl::Context *context, GLenum mode, GLsi
return (primcount > 0);
}
bool ValidateFramebufferTexture2D(const gl::Context *context, GLenum target, GLenum attachment,
GLenum textarget, GLuint texture, GLint level)
{
if (context->getClientVersion() < 3 &&
!ValidateES2FramebufferTextureParameters(context, target, attachment, textarget, texture, level))
{
return false;
}
if (context->getClientVersion() >= 3 &&
!ValidateES3FramebufferTextureParameters(context, target, attachment, textarget, texture, level, 0, false))
{
return false;
}
return true;
}
}
......@@ -63,6 +63,8 @@ bool ValidateDrawArraysInstanced(const gl::Context *context, GLenum mode, GLint
bool ValidateDrawElements(const gl::Context *context, GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
bool ValidateDrawElementsInstanced(const gl::Context *context, GLenum mode, GLsizei count, GLenum type,
const GLvoid *indices, GLsizei primcount);
bool ValidateFramebufferTexture2D(const gl::Context *context, GLenum target, GLenum attachment,
GLenum textarget, GLuint texture, GLint level);
}
......
......@@ -839,7 +839,7 @@ bool ValidateES2TexStorageParameters(gl::Context *context, GLenum target, GLsize
return true;
}
bool ValidateES2FramebufferTextureParameters(gl::Context *context, GLenum target, GLenum attachment,
bool ValidateES2FramebufferTextureParameters(const gl::Context *context, GLenum target, GLenum attachment,
GLenum textarget, GLuint texture, GLint level)
{
META_ASSERT(GL_DRAW_FRAMEBUFFER == GL_DRAW_FRAMEBUFFER_ANGLE && GL_READ_FRAMEBUFFER == GL_READ_FRAMEBUFFER_ANGLE);
......@@ -923,7 +923,7 @@ bool ValidateES2FramebufferTextureParameters(gl::Context *context, GLenum target
}
}
gl::Framebuffer *framebuffer = NULL;
const gl::Framebuffer *framebuffer = NULL;
GLuint framebufferHandle = 0;
if (target == GL_READ_FRAMEBUFFER)
{
......
......@@ -25,7 +25,7 @@ bool ValidateES2CopyTexImageParameters(gl::Context* context, GLenum target, GLin
bool ValidateES2TexStorageParameters(gl::Context *context, GLenum target, GLsizei levels, GLenum internalformat,
GLsizei width, GLsizei height);
bool ValidateES2FramebufferTextureParameters(gl::Context *context, GLenum target, GLenum attachment,
bool ValidateES2FramebufferTextureParameters(const gl::Context *context, GLenum target, GLenum attachment,
GLenum textarget, GLuint texture, GLint level);
bool ValidES2ReadFormatType(gl::Context *context, GLenum format, GLenum type);
......
......@@ -449,7 +449,7 @@ bool ValidateES3TexStorageParameters(gl::Context *context, GLenum target, GLsize
return true;
}
bool ValidateES3FramebufferTextureParameters(gl::Context *context, GLenum target, GLenum attachment,
bool ValidateES3FramebufferTextureParameters(const gl::Context *context, GLenum target, GLenum attachment,
GLenum textarget, GLuint texture, GLint level, GLint layer,
bool layerCall)
{
......@@ -599,7 +599,7 @@ bool ValidateES3FramebufferTextureParameters(gl::Context *context, GLenum target
}
}
gl::Framebuffer *framebuffer = NULL;
const gl::Framebuffer *framebuffer = NULL;
GLuint framebufferHandle = 0;
if (target == GL_READ_FRAMEBUFFER)
{
......@@ -620,6 +620,17 @@ bool ValidateES3FramebufferTextureParameters(gl::Context *context, GLenum target
return true;
}
bool ValidateFramebufferTextureLayer(const gl::Context *context, GLenum target, GLenum attachment,
GLuint texture, GLint level, GLint layer)
{
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_OPERATION, false);
}
return ValidateES3FramebufferTextureParameters(context, target, attachment, GL_NONE, texture, level, layer, true);
}
bool ValidES3ReadFormatType(gl::Context *context, GLenum internalFormat, GLenum format, GLenum type)
{
switch (format)
......
......@@ -25,9 +25,11 @@ bool ValidateES3CopyTexImageParameters(gl::Context *context, GLenum target, GLin
bool ValidateES3TexStorageParameters(gl::Context *context, GLenum target, GLsizei levels, GLenum internalformat,
GLsizei width, GLsizei height, GLsizei depth);
bool ValidateES3FramebufferTextureParameters(gl::Context *context, GLenum target, GLenum attachment,
bool ValidateES3FramebufferTextureParameters(const gl::Context *context, GLenum target, GLenum attachment,
GLenum textarget, GLuint texture, GLint level, GLint layer,
bool layerCall);
bool ValidateFramebufferTextureLayer(const gl::Context *context, GLenum target, GLenum attachment,
GLuint texture, GLint level, GLint layer);
bool ValidES3ReadFormatType(gl::Context *context, GLenum internalFormat, GLenum format, GLenum type);
......
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