mesa: add clear_bufferuiv() helper

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
Samuel Pitoiset
2017-07-21 14:23:35 +02:00
parent 73c5e750d7
commit b18b1fa6bc
+22 -13
View File
@@ -435,11 +435,10 @@ _mesa_ClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer,
* New in GL 3.0
* Clear unsigned integer color buffer (not depth, not stencil).
*/
void GLAPIENTRY
_mesa_ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
static ALWAYS_INLINE void
clear_bufferuiv(struct gl_context *ctx, GLenum buffer, GLint drawbuffer,
const GLuint *value, bool no_error)
{
GET_CURRENT_CONTEXT(ctx);
FLUSH_VERTICES(ctx, 0);
FLUSH_CURRENT(ctx, 0);
@@ -451,7 +450,7 @@ _mesa_ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
case GL_COLOR:
{
const GLbitfield mask = make_color_buffer_mask(ctx, drawbuffer);
if (mask == INVALID_MASK) {
if (!no_error && mask == INVALID_MASK) {
_mesa_error(ctx, GL_INVALID_VALUE, "glClearBufferuiv(drawbuffer=%d)",
drawbuffer);
return;
@@ -471,19 +470,29 @@ _mesa_ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
}
break;
default:
/* Page 498 of the PDF, section '17.4.3.1 Clearing Individual Buffers'
* of the OpenGL 4.5 spec states:
*
* "An INVALID_ENUM error is generated by ClearBufferuiv and
* ClearNamedFramebufferuiv if buffer is not COLOR."
*/
_mesa_error(ctx, GL_INVALID_ENUM, "glClearBufferuiv(buffer=%s)",
_mesa_enum_to_string(buffer));
if (!no_error) {
/* Page 498 of the PDF, section '17.4.3.1 Clearing Individual Buffers'
* of the OpenGL 4.5 spec states:
*
* "An INVALID_ENUM error is generated by ClearBufferuiv and
* ClearNamedFramebufferuiv if buffer is not COLOR."
*/
_mesa_error(ctx, GL_INVALID_ENUM, "glClearBufferuiv(buffer=%s)",
_mesa_enum_to_string(buffer));
}
return;
}
}
void GLAPIENTRY
_mesa_ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
{
GET_CURRENT_CONTEXT(ctx);
clear_bufferuiv(ctx, buffer, drawbuffer, value, false);
}
/**
* The ClearBuffer framework is so complicated and so riddled with the
* assumption that the framebuffer is bound that, for now, we will just fake