I have encountered a rather interesting bug with pixel transfer operations. I have tested this on several AMD cards from the 7000 series to the RX 480 and 580.
The core of the problem is that when a texture is created with immutable storage, pixel transfer operations with endianness swap will always fail with GL_OUT_OF_MEMORY. A sample application is attached which attempts to isolate the problem. Compiled binary is provided for convenience as well as the source.
- When the texture is created with mutable storage, readback works but when immutable is used it does not.
- Also note that while the trigger is a pack operation, setting the unpack state to swap bytes also will cause the GL_OUT_OF_MEMORY error. The error is not real, as can be demostrated with the attached sample and source code.
- The sample works fine on all other drivers I have tried.