AnsweredAssumed Answered

OpenGL Driver Bug: wglShareLists and Synchronization

Question asked by retro_alt on Dec 6, 2013
Latest reply on May 18, 2014 by cippyboy

This issue seems to affect all AMD GPUs and all driver versions. It involves using WGL Context Sharing.

 

This issue is with the OpenGL driver and is reproducible as follows:

1. Create two WGL Contexts on two separate Controls on two separate threads.

2. Make them shared with a call to wglShareLists (In our case we use a hub-and-spoke design, where all controls share with a single dummy context).

3. Call wglMakeCurrent() on the threads independently, and _ONLY ONCE_.

4. Create resources, ie. VBOs, TBOs, etc. on both contexts.

5. Call glFinish, glFlush, glClientWaitSync every frame; all of these are supposed to ensure resources are up to date between contexts.

6. Change/Replace/Update shared objects on both contexts frequently.

7. Objects are drawn in only one context at a time, with nothing or corruption drawn in the other window. No error is returned.

 

Apparently, the driver assumes that each context will sync not by glFinish, etc, but instead by making the contexts current/uncurrent. Our workaround was to, every frame, unmakecurrent and then makecurrent before drawing. This forces the synchronization of shared objects to happen.

 

We have a small demonstration program! It is quite large ~100 MB. Email me if you would like a copy (gmaddox@osii.com).


Thanks,

Gregory Maddox

Open Systems International Inc.

Outcomes