I recently completed my Single Pass Order Independent Transparency shader.
I decided to add some shadows to my lighting shader. Since my lighting is computed with Tiled Forward Shading I put my shadow maps into texture array of cube maps. When I added the line of code to sample the cube maps. It started to hang on glDrawElements(). After some time the graphics driver kills the program for having too many errors. However it doesn't hang right away, there's a couple seconds of it working correctly before it breaks.
I gave it a try on my laptop (NV 630m) and it works completely, and seemingly smoother than my desktop(NV 770) without the shadows.
If I comment out the line sampling the cube map array for shadows it works.
attenuation *= texture(ShadowMaps, vec4(WL,shadow),comparedepth);
Curiously if I leave the line sampling the shadows, don't call my BRDF portion, and instead output attenuation. The shader doesn't hang.
color += vec4(attenuation,attenuation,attenuation,0.1);
What that looks like:
I've pasted my shaders here. http://pastie.org/8624432#85,92 Since they're kind of large.
And an opengl log, though CodeXL doesn't seem to want to capture the whole log for a single frame.
I'm hoping it's not the drivers because I tried updating them to the latest. I hope someone spots something I'm doing incorrectly. I know it's a lot to sift through but I'm running out of ideas.
Screenshot from my laptop: http://i.imgur.com/9WspPLc.png
I've since added a debug callback to my OpenGL context. When the shader locks up, this comes over the debug output.
Debug(api, m): PERFORMANCE - Program/shader state performance warning: Fragment Shader is going to be recompiled because the shader key based on GL state mismatches.
Edited by Tocs, 12 January 2014 - 12:36 PM.