• Brian Paul's avatar
    st/mesa: fix handling of NumSamples=1 (v2) · 6839d336
    Brian Paul authored
    In Mesa we use the convention that if gl_renderbuffer::NumSamples
    or gl_texture_image::NumSamples is zero, it's a non-MSAA surface.
    Otherwise, it's an MSAA surface.  But in gallium nr_samples=1 is a
    non-MSAA surface.
    
    Before, if the user called glRenderbufferStorageMultisample() or
    glTexImage2DMultisample() with samples=1 we skipped the search for the
    next higher number of supported samples and asked the gallium driver to
    create a surface with nr_samples=1.  So we got a non-MSAA surface.
    This failed to meet the expection of the user making those calls.
    
    This patch changes the sample count checks in st_AllocTextureStorage()
    and st_renderbuffer_alloc_storage() to test for samples > 0 instead of > 1.
    And we now start querying for MSAA support at samples=2 since gallium has
    no concept of a 1x MSAA surface.
    
    A specific example of this problem is the Piglit arb_framebuffer_srgb-blit
    test.  It calls glRenderbufferStorageMultisample() with samples=1 to
    request an MSAA renderbuffer with the minimum supported number of MSAA
    samples.  Instead of creating a 4x or 8x, etc. MSAA surface, we wound up
    creating a non-MSAA surface.
    
    Finally, add a comment on the gl_renderbuffer::NumSamples field.
    
    There is one piglit regression with the VMware driver:
    ext_framebuffer_multisample-blit-mismatched-formats fails because
    now we're actually creating 4x MSAA surfaces (the requested sample
    count is 1) and we're hitting some sort of bug in the blitter code.  That
    will have to be fixed separately.  Other drivers may find regressions
    too now that MSAA surfaces are really being created.
    
    v2: start quering for MSAA support with samples=2 instead of 1.
    Reviewed-by: default avatarRoland Scheidegger <sroland@vmware.com>
    Reviewed-by: default avatarMarek Olšák <marek.olsak@amd.com>
    6839d336
mtypes.h 151 KB