[Mesa-dev] [PATCH 28/38] main: Fake entry point for glClearNamedFramebufferuiv.
Fredrik Höglund
fredrik at kde.org
Thu Apr 16 09:45:21 PDT 2015
This patch is:
Reviewed-by: Fredrik Höglund <fredrik at kde.org>
On Wednesday 04 March 2015, Laura Ekstrand wrote:
> Mesa's ClearBuffer framework is very complicated and thoroughly married to the
> object binding model. Moreover, the OpenGL spec for ClearBuffer is also very
> complicated. At some point, we should implement buffer clearing for arbitrary
> framebuffer objects, but for now, we will just wrap ClearBuffer.
> ---
> src/mapi/glapi/gen/ARB_direct_state_access.xml | 7 +++++++
> src/mesa/main/clear.c | 17 +++++++++++++++++
> src/mesa/main/clear.h | 4 ++++
> src/mesa/main/tests/dispatch_sanity.cpp | 1 +
> 4 files changed, 29 insertions(+)
>
> diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> index 0ab0db4..52b4d34 100644
> --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
> +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> @@ -163,6 +163,13 @@
> <param name="value" type="const GLint *" />
> </function>
>
> + <function name="ClearNamedFramebufferuiv" offset="assign">
> + <param name="framebuffer" type="GLuint" />
> + <param name="buffer" type="GLenum" />
> + <param name="drawbuffer" type="GLint" />
> + <param name="value" type="const GLuint *" />
> + </function>
> +
> <function name="BlitNamedFramebuffer" offset="assign">
> <param name="readFramebuffer" type="GLuint" />
> <param name="drawFramebuffer" type="GLuint" />
> diff --git a/src/mesa/main/clear.c b/src/mesa/main/clear.c
> index 40bf0be..3357d54 100644
> --- a/src/mesa/main/clear.c
> +++ b/src/mesa/main/clear.c
> @@ -489,6 +489,23 @@ _mesa_ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
> }
> }
>
> +/**
> + * The ClearBuffer framework is so complicated and so riddled with the
> + * assumption that the framebuffer is bound that, for now, we will just fake
> + * direct state access clearing for the user.
> + */
> +void GLAPIENTRY
> +_mesa_ClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer,
> + GLint drawbuffer, const GLuint *value)
> +{
> + GLint oldfb;
> +
> + _mesa_GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldfb);
> + _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
> + _mesa_ClearBufferuiv(buffer, drawbuffer, value);
> + _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, (GLuint) oldfb);
> +}
> +
>
> /**
> * New in GL 3.0
> diff --git a/src/mesa/main/clear.h b/src/mesa/main/clear.h
> index d0b6133..b74c227 100644
> --- a/src/mesa/main/clear.h
> +++ b/src/mesa/main/clear.h
> @@ -59,6 +59,10 @@ extern void GLAPIENTRY
> _mesa_ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value);
>
> extern void GLAPIENTRY
> +_mesa_ClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer,
> + GLint drawbuffer, const GLuint *value);
> +
> +extern void GLAPIENTRY
> _mesa_ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value);
>
> extern void GLAPIENTRY
> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
> index a24f571..a1875b9 100644
> --- a/src/mesa/main/tests/dispatch_sanity.cpp
> +++ b/src/mesa/main/tests/dispatch_sanity.cpp
> @@ -977,6 +977,7 @@ const struct function gl_core_functions_possible[] = {
> { "glInvalidateNamedFramebufferSubData", 45, -1 },
> { "glInvalidateNamedFramebufferData", 45, -1 },
> { "glClearNamedFramebufferiv", 45, -1 },
> + { "glClearNamedFramebufferuiv", 45, -1 },
> { "glBlitNamedFramebuffer", 45, -1 },
> { "glCheckNamedFramebufferStatus", 45, -1 },
> { "glGetNamedFramebufferAttachmentParameteriv", 45, -1 },
>
More information about the mesa-dev
mailing list