mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 20:38:06 +02:00
mesa: for meta blit, check max texture size, use glCopyTexSubImage2D() when possible
This commit is contained in:
parent
c16fa388d3
commit
2ad10c966c
1 changed files with 27 additions and 2 deletions
|
|
@ -137,6 +137,8 @@ struct save_state
|
|||
struct blit_state
|
||||
{
|
||||
GLuint TexObj;
|
||||
GLsizei TexWidth, TexHeight;
|
||||
GLenum TexType;
|
||||
GLuint ArrayObj;
|
||||
GLuint VBO;
|
||||
GLfloat verts[4][4]; /** four verts of X,Y,S,T */
|
||||
|
|
@ -630,6 +632,15 @@ _mesa_meta_blit_framebuffer(GLcontext *ctx,
|
|||
|
||||
ASSERT(ctx->Extensions.NV_texture_rectangle);
|
||||
|
||||
if (srcW > ctx->Const.MaxTextureRectSize ||
|
||||
srcH > ctx->Const.MaxTextureRectSize) {
|
||||
/* XXX avoid this fallback */
|
||||
_swrast_BlitFramebuffer(ctx, srcX0, srcY0, srcX1, srcY1,
|
||||
dstX0, dstY0, dstX1, dstY1, mask, filter);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (srcFlipX) {
|
||||
GLint tmp = dstX0;
|
||||
dstX0 = dstX1;
|
||||
|
|
@ -712,8 +723,22 @@ _mesa_meta_blit_framebuffer(GLcontext *ctx,
|
|||
|
||||
/* copy framebuffer image to texture */
|
||||
if (mask & GL_COLOR_BUFFER_BIT) {
|
||||
_mesa_CopyTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_RGBA,
|
||||
srcX, srcY, srcW, srcH, 0);
|
||||
if (blit->TexWidth == srcW &&
|
||||
blit->TexHeight == srcH &&
|
||||
blit->TexType == GL_RGBA) {
|
||||
/* replace existing tex image */
|
||||
_mesa_CopyTexSubImage2D(GL_TEXTURE_RECTANGLE, 0,
|
||||
0, 0, srcX, srcY, srcW, srcH);
|
||||
}
|
||||
else {
|
||||
/* create new tex image */
|
||||
_mesa_CopyTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_RGBA,
|
||||
srcX, srcY, srcW, srcH, 0);
|
||||
blit->TexWidth = srcW;
|
||||
blit->TexHeight = srcH;
|
||||
blit->TexType = GL_RGBA;
|
||||
}
|
||||
|
||||
mask &= ~GL_COLOR_BUFFER_BIT;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue