PDA

View Full Version : AMD catalyst Point sprites breakage with transition from OpenGL 4.1 to 4.2



Zenja
06-07-2012, 09:31 PM
[EDIT] Problem resolved. It appears that AMD 4.1 drivers were in conflict with the spec, and 4.2 drivers fixed the issue. Post left for reference.


Summary: OpenGL 4.2 drivers, point sprites no longer work in compatibility profile. The point sprites do work with Core profile. With older OpenGL 4.1 driver, point sprites work in both profiles.


Embedded system with Fusion G series HD 6320 chipset, Arch Linux x64, OpenGL application


Our embedded system was configured to run Catalyst 11.11 drivers, in 4.1.11251 Compatibility Profile (OpenGL 4.1). A point sprite rendering effect worked fine with this set of drivers (in core and compatible profiles, however the core profile was 18% slower). When upgrading our embedded system to Catalyst 12.4 (OpenGL 4.2, 4.2.11631), the point sprite effect no longer works in the compatible profile (4.2.11631) context. The point sprites are not visible. However, the effect works fine in the Core profile context. We cannot use the core profile, since performance is bad (more than 25% fps drop when compared to compatibility profile, same source code, same hardware).


We've done some regression tests, and the problem appeared with Catalyst 12.1 (OpenGL 4.2). The older version of Catalyst 11.11 (OpenGL 4.1) did not exhibit the problem. These are the Linux x86 drivers.


On our Windows 7 development boxes (AMD HD 5700), 4.2.11631 Core Profile (Forward-Compatible context) we observe a similar regression. Point sprites work in core profile (context setting WGL_CONTEXT_CORE_PROFILE_BIT_ARB and WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB). However, if we enable the compatibility profile (WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB), point sprites no longer work. With older OpenGL 4.1 drivers, the point sprite effect works in both profiles (core and compatibility).

We've forwarded a bug report to AMD, crickets ...

[EDIT] Just checked the 4.2 Compatibility specification:
Point sprites are enabled or disabled by calling Enable or Disable with the symbolic constant POINT_SPRITE. The default state is for point sprites to be disabled. When point sprites are enabled, the state of the point ntialiasing enable is ignored. In a deprecated context, point sprites are always enabled.

It appears that AMD decided to change the default point sprite state between OpenGL 4.1 and OpenGL 4.2. Fun fun. They've actually fixed a bug. It appears the the original state in compatibility profile was wrong.