Binding separable programs to an unbound program pipeline

Hello everyone.

I’m currently wondering about the way things work with glGenProgramPipelines, glBindProgramPipeline and glUseProgramStages.

The spec says that generating names alone will mark them for use as pipeline objects but only first binding them will allocate a new default state vector. However, on the current AMD implementation I’m testing, I can alter the state of the pipeline before ever binding it. This makes sense as glUseProgramStages is a DSA function and it is not listed as an error by the spec but I’m wondering if implementations will simply create the state vector anyway and simply mark the names as used or something when binding. Otherwise it doesn’t really make sense one can alter state variable that have yet to be allocated.

Am I missing something here?

Description of UseProgramStages command:

If pipeline is a name that has been generated (without subsequent deletion) by
GenProgramPipelines, but refers to a program pipeline object that has not been
previously bound, the GL first creates a new state vector in the same manner as
when BindProgramPipeline creates a new program pipeline object.

:doh: Thank you. Please excuse my being an idiot.