[Mesa-dev] [PATCH 26/38] main: Add entry points for InvalidateNamedFramebuffer[Sub]Data.

Fredrik Höglund fredrik at kde.org
Thu Apr 16 09:43:20 PDT 2015


This patch is:

Reviewed-by: Fredrik Höglund <fredrik at kde.org>

On Wednesday 04 March 2015, Laura Ekstrand wrote:
> ---
>  src/mapi/glapi/gen/ARB_direct_state_access.xml | 16 ++++++
>  src/mesa/main/fbobject.c                       | 67 ++++++++++++++++++++++++++
>  src/mesa/main/fbobject.h                       | 12 +++++
>  src/mesa/main/tests/dispatch_sanity.cpp        |  2 +
>  4 files changed, 97 insertions(+)
> 
> diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> index 4e5ba0b..0939b8b 100644
> --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
> +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> @@ -140,6 +140,22 @@
>        <param name="layer" type="GLint" />
>     </function>
>  
> +   <function name="InvalidateNamedFramebufferData" offset="assign">
> +      <param name="framebuffer" type="GLuint" />
> +      <param name="numAttachments" type="GLsizei" />
> +      <param name="attachments" type="const GLenum *" />
> +   </function>
> +
> +   <function name="InvalidateNamedFramebufferSubData" offset="assign">
> +      <param name="framebuffer" type="GLuint" />
> +      <param name="numAttachments" type="GLsizei" />
> +      <param name="attachments" type="const GLenum *" />
> +      <param name="x" type="GLint" />
> +      <param name="y" type="GLint" />
> +      <param name="width" type="GLsizei" />
> +      <param name="height" type="GLsizei" />
> +   </function>
> +
>     <function name="BlitNamedFramebuffer" offset="assign">
>        <param name="readFramebuffer" type="GLuint" />
>        <param name="drawFramebuffer" type="GLuint" />
> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> index 0b4cabe..72d87db 100644
> --- a/src/mesa/main/fbobject.c
> +++ b/src/mesa/main/fbobject.c
> @@ -3618,6 +3618,34 @@ _mesa_InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments,
>                                    "glInvalidateSubFramebuffer");
>  }
>  
> +void GLAPIENTRY
> +_mesa_InvalidateNamedFramebufferSubData(GLuint framebuffer,
> +                                        GLsizei numAttachments,
> +                                        const GLenum *attachments,
> +                                        GLint x, GLint y,
> +                                        GLsizei width, GLsizei height)
> +{
> +   struct gl_framebuffer *fb;
> +   GET_CURRENT_CONTEXT(ctx);
> +
> +   /* The OpenGL 4.5 core spec (02.02.2015) says (in Section 17.4 Whole
> +    * Framebuffer Operations, PDF page 522): "If framebuffer is zero, the
> +    * default draw framebuffer is affected."
> +    */
> +   if (framebuffer) {
> +      fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
> +                                        "glInvalidateNamedFramebufferSubData");
> +      if (!fb)
> +         return;
> +   }
> +   else
> +      fb = ctx->WinSysDrawBuffer;
> +
> +   invalidate_framebuffer_storage(ctx, fb, numAttachments, attachments,
> +                                  x, y, width, height,
> +                                  "glInvalidateNamedFramebufferSubData");
> +}
> +
>  
>  void GLAPIENTRY
>  _mesa_InvalidateFramebuffer(GLenum target, GLsizei numAttachments,
> @@ -3652,6 +3680,45 @@ _mesa_InvalidateFramebuffer(GLenum target, GLsizei numAttachments,
>                                    "glInvalidateFramebuffer");
>  }
>  
> +void GLAPIENTRY
> +_mesa_InvalidateNamedFramebufferData(GLuint framebuffer,
> +                                     GLsizei numAttachments,
> +                                     const GLenum *attachments)
> +{
> +   struct gl_framebuffer *fb;
> +   GET_CURRENT_CONTEXT(ctx);
> +
> +   /* The OpenGL 4.5 core spec (02.02.2015) says (in Section 17.4 Whole
> +    * Framebuffer Operations, PDF page 522): "If framebuffer is zero, the
> +    * default draw framebuffer is affected."
> +    */
> +   if (framebuffer) {
> +      fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
> +                                        "glInvalidateNamedFramebufferData");
> +      if (!fb)
> +         return;
> +   }
> +   else
> +      fb = ctx->WinSysDrawBuffer;
> +
> +   /* The GL_ARB_invalidate_subdata spec says:
> +    *
> +    *     "The command
> +    *
> +    *        void InvalidateFramebuffer(enum target,
> +    *                                   sizei numAttachments,
> +    *                                   const enum *attachments);
> +    *
> +    *     is equivalent to the command InvalidateSubFramebuffer with <x>, <y>,
> +    *     <width>, <height> equal to 0, 0, <MAX_VIEWPORT_DIMS[0]>,
> +    *     <MAX_VIEWPORT_DIMS[1]> respectively."
> +    */
> +   invalidate_framebuffer_storage(ctx, fb, numAttachments, attachments,
> +                                  0, 0,
> +                                  MAX_VIEWPORT_WIDTH, MAX_VIEWPORT_HEIGHT,
> +                                  "glInvalidateNamedFramebufferData");
> +}
> +
>  
>  void GLAPIENTRY
>  _mesa_DiscardFramebufferEXT(GLenum target, GLsizei numAttachments,
> diff --git a/src/mesa/main/fbobject.h b/src/mesa/main/fbobject.h
> index fabeed9..f71e885 100644
> --- a/src/mesa/main/fbobject.h
> +++ b/src/mesa/main/fbobject.h
> @@ -245,10 +245,22 @@ _mesa_InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments,
>                                 GLsizei width, GLsizei height);
>  
>  extern void GLAPIENTRY
> +_mesa_InvalidateNamedFramebufferSubData(GLuint framebuffer,
> +                                        GLsizei numAttachments,
> +                                        const GLenum *attachments,
> +                                        GLint x, GLint y,
> +                                        GLsizei width, GLsizei height);
> +
> +extern void GLAPIENTRY
>  _mesa_InvalidateFramebuffer(GLenum target, GLsizei numAttachments,
>                              const GLenum *attachments);
>  
>  extern void GLAPIENTRY
> +_mesa_InvalidateNamedFramebufferData(GLuint framebuffer,
> +                                     GLsizei numAttachments,
> +                                     const GLenum *attachments);
> +
> +extern void GLAPIENTRY
>  _mesa_DiscardFramebufferEXT(GLenum target, GLsizei numAttachments,
>                              const GLenum *attachments);
>  
> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
> index 891ae0f..312e253 100644
> --- a/src/mesa/main/tests/dispatch_sanity.cpp
> +++ b/src/mesa/main/tests/dispatch_sanity.cpp
> @@ -974,6 +974,8 @@ const struct function gl_core_functions_possible[] = {
>     { "glNamedFramebufferRenderbuffer", 45, -1 },
>     { "glNamedFramebufferTexture", 45, -1 },
>     { "glNamedFramebufferTextureLayer", 45, -1 },
> +   { "glInvalidateNamedFramebufferSubData", 45, -1 },
> +   { "glInvalidateNamedFramebufferData", 45, -1 },
>     { "glBlitNamedFramebuffer", 45, -1 },
>     { "glCheckNamedFramebufferStatus", 45, -1 },
>     { "glGetNamedFramebufferAttachmentParameteriv", 45, -1 },
> 



More information about the mesa-dev mailing list