[Mesa-dev] [PATCH 02/38] main: Add glCreateFramebuffers.
Fredrik Höglund
fredrik at kde.org
Thu Apr 9 12:36:41 PDT 2015
There should probably be two empty lines between the functions, but
aside from that nitpick, 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 | 7 +++++
> src/mesa/main/fbobject.c | 40 ++++++++++++++++++++++----
> src/mesa/main/fbobject.h | 3 ++
> src/mesa/main/tests/dispatch_sanity.cpp | 1 +
> 4 files changed, 46 insertions(+), 5 deletions(-)
>
> diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> index 641e68f..85ef1f6 100644
> --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
> +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
> @@ -111,6 +111,13 @@
> <param name="data" type="GLvoid *" />
> </function>
>
> + <!-- Framebuffer object functions -->
> +
> + <function name="CreateFramebuffers" offset="assign">
> + <param name="n" type="GLsizei" />
> + <param name="framebuffers" type="GLuint *" />
> + </function>
> +
> <!-- Texture object functions -->
>
> <function name="CreateTextures" offset="assign">
> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> index 8c2eb25..b361967 100644
> --- a/src/mesa/main/fbobject.c
> +++ b/src/mesa/main/fbobject.c
> @@ -2274,15 +2274,23 @@ _mesa_DeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
> }
>
>
> -void GLAPIENTRY
> -_mesa_GenFramebuffers(GLsizei n, GLuint *framebuffers)
> +/**
> + * This is the implementation for glGenFramebuffers and glCreateFramebuffers.
> + * It is not exposed to the rest of Mesa to encourage the use of
> + * nameless buffers in driver internals.
> + */
> +static void
> +create_framebuffers(GLsizei n, GLuint *framebuffers, bool dsa)
> {
> GET_CURRENT_CONTEXT(ctx);
> GLuint first;
> GLint i;
> + struct gl_framebuffer *fb;
> +
> + const char *func = dsa ? "glCreateFramebuffers" : "glGenFramebuffers";
>
> if (n < 0) {
> - _mesa_error(ctx, GL_INVALID_VALUE, "glGenFramebuffersEXT(n)");
> + _mesa_error(ctx, GL_INVALID_VALUE, "%s(n < 0)", func);
> return;
> }
>
> @@ -2294,13 +2302,35 @@ _mesa_GenFramebuffers(GLsizei n, GLuint *framebuffers)
> for (i = 0; i < n; i++) {
> GLuint name = first + i;
> framebuffers[i] = name;
> - /* insert dummy placeholder into hash table */
> +
> + if (dsa) {
> + fb = ctx->Driver.NewFramebuffer(ctx, framebuffers[i]);
> + if (!fb) {
> + _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", func);
> + return;
> + }
> + }
> + else
> + fb = &DummyFramebuffer;
> +
> mtx_lock(&ctx->Shared->Mutex);
> - _mesa_HashInsert(ctx->Shared->FrameBuffers, name, &DummyFramebuffer);
> + _mesa_HashInsert(ctx->Shared->FrameBuffers, name, fb);
> mtx_unlock(&ctx->Shared->Mutex);
> }
> }
>
> +void GLAPIENTRY
> +_mesa_GenFramebuffers(GLsizei n, GLuint *framebuffers)
> +{
> + create_framebuffers(n, framebuffers, false);
> +}
> +
> +void GLAPIENTRY
> +_mesa_CreateFramebuffers(GLsizei n, GLuint *framebuffers)
> +{
> + create_framebuffers(n, framebuffers, true);
> +}
> +
>
> GLenum GLAPIENTRY
> _mesa_CheckFramebufferStatus(GLenum target)
> diff --git a/src/mesa/main/fbobject.h b/src/mesa/main/fbobject.h
> index 7aa5205..6bd8968 100644
> --- a/src/mesa/main/fbobject.h
> +++ b/src/mesa/main/fbobject.h
> @@ -153,6 +153,9 @@ _mesa_DeleteFramebuffers(GLsizei n, const GLuint *framebuffers);
> extern void GLAPIENTRY
> _mesa_GenFramebuffers(GLsizei n, GLuint *framebuffers);
>
> +extern void GLAPIENTRY
> +_mesa_CreateFramebuffers(GLsizei n, GLuint *framebuffers);
> +
> extern GLenum GLAPIENTRY
> _mesa_CheckFramebufferStatus(GLenum target);
>
> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
> index 69fb8d0..ee8b20f 100644
> --- a/src/mesa/main/tests/dispatch_sanity.cpp
> +++ b/src/mesa/main/tests/dispatch_sanity.cpp
> @@ -970,6 +970,7 @@ const struct function gl_core_functions_possible[] = {
> { "glGetNamedBufferParameteri64v", 45, -1 },
> { "glGetNamedBufferPointerv", 45, -1 },
> { "glGetNamedBufferSubData", 45, -1 },
> + { "glCreateFramebuffers", 45, -1 },
> { "glCreateTextures", 45, -1 },
> { "glTextureStorage1D", 45, -1 },
> { "glTextureStorage2D", 45, -1 },
>
More information about the mesa-dev
mailing list