diff options
-rw-r--r-- | src/mesa/main/blit.c | 85 |
1 files changed, 54 insertions, 31 deletions
diff --git a/src/mesa/main/blit.c b/src/mesa/main/blit.c index c2efd7bec14..814480c4501 100644 --- a/src/mesa/main/blit.c +++ b/src/mesa/main/blit.c @@ -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); } |