Bug 94437

Summary: [swrast] piglit glx-shader-sharing regression
Product: Mesa Reporter: Vinson Lee <vlee>
Component: Mesa coreAssignee: mesa-dev
Status: RESOLVED FIXED QA Contact: mesa-dev
Severity: normal    
Priority: medium CC: chemecse, imirkin, lemody, plamena.manolova, t_arceri
Version: 11.2Keywords: bisected, regression
Hardware: x86-64 (AMD64)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:

Description Vinson Lee 2016-03-08 00:47:54 UTC
mesa: 90f9df3210b5b66585007ec4836bfca498fd45f0 (master 11.3.0-devel)

$ ./bin/glx-shader-sharing -auto
Failed to link: error: count of uniform locations > MAX_UNIFORM_LOCATIONS(4294967295 > 98304)
PIGLIT: {"result": "fail" }


65dfb3048e8291675ca33581aeff8921f7ea509d is the first bad commit
commit 65dfb3048e8291675ca33581aeff8921f7ea509d
Author: Plamena Manolova <plamena.manolova@intel.com>
Date:   Thu Feb 11 15:00:02 2016 +0200

    compiler/glsl: Fix uniform location counting.
    
    This patch moves the calculation of current uniforms to
    link_uniforms, which makes use of UniformRemapTable which
    stores all the reserved uniform locations.
    
    Location assignment for implicit uniforms now tries to use
    any gaps left in the table after the location assignment
    for explicit uniforms. This gives us more space to store more
    uniforms.
    
    Patch is based on earlier patch with following changes/additions:
    
       1: Move the counting of explicit locations to
          check_explicit_uniform_locations and then pass
          the number to link_assign_uniform_locations.
       2: Count the number of empty slots in UniformRemapTable
          and store them in a list_head.
       3: Try to find an empty slot for implicit locations from
          the list, if that fails resize UniformRemapTable.
    
    Fixes following CTS tests:
       ES31-CTS.explicit_uniform_location.uniform-loc-mix-with-implicit-max
       ES31-CTS.explicit_uniform_location.uniform-loc-mix-with-implicit-max-array
    
    Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
    Signed-off-by: Plamena Manolova <plamena.manolova@intel.com>
    Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93696

:040000 040000 5848c556c369c2c798c1c1e036c70c740b56a97a 25915fac71a54954aafd0139a55045ba394969e6 M	src
bisect run success
Comment 1 Vinson Lee 2016-04-15 07:05:25 UTC
commit e25c24c6389e5dbbb7ebf59c302659e5d6417ed4
Author: Lars Hamre <chemecse@gmail.com>
Date:   Fri Apr 8 10:06:23 2016 -0400

    glsl: handle unsigned int wraparound in link_shaders()
    
    v2: change check_explicit_uniform_locations() to return an
        unsigned 0 (Timothy Arceri)
    
    We were storing the int result of check_explicit_uniform_locations()
    in num_explicit_uniform_locs as an unsigned int which caused it to
    be 4294967295 when a -1 was returned.
    
    This in turn would cause the following error during linking:
    error: count of uniform locations > MAX_UNIFORM_LOCATIONS(4294967295 > 98304)
    
    Results from running piglit tests/all with this patch
    and when ARB_explicit_uniform_location disabled:
    
    changes:     178
    fixes:       176
    regressions: 2
    
    The two regressions are for the following tests:
    glean@glsl1-matrix column check (1)
    glean@glsl1-matrix column check (2)
    which regress from FAIL to CRASH.
    
    The regressions are acceptable because the tests are currently failing due to
    the aforementioned linker error.
    
    Signed-off-by: Lars Hamre <chemecse@gmail.com>
    Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.