0 Replies Latest reply on Dec 5, 2013 4:50 PM by retro_alt

    OpenGL Driver Bug: Texture Buffer Object Resizing

    retro_alt

      This issue is known to affect Radeon 6450M GPUs, and several other mobile AMD GPUs, even with the newest beta driver. It known NOT to affect the desktop AMD Radeon HD 7700 Series.

       

      This issue is with the OpenGL driver, and is reproducible as follows:

      1. Create a Texture Buffer Object by creating a Buffer Object and a Texture Object, and binding them together with a call to glTexBuffer().

      2. Fill in some data to the BufferObject using glBufferData().

      3. This data should render correctly.

      4. Resize the Buffer Object with a new call to glBufferData() with a different size.

      5. Fill in new data to the BufferObject.

      6. When rendered, the Texture Buffer Object will still be using the old data from the first upload, rather than the new resized data. Almost as if an internal memory pointer isn't being updated in the driver.

       

      This bug was extremely difficult to find, since no error was given. As a workaround, we call glTexBuffer every time we replace or resize the data in the Buffer Object. Nothing in the OpenGL specification prohibits resizing a TBO Buffer Object, and NVidia implements this behavior correctly.

       

      We have a small demonstration program! It is quite large ~100 MB. Email me if you would like a copy (gmaddox@osii.com).

       

      Also, it looks like we aren't the only ones experiencing this issue:

      https://www.opengl.org/discussion_boards/showthread.php/174916-Resizing-a-TBO-problem-with-AMD-drivers

       

      Thanks,

      Gregory Maddox

      Open Systems International Inc.