[Interest] Async texture upload using the ANGLE OpenGL driver

Thomas Sevaldrud thomas at silentwings.no
Fri Jan 24 17:58:48 CET 2014


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 <thomas at silentwings.no>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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20140124/c351e2b0/attachment.html>


More information about the Interest mailing list