Commit a80247f5 authored by Henri Verbeet's avatar Henri Verbeet Committed by Alexandre Julliard

wined3d: Avoid redundant FBO binds.

Apparently this is an expensive operation for certain drivers, even if the binding doesn't actually change.
parent 710f6f84
......@@ -64,6 +64,30 @@ void context_bind_fbo(struct WineD3DContext *context, GLenum target, GLuint *fbo
f = *fbo;
}
switch (target)
{
case GL_READ_FRAMEBUFFER_EXT:
if (context->fbo_read_binding == f) return;
context->fbo_read_binding = f;
break;
case GL_DRAW_FRAMEBUFFER_EXT:
if (context->fbo_draw_binding == f) return;
context->fbo_draw_binding = f;
break;
case GL_FRAMEBUFFER_EXT:
if (context->fbo_read_binding == f
&& context->fbo_draw_binding == f) return;
context->fbo_read_binding = f;
context->fbo_draw_binding = f;
break;
default:
FIXME("Unhandled target %#x.\n", target);
break;
}
GL_EXTCALL(glBindFramebufferEXT(target, f));
checkGLcall("glBindFramebuffer()");
}
......
......@@ -1242,6 +1242,8 @@ struct WineD3DContext
struct fbo_entry *current_fbo;
GLuint src_fbo;
GLuint dst_fbo;
GLuint fbo_read_binding;
GLuint fbo_draw_binding;
/* Extension emulation */
GLint gl_fog_source;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment