[2/4] wined3d: Track when the FBO is dirty.
amartinson at codeweavers.com
Thu Apr 7 10:40:08 CDT 2011
On 03/27/2011 06:45 AM, Henri Verbeet wrote:
> 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
>> + 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?
I think I've addressed all of these... attached try #2.
More information about the wine-devel