Module: wine Branch: master Commit: c79864f871123abb557c3ca03a6c04531f33d613 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c79864f871123abb557c3ca03a...
Author: Stefan Dösinger stefan@codeweavers.com Date: Mon Apr 11 23:09:15 2011 +0200
wined3d: Only acquire a context in buffer::PreLoad if we have to.
---
dlls/wined3d/buffer.c | 25 ++++++++++++------------- 1 files changed, 12 insertions(+), 13 deletions(-)
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c index a6b79ec..ba3d06f 100644 --- a/dlls/wined3d/buffer.c +++ b/dlls/wined3d/buffer.c @@ -777,21 +777,20 @@ void CDECL wined3d_buffer_preload(struct wined3d_buffer *buffer)
buffer->flags &= ~(WINED3D_BUFFER_NOSYNC | WINED3D_BUFFER_DISCARD);
- context = context_acquire(device, NULL); - gl_info = context->gl_info; - if (!buffer->buffer_object) { /* TODO: Make converting independent from VBOs */ if (buffer->flags & WINED3D_BUFFER_CREATEBO) { - buffer_create_buffer_object(buffer, gl_info); + context = context_acquire(device, NULL); + buffer_create_buffer_object(buffer, context->gl_info); + context_release(context); buffer->flags &= ~WINED3D_BUFFER_CREATEBO; } else { /* Not doing any conversion */ - goto end; + return; } }
@@ -804,7 +803,6 @@ void CDECL wined3d_buffer_preload(struct wined3d_buffer *buffer)
if (!decl_changed && !(buffer->flags & WINED3D_BUFFER_HASDESC && buffer_is_dirty(buffer))) { - context_release(context); ++buffer->draw_count; if (buffer->draw_count > VB_RESETDECLCHANGE) buffer->decl_change_count = 0; @@ -836,7 +834,7 @@ void CDECL wined3d_buffer_preload(struct wined3d_buffer *buffer) * reload. This happens only once per changed vertexbuffer and * should occur rather rarely. */ IWineD3DDeviceImpl_MarkStateDirty(device, STATE_STREAMSRC); - goto end; + return; }
/* The declaration changed, reload the whole buffer */ @@ -845,7 +843,7 @@ void CDECL wined3d_buffer_preload(struct wined3d_buffer *buffer) if (!buffer_add_dirty_area(buffer, 0, 0)) { ERR("buffer_add_dirty_area failed, this is not expected\n"); - goto end; + return; } /* Avoid unfenced updates, we might overwrite more areas of the buffer than the application * cleared for unsynchronized updates @@ -867,7 +865,7 @@ void CDECL wined3d_buffer_preload(struct wined3d_buffer *buffer) buffer_unload(&buffer->resource); buffer->flags &= ~WINED3D_BUFFER_CREATEBO; IWineD3DDeviceImpl_MarkStateDirty(device, STATE_STREAMSRC); - goto end; + return; } } else @@ -895,17 +893,20 @@ void CDECL wined3d_buffer_preload(struct wined3d_buffer *buffer) /* Nothing to do because we locked directly into the vbo */ if (!(buffer->flags & WINED3D_BUFFER_DOUBLEBUFFER)) { - context_release(context); return; }
+ context = context_acquire(device, NULL); buffer_direct_upload(buffer, context->gl_info, flags);
context_release(context); return; }
- if (!(buffer->flags & WINED3D_BUFFER_DOUBLEBUFFER)) + context = context_acquire(device, NULL); + gl_info = context->gl_info; + + if(!(buffer->flags & WINED3D_BUFFER_DOUBLEBUFFER)) { buffer_get_sysmem(buffer, gl_info); } @@ -957,8 +958,6 @@ void CDECL wined3d_buffer_preload(struct wined3d_buffer *buffer) }
HeapFree(GetProcessHeap(), 0, data); - -end: context_release(context); }