Module: wine Branch: master Commit: cd96c59d9168fbda25536d328edb24c0bc0e5139 URL: http://source.winehq.org/git/wine.git/?a=commit;h=cd96c59d9168fbda25536d328e...
Author: Stefan Dösinger stefan@codeweavers.com Date: Wed Jun 8 00:27:15 2011 +0200
wined3d: Track framebuffer changes.
---
dlls/wined3d/context.c | 7 ++++--- dlls/wined3d/device.c | 4 ++++ dlls/wined3d/surface.c | 2 ++ dlls/wined3d/swapchain.c | 1 + 4 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c index cddd5f0..94ed896 100644 --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c @@ -2061,6 +2061,7 @@ void context_apply_blit_state(struct wined3d_context *context, struct wined3d_de LEAVE_GL();
SetupForBlit(device, context); + context_invalidate_state(context, STATE_FRAMEBUFFER, device->StateTable); }
static BOOL context_validate_rt_config(UINT rt_count, @@ -2122,6 +2123,9 @@ BOOL context_apply_clear_state(struct wined3d_context *context, struct wined3d_d }
LEAVE_GL(); + + /* TODO: This is not necessary if the rts are the device's current targets */ + context_invalidate_state(context, STATE_FRAMEBUFFER, device->StateTable); } else { @@ -2265,9 +2269,6 @@ BOOL context_apply_draw_state(struct wined3d_context *context, struct wined3d_de state_table[rep].apply(rep, device->stateBlock, context); }
- /* FIXME */ - state_table[STATE_FRAMEBUFFER].apply(STATE_FRAMEBUFFER, device->stateBlock, context); - if (wined3d_settings.offscreen_rendering_mode == ORM_FBO) { context_check_fbo_status(context, GL_FRAMEBUFFER); diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index f3fceac..e9a98c4 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -5129,6 +5129,8 @@ HRESULT CDECL wined3d_device_set_render_target(struct wined3d_device *device, device_invalidate_state(device, STATE_SCISSORRECT); }
+ device_invalidate_state(device, STATE_FRAMEBUFFER); + return WINED3D_OK; }
@@ -5179,6 +5181,8 @@ HRESULT CDECL wined3d_device_set_depth_stencil(struct wined3d_device *device, st device_invalidate_state(device, STATE_RENDER(WINED3DRS_DEPTHBIAS)); }
+ device_invalidate_state(device, STATE_FRAMEBUFFER); + return WINED3D_OK; }
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 8fbad09..d415159 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -3993,6 +3993,7 @@ static void read_from_framebuffer_texture(struct wined3d_surface *surface, BOOL */ context = context_acquire(device, surface); gl_info = context->gl_info; + device_invalidate_state(device, STATE_FRAMEBUFFER);
surface_prepare_texture(surface, gl_info, srgb); surface_bind_and_dirtify(surface, gl_info, srgb); @@ -5104,6 +5105,7 @@ static void surface_blt_fbo(struct wined3d_device *device, const WINED3DTEXTUREF context_set_draw_buffer(context, GL_COLOR_ATTACHMENT0); } context_check_fbo_status(context, GL_DRAW_FRAMEBUFFER); + device_invalidate_state(device, STATE_FRAMEBUFFER);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); device_invalidate_state(device, STATE_RENDER(WINED3DRS_COLORWRITEENABLE)); diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c index 2242f66..dc1800a 100644 --- a/dlls/wined3d/swapchain.c +++ b/dlls/wined3d/swapchain.c @@ -309,6 +309,7 @@ static void swapchain_blit(struct wined3d_swapchain *swapchain,
context_bind_fbo(context, GL_DRAW_FRAMEBUFFER, NULL); context_set_draw_buffer(context, GL_BACK); + device_invalidate_state(device, STATE_FRAMEBUFFER);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); device_invalidate_state(device, STATE_RENDER(WINED3DRS_COLORWRITEENABLE));