Hi. I believe I hit a driver bug on Linux (or on WIndows,depends how you look at it)).
My system: GTX960M , Ubuntu 16.04 64bit. OpenGL 4.5 .
Also happens on TESLA k80,Ubuntu 16.04 (Google Compute engine)
Drivers version:396 on both machines.
In my engine I use regular shader programs,and also separate shader objects via shader pipelines for different render passes.
Now, I got a very obscure and nasty bug,where at the start of the app’s live cycle I had to do some render pass,which involved usage of pipeline. I notices that at the first time(when the app has just started running),the pipeline and its program functioned fine. But on the second run (the app is still running,but the logic is reset),the prog stopped working. by “stopped working” I mean that the draw call resulted in a black area where the geometry fragments supposed to be. I compared to Windows,and didn’t get the same bug. After digging into the problem for several hours,i found that it happened because at the end of the first rendering cycle I didn’t unbind the regular shader program from the last render pass. So it screw the separate shader object pass,which comes at the start of the next cycle. And it doesn’t happen on Windows! I am using GL DEBUG output extension,and that one doesn’t report anything abnormal either. I was basically aware for a long time that it is hazardous to mix regular programs and those which used with pipelines. But in this case what stroke me that I got this bug only one Linux,while still using the same drivers and same GPU. Also,it really would help if the driver spit some sort of notification in such a case,because detecting this bug in large scale application can be a nightmare. Needless to say,I even can’t use neither NSight,nor RenderDoc for this one,as I am using NV_PATH extension which shuts down those tools on the spot.
PS: The reason I am using separate shader objects is because that’s the only way to use fragment shader with NV_PATH extension in core profile.