[Mesa-dev] [PATCH 27/38] main: Fake entry point for glClearNamedFramebufferiv.

Fredrik Höglund fredrik at kde.org
Thu Apr 16 09:44:25 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                          | 19 +++++++++++++++++++
>  src/mesa/main/clear.h                          |  4 ++++
>  src/mesa/main/tests/dispatch_sanity.cpp        |  1 +
>  4 files changed, 31 insertions(+)
> 
> diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> index 0939b8b..0ab0db4 100644
> --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
> +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> @@ -156,6 +156,13 @@
>        <param name="height" type="GLsizei" />
>     </function>
>  
> +   <function name="ClearNamedFramebufferiv" offset="assign">
> +      <param name="framebuffer" type="GLuint" />
> +      <param name="buffer" type="GLenum" />
> +      <param name="drawbuffer" type="GLint" />
> +      <param name="value" type="const GLint *" />
> +   </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 8d707bc..40bf0be 100644
> --- a/src/mesa/main/clear.c
> +++ b/src/mesa/main/clear.c
> @@ -34,6 +34,8 @@
>  #include "clear.h"
>  #include "context.h"
>  #include "enums.h"
> +#include "fbobject.h"
> +#include "get.h"
>  #include "macros.h"
>  #include "mtypes.h"
>  #include "state.h"
> @@ -398,6 +400,23 @@ _mesa_ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *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_ClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer,
> +                              GLint drawbuffer, const GLint *value)
> +{
> +   GLint oldfb;
> +
> +   _mesa_GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldfb);
> +   _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
> +   _mesa_ClearBufferiv(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 96ce47b..d0b6133 100644
> --- a/src/mesa/main/clear.h
> +++ b/src/mesa/main/clear.h
> @@ -52,6 +52,10 @@ extern void GLAPIENTRY
>  _mesa_ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value);
>  
>  extern void GLAPIENTRY
> +_mesa_ClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer,
> +                              GLint drawbuffer, const GLint *value);
> +
> +extern void GLAPIENTRY
>  _mesa_ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value);
>  
>  extern void GLAPIENTRY
> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
> index 312e253..a24f571 100644
> --- a/src/mesa/main/tests/dispatch_sanity.cpp
> +++ b/src/mesa/main/tests/dispatch_sanity.cpp
> @@ -976,6 +976,7 @@ const struct function gl_core_functions_possible[] = {
>     { "glNamedFramebufferTextureLayer", 45, -1 },
>     { "glInvalidateNamedFramebufferSubData", 45, -1 },
>     { "glInvalidateNamedFramebufferData", 45, -1 },
> +   { "glClearNamedFramebufferiv", 45, -1 },
>     { "glBlitNamedFramebuffer", 45, -1 },
>     { "glCheckNamedFramebufferStatus", 45, -1 },
>     { "glGetNamedFramebufferAttachmentParameteriv", 45, -1 },
> 



More information about the mesa-dev mailing list