diff options
author | Brian Paul <brianp@vmware.com> | 2009-06-24 08:54:37 -0600 |
---|---|---|
committer | Brian Paul <brianp@vmware.com> | 2009-06-24 08:54:37 -0600 |
commit | a04af335a42ce3b28e59ff9b85b2bd433a9d7b12 (patch) | |
tree | 768262f4e8e4a9f49c64b76882c48f1ede445dd5 /progs/wgl/wglthreads/wglthreads.c | |
parent | d60b2c68552a2729dfdb33c2bac4822453cf8ae2 (diff) | |
parent | c25534f30d326c15dff845775d9bd55ba6064049 (diff) |
Merge branch 'mesa_7_5_branch'
Conflicts:
src/mesa/drivers/dri/i915/i915_tex_layout.c
src/mesa/drivers/dri/i965/brw_wm_glsl.c
src/mesa/drivers/dri/intel/intel_buffer_objects.c
src/mesa/drivers/dri/intel/intel_pixel_bitmap.c
src/mesa/drivers/dri/intel/intel_pixel_draw.c
src/mesa/main/enums.c
src/mesa/main/texstate.c
src/mesa/vbo/vbo_exec_array.c
Diffstat (limited to 'progs/wgl/wglthreads/wglthreads.c')
-rw-r--r-- | progs/wgl/wglthreads/wglthreads.c | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/progs/wgl/wglthreads/wglthreads.c b/progs/wgl/wglthreads/wglthreads.c index 1a8219ccc9..27dca10f2a 100644 --- a/progs/wgl/wglthreads/wglthreads.c +++ b/progs/wgl/wglthreads/wglthreads.c @@ -331,7 +331,9 @@ draw_loop(struct winthread *wt) if (Locking) EnterCriticalSection(&Mutex); + SwapBuffers(wt->hDC); + if (Locking) LeaveCriticalSection(&Mutex); @@ -443,7 +445,7 @@ create_window(struct winthread *wt, HGLRC shareCtx) win = CreateWindowEx(0, wc.lpszClassName, "wglthreads", - WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, + WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_TILEDWINDOW, xpos, ypos, width, @@ -481,7 +483,8 @@ create_window(struct winthread *wt, HGLRC shareCtx) } if (shareCtx) { - wglShareLists(shareCtx, ctx); + if(!wglShareLists(shareCtx, ctx)) + Error("Couldn't share WGL context lists"); } /* save the info for this window/context */ @@ -504,10 +507,22 @@ ThreadProc(void *p) struct winthread *wt = (struct winthread *) p; HGLRC share; + /* Wait for the previous thread */ + if(Texture && wt->Index > 0) { + WaitForSingleObject(WinThreads[wt->Index - 1].hEventInitialised, INFINITE); + share = WinThreads[0].Context; + } + else + share = 0; + share = (Texture && wt->Index > 0) ? WinThreads[0].Context : 0; create_window(wt, share); SetEvent(wt->hEventInitialised); + /* Wait for all threads to initialize otherwise wglShareLists will fail */ + if(wt->Index < NumWinThreads - 1) + WaitForSingleObject(WinThreads[NumWinThreads - 1].hEventInitialised, INFINITE); + draw_loop(wt); return 0; } @@ -591,13 +606,17 @@ main(int argc, char *argv[]) printf("wglthreads: creating threads\n"); - /* Create the threads */ + /* Create the events */ for (i = 0; i < NumWinThreads; i++) { - DWORD id; - WinThreads[i].Index = i; WinThreads[i].hEventInitialised = CreateEvent(NULL, TRUE, FALSE, NULL); WinThreads[i].hEventRedraw = CreateEvent(NULL, FALSE, FALSE, NULL); + } + + /* Create the threads */ + for (i = 0; i < NumWinThreads; i++) { + DWORD id; + WinThreads[i].Thread = CreateThread(NULL, 0, ThreadProc, @@ -606,8 +625,6 @@ main(int argc, char *argv[]) &id); printf("wglthreads: Created thread %p\n", (void *) WinThreads[i].Thread); - WaitForSingleObject(WinThreads[i].hEventInitialised, INFINITE); - threads[i] = WinThreads[i].Thread; } |