After a bit of browsing about in the ANGLE and Qt code, I found that the ANGLE GL implementation is not capable of multithreaded access, so I guess I'll have to rewrite this a bit :-)
- Thomas On Fri, Jan 24, 2014 at 2:08 PM, Thomas Sevaldrud <[email protected]>wrote: > Hi, > > I'm new on this list, so I'm sorry if this has been discussed before. I am > using Qt in an OpenGL rendering engine, and I'm doing asynchronous texture > uploads by having two separate QOpenGLContexts with texture sharing. > > This works nicely on both Windows and Linux as long as I'm running the > full OpenGL drivers. But, when using the ANGLE drivers, I get a deadlock > when the rendering thread is doing a glDrawElements while the texture > upload thread is in a glTexImage2D. > > These are the stacks for my two threads: > > Thread 1: > > 0 NtWaitForSingleObject ntdll 0x7781bc3c > 1 WaitForSingleObjectEx KERNELBASE 0x75411180 > 2 WaitForSingleObject KERNELBASE 0x754110c0 > 3 nvd3dum 0x63911fe2 > 4 nvd3dum 0x63912bca > 5 nvd3dum 0x639248b0 > 6 CreateSurfaceLH d3d9 0x645cc420 > 7 DdCreateSurfaceLH d3d9 0x645cc0a7 > 8 DdCreateSurfaceFilter d3d9 0x645cc055 > 9 CBuffer::CBuffer d3d9 0x645d1268 > 10 CIndexBuffer::CIndexBuffer d3d9 0x645d1412 > 11 CDriverIndexBuffer::CDriverIndexBuffer d3d9 0x645d13ba > 12 CIndexBuffer::CreateDriverIndexBuffer d3d9 0x645d1367 > 13 CIndexBuffer::Create d3d9 0x645da2ba > 14 CBaseDevice::CreateIndexBuffer d3d9 0x645e4ac2 > 15 rx::Renderer9::createIndexBuffer renderer9.cpp 742 0x5323a643 > 16 rx::IndexBuffer9::initialize indexbuffer9.cpp 74 0x53235e52 > 17 rx::IndexBufferInterface::setBufferSize indexbuffer.cpp 125 0x53223d66 > 18 rx::StaticIndexBufferInterface::reserveBufferSpace indexbuffer.cpp 177 > 0x53224159 > 19 rx::IndexDataManager::prepareIndexData indexdatamanager.cpp 224 > 0x53224ae9 > 20 rx::Renderer9::applyIndexBuffer renderer9.cpp 1405 0x5323d551 > 21 gl::Context::drawElements context.cpp 2025 0x5319a495 > 22 glDrawElements libglesv2.cpp 2168 0x531c2212 > > Thread 2: > 0 NtWaitForSingleObject ntdll 0x7781bc3c > 1 WaitForSingleObjectEx KERNELBASE 0x75411180 > 2 WaitForSingleObject KERNELBASE 0x754110c0 > 3 nvd3dum 0x63911fe2 > 4 nvd3dum 0x63912bca > 5 nvd3dum 0x639248b0 > 6 CreateSurfaceLH d3d9 0x645cc420 > 7 DdCreateSurfaceLH d3d9 0x645cc0a7 > 8 DdCreateSurfaceFilter d3d9 0x645d08b2 > 9 CMipMap::CMipMap d3d9 0x645e0f7c > 10 CMipMap::Create d3d9 0x645e0a83 > 11 CBaseDevice::CreateTexture d3d9 0x645e075a > 12 rx::Image9::createSurface image9.cpp 195 0x5323220f > 13 rx::Image9::lock image9.cpp 217 0x53232410 > 14 rx::Image9::loadData image9.cpp 364 0x53232d84 > 15 gl::Texture::setImage texture.cpp 205 0x532193c2 > 16 gl::Texture2D::setImage texture.cpp 423 0x5321a06d > 17 glTexImage2D libglesv2.cpp 5506 0x531cafab > > Any ideas would be greatly appreciated :-) > > Best regards, > Thomas Sevaldrud > >
_______________________________________________ Interest mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/interest
