cancel
Showing results for 
Search instead for 
Did you mean: 

OpenGL & Vulkan

Journeyman III
Journeyman III

Opengl driver bug with retrieving shader binaries.

A program object that is successfully linked BUT has it's shaders detached  can not be queried about it's binary - glGetProgramiv(prog, GL_PROGRAM_BINARY_LENGTH, &v) gives 0. Otherwise the program object works for rendering.

If the shaders are kept attached, then all works - the program obj is usable for rendering and the binary is retrievable.

This is a bug because, except for the linking, the attached shaders (or their lack thereof) should have no other effects on the program object. In particular they should not affect the binary.

I attached some simplified win32-based code that shows the bug.

Tags (1)
0 Kudos
Reply
2 Replies
Staff
Staff

Re: Opengl driver bug with retrieving shader binaries.

Hi,

Yeah, this looks like a bug on our side too. Another workaround appears to be setting the binary retriveable hint to true with glProgramParameteri(prog, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE) before linking, which is recommended anyway. We'll go see if we can fix it to do something reasonable even if the hint is false.

Thanks,

Graham

0 Kudos
Reply
Journeyman III
Journeyman III

Re: Opengl driver bug with retrieving shader binaries.

Hi,

Thank you for the reply!

But I do call glProgramParameteri(prog, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE) before the linking (see the attached source) and still glGetProgramiv(prog, GL_PROGRAM_BINARY_LENGTH, &v) gives 0 after the shaders are detached

I also call glProgramParameteri(prog, GL_PROGRAM_SEPARABLE, GL_TRUE), but this is not important. The bug happens with normal (non-separable) program objects too. I have tested the standard case where the program object is not separable and has one vertex- and one fragment shader - the bug persists.

0 Kudos
Reply