I noticed that ProgramEnvParameter4f( FRAGMENT_PROGRAM_ARB, … ) is not updating fragment programs with the correct values unless FRAGMENT_PROGRAM_ARB is disabled while the function is called.
This doesn’t happen with the Catalyst 4.5 driver.
I think this is a bug, at least accoridng to the the spec (taken from ARB_vertex_program)
(11) Should program parameter variables bound to GL state be updated
automatically after the bound state changes? If so, when?
RESOLVED: Yes. Such variables are updated automatically prior to the
next vertex program invocation with no application intervention
required. A proposal to reduce the burden by requiring a manual "update
state" step was considered and rejected.
I quickly checked and I don’t have this problem. I don’t think it would make much sense if it would have to be disabled to work. It would make more sense if it worked only when FRAGMENT_PROGRAM is eabled.
Thanks for looking, but updating program.env[1] is definitely not working as expected with a certain fragment program, without the disable. Other fragment programs seem to behave normally with regards to this, but there are other things going wrong.
There’s a fragment program that causes rendering to slow to about 6secs/frame, that both compiles and passes the native limit test. I have a feeling that this is not going to be easily reproducible in a test app, but I’ll try.
Falling back to Cat 4.5 solves fixes both of these issues. My 6800 isn’t showing any problems either.
I haven’t done a whole lot of shader debugging to figure out what’s going wrong; I’ll post the offending programs on Monday once I figure out the minimum set of instructions that cause the slowdown. The EnvParameter behaviour I’m just going to assume is a driver bug.