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) ...@@ -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() Buffer *Context::getArrayBuffer()
{ {
return mState.arrayBuffer.get(); return mState.arrayBuffer.get();
......
...@@ -337,6 +337,7 @@ class Context ...@@ -337,6 +337,7 @@ class Context
Query *getQuery(GLuint handle, bool create, GLenum type); Query *getQuery(GLuint handle, bool create, GLenum type);
TransformFeedback *getTransformFeedback(GLuint handle) const; TransformFeedback *getTransformFeedback(GLuint handle) const;
Buffer *getTargetBuffer(GLenum target) const;
Buffer *getArrayBuffer(); Buffer *getArrayBuffer();
Buffer *getElementArrayBuffer(); Buffer *getElementArrayBuffer();
ProgramBinary *getCurrentProgramBinary(); ProgramBinary *getCurrentProgramBinary();
......
...@@ -189,19 +189,9 @@ void __stdcall glBindBuffer(GLenum target, GLuint buffer) ...@@ -189,19 +189,9 @@ void __stdcall glBindBuffer(GLenum target, GLuint buffer)
if (context) if (context)
{ {
// Check ES3 specific targets if (!gl::ValidBufferTarget(context, target))
switch (target)
{ {
case GL_COPY_READ_BUFFER: return gl::error(GL_INVALID_ENUM);
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);
}
} }
switch (target) switch (target)
...@@ -595,53 +585,13 @@ void __stdcall glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, ...@@ -595,53 +585,13 @@ void __stdcall glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data,
if (context) if (context)
{ {
// Check ES3 specific targets if (!gl::ValidBufferTarget(context, target))
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)
{ {
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); return gl::error(GL_INVALID_ENUM);
} }
gl::Buffer *buffer = context->getTargetBuffer(target);
if (!buffer) if (!buffer)
{ {
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
...@@ -677,53 +627,13 @@ void __stdcall glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, ...@@ -677,53 +627,13 @@ void __stdcall glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size,
if (context) if (context)
{ {
// Check ES3 specific targets if (!gl::ValidBufferTarget(context, target))
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)
{
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); return gl::error(GL_INVALID_ENUM);
} }
gl::Buffer *buffer = context->getTargetBuffer(target);
if (!buffer) if (!buffer)
{ {
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
...@@ -2543,19 +2453,13 @@ void __stdcall glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params ...@@ -2543,19 +2453,13 @@ void __stdcall glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params
if (context) if (context)
{ {
gl::Buffer *buffer; if (!gl::ValidBufferTarget(context, target))
switch (target)
{ {
case GL_ARRAY_BUFFER: return gl::error(GL_INVALID_ENUM);
buffer = context->getArrayBuffer();
break;
case GL_ELEMENT_ARRAY_BUFFER:
buffer = context->getElementArrayBuffer();
break;
default: return gl::error(GL_INVALID_ENUM);
} }
gl::Buffer *buffer = context->getTargetBuffer(target);
if (!buffer) if (!buffer)
{ {
// A null buffer means that "0" is bound to the requested buffer target // 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 ...@@ -8399,67 +8303,13 @@ void __stdcall glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintp
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
gl::Buffer *readBuffer = NULL; if (!gl::ValidBufferTarget(context, readTarget) || !gl::ValidBufferTarget(context, readTarget))
switch (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); return gl::error(GL_INVALID_ENUM);
} }
gl::Buffer *writeBuffer = NULL; gl::Buffer *readBuffer = context->getTargetBuffer(readTarget);
switch (writeTarget) gl::Buffer *writeBuffer = context->getTargetBuffer(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);
}
if (!readBuffer || !writeBuffer) if (!readBuffer || !writeBuffer)
{ {
......
...@@ -73,7 +73,28 @@ bool ValidFramebufferTarget(GLenum target) ...@@ -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; int maxLevel = 0;
switch (target) switch (target)
......
...@@ -17,6 +17,7 @@ class Context; ...@@ -17,6 +17,7 @@ class Context;
bool ValidCap(const Context *context, GLenum cap); bool ValidCap(const Context *context, GLenum cap);
bool ValidTextureTarget(const Context *context, GLenum target); bool ValidTextureTarget(const Context *context, GLenum target);
bool ValidFramebufferTarget(GLenum target); bool ValidFramebufferTarget(GLenum target);
bool ValidBufferTarget(const Context *context, GLenum target);
bool ValidMipLevel(const Context *context, GLenum target, GLint level); 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 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); 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