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:
+54
-31
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user