[Mesa-dev] [Bug 91314] The Witcher 2 (native) fails to start, throws "Assertion `img->_BaseFormat != -1' failed."

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Sun Jul 12 09:59:48 PDT 2015


Ilia Mirkin <imirkin at alum.mit.edu> changed:

           What    |Removed                     |Added
                 CC|                            |imirkin at alum.mit.edu,
                   |                            |itoral at igalia.com

--- Comment #2 from Ilia Mirkin <imirkin at alum.mit.edu> ---
So from the backtrace on IRC we see:

#5  0xb6ab9a64 in init_teximage_fields_ms (ctx=<optimized out>, img=0x204c7420,
width=<optimized out>, height=0, depth=0, border=0, 
    internalFormat=0, format=MESA_FORMAT_NONE, numSamples=0,
fixedSampleLocations=1 '\001') at main/teximage.c:1320
#6  0xb6ab9d4a in _mesa_init_teximage_fields (ctx=0x2055bed0, img=0x204c7420,
width=0, height=0, depth=0, border=0, internalFormat=0, 
    format=MESA_FORMAT_NONE) at main/teximage.c:1420
#7  0xb6abee31 in _mesa_texture_image_multisample (ctx=0x2055bed0, dims=2,
texObj=0x204a55d8, target=37120, samples=5, internalformat=34836, 
    width=32, height=32, depth=1, fixedsamplelocations=0 '\000', immutable=0
'\000', func=0xb6ec6f81 "glTexImage2DMultisample")
    at main/teximage.c:5703
#8  0xb6abeecc in _mesa_TexImage2DMultisample (target=37120, samples=5,
internalformat=34836, width=32, height=32, 
    fixedsamplelocations=0 '\000') at main/teximage.c:5731

So the culprit is:

      if (width > 0 && height > 0 && depth > 0) {
         if (!ctx->Driver.AllocTextureStorage(ctx, texObj, 1,
                  width, height, depth)) {
            /* tidy up the texture image state. strictly speaking,
             * we're allowed to just leave this in whatever state we
             * like, but being tidy is good.
            _mesa_init_teximage_fields(ctx, texImage,
                  0, 0, 0, 0, GL_NONE, MESA_FORMAT_NONE);

The texture storage allocation fails because nv50 doesn't support GL_RGBA32F
with > 4 samples.

Of course the sample count check above (samplesOK) passes because in st/mesa
format choosing, GL_RGBA32F will happily fall back to RGBA16F, which is
perfectly allowed to have 8 samples on nv50.

However st_AllocTextureStorage is blissfully unaware of such a restriction, and
fails when it can't create a RGBA32F MS8 texture.

So the bug is 2-fold:

(a) st_AllocateTextureStorage should use st_choose_format (or equivalent) so
that it deals with any sample count limitations

(b) _mesa_init_teximage_fields with MESA_FORMAT_NONE appears to trigger the
assert no matter what -- this should be handled better. Iago, should we just
let MESA_FORMAT_NONE through the assert, as was done before? (By the way,
GLenum, which is the type of baseFormat, appears to be unsigned, so a check
against -1 is a bit dangerous.)

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/20150712/3032ee50/attachment.html>

More information about the mesa-dev mailing list