mesa: improve ARB_copy_image internal format compat check
authorSeán de Búrca <leftmostcat@gmail.com>
Sat, 7 Mar 2015 09:23:53 +0000 (02:23 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 12 Mar 2015 23:40:03 +0000 (16:40 -0700)
commit1a469a34d517d4c24c60a613c7d1a56f77778c8e
tree6638fbed2ccc6fa671062dd8c83df18eeedd64ab
parentf3e4b2c9d2087c7f655d323cc6b4150313fc0128
mesa: improve ARB_copy_image internal format compat check

The memory layout of compatible internal formats may differ in bytes per
block, so TexFormat is not a reliable measure of compatibility. For example,
GL_RGB8 and GL_RGB8UI are compatible formats, but GL_RGB8 may be laid out in
memory as B8G8R8X8. If GL_RGB8UI has a 3 byte-per-block memory layout, the
existing compatibility check will fail.

Additionally, the current check allows any two compressed textures which share
block size to be used, whereas the spec gives an explicit table of compatible
formats.

v2: Use a switch instead of array iteration for block class and show the
    correct GL error when internal formats are mismatched.
v3: Include spec citations for new compatibility checks, rearrange check
    order to ensure that compressed, view-compatible formats return the
    correct result, and make style fixes. Original commit message amended
    for clarity.
v4: Reformatted spec citations.

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
src/mesa/main/copyimage.c