mesa: add blit_named_framebuffer() helper

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
Samuel Pitoiset
2017-06-05 14:18:41 +02:00
parent a9600318ee
commit 25304a44da
+54 -31
View File
@@ -639,24 +639,15 @@ _mesa_BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
}
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)
static ALWAYS_INLINE void
blit_named_framebuffer(struct gl_context *ctx,
GLuint readFramebuffer, GLuint drawFramebuffer,
GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
GLbitfield mask, GLenum filter, bool no_error)
{
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_enum_to_string(filter));
/*
* According to PDF page 533 of the OpenGL 4.5 core spec (30.10.2014,
* Section 18.3 Copying Pixels):
@@ -666,25 +657,57 @@ _mesa_BlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer,
* respectively."
*/
if (readFramebuffer) {
readFb = _mesa_lookup_framebuffer_err(ctx, readFramebuffer,
"glBlitNamedFramebuffer");
if (!readFb)
return;
}
else
if (no_error) {
readFb = _mesa_lookup_framebuffer(ctx, readFramebuffer);
} else {
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
if (no_error) {
drawFb = _mesa_lookup_framebuffer(ctx, drawFramebuffer);
} else {
drawFb = _mesa_lookup_framebuffer_err(ctx, drawFramebuffer,
"glBlitNamedFramebuffer");
if (!drawFb)
return;
}
} else {
drawFb = ctx->WinSysDrawBuffer;
}
blit_framebuffer_err(ctx, readFb, drawFb,
srcX0, srcY0, srcX1, srcY1,
dstX0, dstY0, dstX1, dstY1,
mask, filter, "glBlitNamedFramebuffer");
blit_framebuffer(ctx, readFb, drawFb,
srcX0, srcY0, srcX1, srcY1,
dstX0, dstY0, dstX1, dstY1,
mask, filter, no_error, "glBlitNamedFramebuffer");
}
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);
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_enum_to_string(filter));
blit_named_framebuffer(ctx, readFramebuffer, drawFramebuffer,
srcX0, srcY0, srcX1, srcY1,
dstX0, dstY0, dstX1, dstY1,
mask, filter, false);
}