[Mesa-dev] [Bug 89068] glTexImage2D regression by texstore_rgba switch to _mesa_format_convert

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Tue Feb 10 11:33:35 PST 2015


https://bugs.freedesktop.org/show_bug.cgi?id=89068

            Bug ID: 89068
           Summary: glTexImage2D regression by texstore_rgba switch to
                    _mesa_format_convert
           Product: Mesa
           Version: git
          Hardware: Other
                OS: All
            Status: NEW
          Severity: normal
          Priority: medium
         Component: Mesa core
          Assignee: mesa-dev at lists.freedesktop.org
          Reporter: brad.king at kitware.com
        QA Contact: mesa-dev at lists.freedesktop.org

VTK's nightly testing regressed due to a mesa update that bisects to:

commit 8ec6534b266549cdc2798e2523bf6753924f6cde
Author: Iago Toral Quiroga <itoral at igalia.com>
Date:   Wed Oct 15 13:42:11 2014 +0200

    mesa: Use _mesa_format_convert to implement texstore_rgba.

    Notice that _mesa_format_convert does not handle byte-swapping scenarios,
    GL_COLOR_INDEX or MESA_FORMAT_YCBCR(_REV), so these must be handled
    separately.

    Also, remove all the code that goes unused after using
_mesa_format_convert.

    Reviewed-by: Jason Ekstrand <jason.ekstrand at intel.com>

The call in question from VTK is:

           glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8,
                         imageMemorySize[0], imageMemorySize[1],
                         0, GL_RGBA, GL_UNSIGNED_SHORT,
                         static_cast<unsigned short *>(image) );

Unfortunately I do not have a deep understanding of the relevant code in VTK or
Mesa.  I will attach example test outputs from before and after the change. 
Somehow the background color tints the foreground image.

In texstore_rgba, the code path taken prior to this change was:

   } else if (_mesa_get_format_max_bits(dstFormat) <= 8 &&
              !_mesa_is_format_signed(dstFormat)) {
      return store_ubyte_texture(ctx, dims, baseInternalFormat,
                                 dstFormat,
                                 dstRowStride, dstSlices,
                                 srcWidth, srcHeight, srcDepth,
                                 srcFormat, srcType, srcAddr, srcPacking);

and later in _mesa_pack_ubyte_rgba_rect:

   if (srcRowStride == width * 4 * sizeof(GLubyte) &&
       dstRowStride == _mesa_format_row_stride(format, width)) {
      /* do whole image at once */
      _mesa_pack_ubyte_rgba_row(format, width * height,
                                (const GLubyte (*)[4]) src, dst);
   }

After the change, _mesa_format_convert is called but none of the coe paths
invoking _mesa_pack_ubyte_rgba_row is taken.  Instead the path using
compute_src2dst_component_mapping is taken and the result is different.

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150210/7b9b0d7b/attachment.html>


More information about the mesa-dev mailing list