[2/4] wined3d: Track when the FBO is dirty.

Henri Verbeet hverbeet at gmail.com
Sun Mar 27 06:45:07 CDT 2011


On 21 March 2011 21:57, Adam Martinson <amartinson at codeweavers.com> wrote:
> @@ -2102,6 +2121,7 @@ BOOL context_apply_clear_state(struct wined3d_context *context, IWineD3DDeviceIm
>              if (rt_count < context->gl_info->limits.buffers)
>                  memset(context->blit_targets + rt_count, 0, (context->gl_info->limits.buffers - rt_count) * sizeof(*rts));
>              context_apply_fbo_state(context, GL_FRAMEBUFFER, rt_count, context->blit_targets, depth_stencil, SFLAG_INTEXTURE);
> +            context->device_fbo = context->current_fbo;
You can't do that.

> @@ -4801,6 +4801,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Clear(IWineD3DDevice *iface, DWORD rect
>      }
>
>      device_get_draw_rect(device, &draw_rect);
> +    IWineD3DDeviceImpl_MarkFBODirty(device);
What is this for?

> +static inline void IWineD3DDeviceImpl_MarkFBODirty(IWineD3DDeviceImpl *This)
This doesn't need to be in wined3d_private.h, it's only used from device.c.

> +    int i;
> +    for (i = 0; i < This->numContexts; ++i)
numContexts is unsigned.

What would happen when the current draw fbo entry would get evicted
from the cache? Also, while the patch avoids redundant lookups for
draws, it doesn't do a lot for clears. Is that intentional because
it's not worth it, or is there a different reason for that?



More information about the wine-devel mailing list