Commit 8c96d58a by Jamie Madill

Add helper methods for buffer enum tagets.

A query helper method in Context and a validation helper method reduce code redundancy quite a bit. BUG=angle:565 Change-Id: I96b9ecc4614e7e31240e31594223e8b9636d22c2 Reviewed-on: https://chromium-review.googlesource.com/188201Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org> Tested-by: 's avatarJamie Madill <jmadill@chromium.org>
parent eeba6e1e
......@@ -1504,6 +1504,22 @@ Query *Context::getQuery(unsigned int handle, bool create, GLenum type)
}
}
Buffer *Context::getTargetBuffer(GLenum target) const
{
switch (target)
{
case GL_ARRAY_BUFFER: return mState.arrayBuffer.get();
case GL_COPY_READ_BUFFER: return mState.copyReadBuffer.get();
case GL_COPY_WRITE_BUFFER: return mState.copyWriteBuffer.get();
case GL_ELEMENT_ARRAY_BUFFER: return getCurrentVertexArray()->getElementArrayBuffer();
case GL_PIXEL_PACK_BUFFER: return mState.pack.pixelBuffer.get();
case GL_PIXEL_UNPACK_BUFFER: return mState.unpack.pixelBuffer.get();
case GL_TRANSFORM_FEEDBACK_BUFFER: return mState.genericTransformFeedbackBuffer.get();
case GL_UNIFORM_BUFFER: return mState.genericUniformBuffer.get();
default: UNREACHABLE(); return NULL;
}
}
Buffer *Context::getArrayBuffer()
{
return mState.arrayBuffer.get();
......
......@@ -337,6 +337,7 @@ class Context
Query *getQuery(GLuint handle, bool create, GLenum type);
TransformFeedback *getTransformFeedback(GLuint handle) const;
Buffer *getTargetBuffer(GLenum target) const;
Buffer *getArrayBuffer();
Buffer *getElementArrayBuffer();
ProgramBinary *getCurrentProgramBinary();
......
......@@ -189,19 +189,9 @@ void __stdcall glBindBuffer(GLenum target, GLuint buffer)
if (context)
{
// Check ES3 specific targets
switch (target)
if (!gl::ValidBufferTarget(context, target))
{
case GL_COPY_READ_BUFFER:
case GL_COPY_WRITE_BUFFER:
case GL_PIXEL_PACK_BUFFER:
case GL_PIXEL_UNPACK_BUFFER:
case GL_UNIFORM_BUFFER:
case GL_TRANSFORM_FEEDBACK_BUFFER:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
return gl::error(GL_INVALID_ENUM);
}
switch (target)
......@@ -595,53 +585,13 @@ void __stdcall glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data,
if (context)
{
// Check ES3 specific targets
switch (target)
{
case GL_COPY_READ_BUFFER:
case GL_COPY_WRITE_BUFFER:
case GL_PIXEL_PACK_BUFFER:
case GL_PIXEL_UNPACK_BUFFER:
case GL_UNIFORM_BUFFER:
case GL_TRANSFORM_FEEDBACK_BUFFER:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
}
gl::Buffer *buffer;
switch (target)
if (!gl::ValidBufferTarget(context, target))
{
case GL_ARRAY_BUFFER:
buffer = context->getArrayBuffer();
break;
case GL_ELEMENT_ARRAY_BUFFER:
buffer = context->getElementArrayBuffer();
break;
case GL_COPY_READ_BUFFER:
buffer = context->getCopyReadBuffer();
break;
case GL_COPY_WRITE_BUFFER:
buffer = context->getCopyWriteBuffer();
break;
case GL_PIXEL_PACK_BUFFER:
buffer = context->getPixelPackBuffer();
break;
case GL_PIXEL_UNPACK_BUFFER:
buffer = context->getPixelUnpackBuffer();
break;
case GL_TRANSFORM_FEEDBACK_BUFFER:
buffer = context->getGenericTransformFeedbackBuffer();
break;
case GL_UNIFORM_BUFFER:
buffer = context->getGenericUniformBuffer();
break;
default:
return gl::error(GL_INVALID_ENUM);
}
gl::Buffer *buffer = context->getTargetBuffer(target);
if (!buffer)
{
return gl::error(GL_INVALID_OPERATION);
......@@ -677,53 +627,13 @@ void __stdcall glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size,
if (context)
{
// Check ES3 specific targets
switch (target)
if (!gl::ValidBufferTarget(context, target))
{
case GL_COPY_READ_BUFFER:
case GL_COPY_WRITE_BUFFER:
case GL_PIXEL_PACK_BUFFER:
case GL_PIXEL_UNPACK_BUFFER:
case GL_UNIFORM_BUFFER:
case GL_TRANSFORM_FEEDBACK_BUFFER:
if (context->getClientVersion() < 3)
{
return gl::error(GL_INVALID_ENUM);
}
}
gl::Buffer *buffer;
switch (target)
{
case GL_ARRAY_BUFFER:
buffer = context->getArrayBuffer();
break;
case GL_ELEMENT_ARRAY_BUFFER:
buffer = context->getElementArrayBuffer();
break;
case GL_COPY_READ_BUFFER:
buffer = context->getCopyReadBuffer();
break;
case GL_COPY_WRITE_BUFFER:
buffer = context->getCopyWriteBuffer();
break;
case GL_PIXEL_PACK_BUFFER:
buffer = context->getPixelPackBuffer();
break;
case GL_PIXEL_UNPACK_BUFFER:
buffer = context->getPixelUnpackBuffer();
break;
case GL_TRANSFORM_FEEDBACK_BUFFER:
buffer = context->getGenericTransformFeedbackBuffer();
break;
case GL_UNIFORM_BUFFER:
buffer = context->getGenericUniformBuffer();
break;
default:
return gl::error(GL_INVALID_ENUM);
}
gl::Buffer *buffer = context->getTargetBuffer(target);
if (!buffer)
{
return gl::error(GL_INVALID_OPERATION);
......@@ -2543,19 +2453,13 @@ void __stdcall glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params
if (context)
{
gl::Buffer *buffer;
switch (target)
if (!gl::ValidBufferTarget(context, target))
{
case GL_ARRAY_BUFFER:
buffer = context->getArrayBuffer();
break;
case GL_ELEMENT_ARRAY_BUFFER:
buffer = context->getElementArrayBuffer();
break;
default: return gl::error(GL_INVALID_ENUM);
return gl::error(GL_INVALID_ENUM);
}
gl::Buffer *buffer = context->getTargetBuffer(target);
if (!buffer)
{
// A null buffer means that "0" is bound to the requested buffer target
......@@ -8399,67 +8303,13 @@ void __stdcall glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintp
return gl::error(GL_INVALID_OPERATION);
}
gl::Buffer *readBuffer = NULL;
switch (readTarget)
if (!gl::ValidBufferTarget(context, readTarget) || !gl::ValidBufferTarget(context, readTarget))
{
case GL_ARRAY_BUFFER:
readBuffer = context->getArrayBuffer();
break;
case GL_COPY_READ_BUFFER:
readBuffer = context->getCopyReadBuffer();
break;
case GL_COPY_WRITE_BUFFER:
readBuffer = context->getCopyWriteBuffer();
break;
case GL_ELEMENT_ARRAY_BUFFER:
readBuffer = context->getElementArrayBuffer();
break;
case GL_PIXEL_PACK_BUFFER:
readBuffer = context->getPixelPackBuffer();
break;
case GL_PIXEL_UNPACK_BUFFER:
readBuffer = context->getPixelUnpackBuffer();
break;
case GL_TRANSFORM_FEEDBACK_BUFFER:
readBuffer = context->getGenericTransformFeedbackBuffer();
break;
case GL_UNIFORM_BUFFER:
readBuffer = context->getGenericUniformBuffer();
break;
default:
return gl::error(GL_INVALID_ENUM);
}
gl::Buffer *writeBuffer = NULL;
switch (writeTarget)
{
case GL_ARRAY_BUFFER:
writeBuffer = context->getArrayBuffer();
break;
case GL_COPY_READ_BUFFER:
writeBuffer = context->getCopyReadBuffer();
break;
case GL_COPY_WRITE_BUFFER:
writeBuffer = context->getCopyWriteBuffer();
break;
case GL_ELEMENT_ARRAY_BUFFER:
writeBuffer = context->getElementArrayBuffer();
break;
case GL_PIXEL_PACK_BUFFER:
writeBuffer = context->getPixelPackBuffer();
break;
case GL_PIXEL_UNPACK_BUFFER:
writeBuffer = context->getPixelUnpackBuffer();
break;
case GL_TRANSFORM_FEEDBACK_BUFFER:
writeBuffer = context->getGenericTransformFeedbackBuffer();
break;
case GL_UNIFORM_BUFFER:
writeBuffer = context->getGenericUniformBuffer();
break;
default:
return gl::error(GL_INVALID_ENUM);
}
gl::Buffer *readBuffer = context->getTargetBuffer(readTarget);
gl::Buffer *writeBuffer = context->getTargetBuffer(writeTarget);
if (!readBuffer || !writeBuffer)
{
......
......@@ -73,7 +73,28 @@ bool ValidFramebufferTarget(GLenum target)
}
}
bool ValidMipLevel(const gl::Context *context, GLenum target, GLint level)
bool ValidBufferTarget(const Context *context, GLenum target)
{
switch (target)
{
case GL_ARRAY_BUFFER:
case GL_ELEMENT_ARRAY_BUFFER:
return true;
case GL_COPY_READ_BUFFER:
case GL_COPY_WRITE_BUFFER:
case GL_PIXEL_PACK_BUFFER:
case GL_PIXEL_UNPACK_BUFFER:
case GL_TRANSFORM_FEEDBACK_BUFFER:
case GL_UNIFORM_BUFFER:
return (context->getClientVersion() >= 3);
default:
return false;
}
}
bool ValidMipLevel(const Context *context, GLenum target, GLint level)
{
int maxLevel = 0;
switch (target)
......
......@@ -17,6 +17,7 @@ class Context;
bool ValidCap(const Context *context, GLenum cap);
bool ValidTextureTarget(const Context *context, GLenum target);
bool ValidFramebufferTarget(GLenum target);
bool ValidBufferTarget(const Context *context, GLenum target);
bool ValidMipLevel(const Context *context, GLenum target, GLint level);
bool ValidImageSize(const gl::Context *context, GLenum target, GLint level, GLsizei width, GLsizei height, GLsizei depth);
bool ValidCompressedImageSize(const gl::Context *context, GLenum internalFormat, GLsizei width, GLsizei height);
......
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