[Mesa-dev] [PATCH 22/38] main: Add entry point for BlitNamedFramebuffer.
Laura Ekstrand
laura at jlekstrand.net
Tue Mar 3 17:32:14 PST 2015
---
src/mapi/glapi/gen/ARB_direct_state_access.xml | 15 ++++++++
src/mesa/main/blit.c | 50 ++++++++++++++++++++++++++
src/mesa/main/blit.h | 6 ++++
src/mesa/main/tests/dispatch_sanity.cpp | 1 +
4 files changed, 72 insertions(+)
diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml
index 36de3c1..4e5ba0b 100644
--- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
+++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
@@ -140,6 +140,21 @@
<param name="layer" type="GLint" />
</function>
+ <function name="BlitNamedFramebuffer" offset="assign">
+ <param name="readFramebuffer" type="GLuint" />
+ <param name="drawFramebuffer" type="GLuint" />
+ <param name="srcX0" type="GLint" />
+ <param name="srcY0" type="GLint" />
+ <param name="srcX1" type="GLint" />
+ <param name="srcY1" type="GLint" />
+ <param name="dstX0" type="GLint" />
+ <param name="dstY0" type="GLint" />
+ <param name="dstX1" type="GLint" />
+ <param name="dstY1" type="GLint" />
+ <param name="mask" type="GLbitfield" />
+ <param name="filter" type="GLenum" />
+ </function>
+
<function name="CheckNamedFramebufferStatus" offset="assign">
<return type="GLenum" />
<param name="framebuffer" type="GLuint" />
diff --git a/src/mesa/main/blit.c b/src/mesa/main/blit.c
index b6d6d75..e03b5dc 100644
--- a/src/mesa/main/blit.c
+++ b/src/mesa/main/blit.c
@@ -524,3 +524,53 @@ _mesa_BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
dstX0, dstY0, dstX1, dstY1,
mask, filter, "glBlitFramebuffer");
}
+
+void GLAPIENTRY
+_mesa_BlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer,
+ GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
+ GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
+ GLbitfield mask, GLenum filter)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ struct gl_framebuffer *readFb, *drawFb;
+
+ if (MESA_VERBOSE & VERBOSE_API)
+ _mesa_debug(ctx,
+ "glBlitNamedFramebuffer(%u %u %d, %d, %d, %d, "
+ " %d, %d, %d, %d, 0x%x, %s)\n",
+ readFramebuffer, drawFramebuffer,
+ srcX0, srcY0, srcX1, srcY1,
+ dstX0, dstY0, dstX1, dstY1,
+ mask, _mesa_lookup_enum_by_nr(filter));
+
+ /*
+ * According to PDF page 533 of the OpenGL 4.5 core spec (30.10.2014,
+ * Section 18.3 Copying Pixels):
+ * "... if readFramebuffer or drawFramebuffer is zero (for
+ * BlitNamedFramebuffer), then the default read or draw framebuffer is
+ * used as the corresponding source or destination framebuffer,
+ * respectively."
+ */
+ if (readFramebuffer) {
+ readFb = _mesa_lookup_framebuffer_err(ctx, readFramebuffer,
+ "glBlitNamedFramebuffer");
+ if (!readFb)
+ return;
+ }
+ else
+ readFb = ctx->WinSysReadBuffer;
+
+ if (drawFramebuffer) {
+ drawFb = _mesa_lookup_framebuffer_err(ctx, drawFramebuffer,
+ "glBlitNamedFramebuffer");
+ if (!drawFb)
+ return;
+ }
+ else
+ drawFb = ctx->WinSysDrawBuffer;
+
+ _mesa_blit_framebuffer(ctx, readFb, drawFb,
+ srcX0, srcY0, srcX1, srcY1,
+ dstX0, dstY0, dstX1, dstY1,
+ mask, filter, "glBlitNamedFramebuffer");
+}
diff --git a/src/mesa/main/blit.h b/src/mesa/main/blit.h
index b854f5f..54b946e 100644
--- a/src/mesa/main/blit.h
+++ b/src/mesa/main/blit.h
@@ -41,5 +41,11 @@ _mesa_BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
GLbitfield mask, GLenum filter);
+extern void GLAPIENTRY
+_mesa_BlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer,
+ GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
+ GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
+ GLbitfield mask, GLenum filter);
+
#endif /* BLIT_H */
diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
index a6d8523..891ae0f 100644
--- a/src/mesa/main/tests/dispatch_sanity.cpp
+++ b/src/mesa/main/tests/dispatch_sanity.cpp
@@ -974,6 +974,7 @@ const struct function gl_core_functions_possible[] = {
{ "glNamedFramebufferRenderbuffer", 45, -1 },
{ "glNamedFramebufferTexture", 45, -1 },
{ "glNamedFramebufferTextureLayer", 45, -1 },
+ { "glBlitNamedFramebuffer", 45, -1 },
{ "glCheckNamedFramebufferStatus", 45, -1 },
{ "glGetNamedFramebufferAttachmentParameteriv", 45, -1 },
{ "glCreateTextures", 45, -1 },
--
2.1.0
More information about the mesa-dev
mailing list