Mesa Version: ============= Branch master; cset 1e6688742e6a6e11d002c1fce5dca3da3d58594f; Impacted platform: 915gm(32bit), 945gm(32bit), 915gv(32bit), 945gv(32bit) Reproduce step ============== . launch X . glean -r logdir -t coloredTexPerf2 # or coloredLitPerf2
log of coloredTexPerf2 ====================== coloredTexPerf2: FAIL rgba8, db, z24, s8, win+pmap, id 37 DrawElements triangle strip rendering is missing some triangles. DrawElements triangle strip image differs from the reference image. Locked DrawElements triangle strip rendering is missing some triangles. Locked DrawElements triangle strip image differs from the reference image. Immediate-mode independent triangle rate = 872138 tri/sec. Range of valid measurements = [871648, 872396] Image sanity check passed Image consistency check passed Display-listed independent triangle rate = 1.02221e+06 tri/sec. Range of valid measurements = [1.02108e+06, 1.0229e+06] Image sanity check passed Image consistency check passed DrawArrays independent triangle rate = 979595 tri/sec. Range of valid measurements = [979189, 980186] Image sanity check passed Image consistency check passed Locked DrawArrays independent triangle rate = 1.19108e+06 tri/sec. Range of valid measurements = [1.1898e+06, 1.19221e+06] Image sanity check passed Image consistency check passed DrawElements independent triangle rate = 845006 tri/sec. Range of valid measurements = [844646, 845387] Image sanity check passed Image consistency check passed Locked DrawElements independent triangle rate = 844693 tri/sec. Range of valid measurements = [844654, 844720] Image sanity check passed Image consistency check passed Immediate-mode triangle strip rate = 2.59771e+06 tri/sec. Range of valid measurements = [2.59714e+06, 2.59832e+06] Image sanity check passed Image consistency check passed Display-listed triangle strip rate = 3.7305e+06 tri/sec. Range of valid measurements = [3.72961e+06, 3.73211e+06] Image sanity check passed Image consistency check passed DrawArrays triangle strip rate = 3.55168e+06 tri/sec. Range of valid measurements = [3.55011e+06, 3.55252e+06] Image sanity check passed Image consistency check passed Locked DrawArrays triangle strip rate = 3.55509e+06 tri/sec. Range of valid measurements = [3.55421e+06, 3.55555e+06] Image sanity check passed Image consistency check passed DrawElements triangle strip rate = 1.39508e+06 tri/sec. Range of valid measurements = [1.39432e+06, 1.39554e+06] Image sanity check failed Image consistency check failed Locked DrawElements triangle strip rate = 1.39716e+06 tri/sec. Range of valid measurements = [1.39671e+06, 1.39757e+06] Image sanity check failed Image consistency check failed
log of coloredLitPerf2 (collected form 915gv) ====================== coloredLitPerf2: FAIL rgba8, db, z24, s8, win+pmap, id 37 DrawElements triangle strip rendering is missing some triangles. DrawElements triangle strip image differs from the reference image. Locked DrawElements triangle strip rendering is missing some triangles. Locked DrawElements triangle strip image differs from the reference image. Immediate-mode independent triangle rate = 490311 tri/sec. Range of valid measurements = [489624, 491541] Image sanity check passed Image consistency check passed Display-listed independent triangle rate = 616814 tri/sec. Range of valid measurements = [616616, 617050] Image sanity check passed Image consistency check passed DrawArrays independent triangle rate = 609600 tri/sec. Range of valid measurements = [609438, 609736] Image sanity check passed Image consistency check passed Locked DrawArrays independent triangle rate = 609618 tri/sec. Range of valid measurements = [609195, 609992] Image sanity check passed Image consistency check passed DrawElements independent triangle rate = 495801 tri/sec. Range of valid measurements = [495645, 496108] Image sanity check passed Image consistency check passed Locked DrawElements independent triangle rate = 496126 tri/sec. Range of valid measurements = [495917, 496243] Image sanity check passed Image consistency check passed Immediate-mode triangle strip rate = 1.33137e+06 tri/sec. Range of valid measurements = [1.3294e+06, 1.33444e+06] Image sanity check passed Image consistency check passed Display-listed triangle strip rate = 1.69261e+06 tri/sec. Range of valid measurements = [1.69105e+06, 1.69493e+06] Image sanity check passed Image consistency check passed DrawArrays triangle strip rate = 1.63691e+06 tri/sec. Range of valid measurements = [1.63664e+06, 1.63727e+06] Image sanity check passed Image consistency check passed Locked DrawArrays triangle strip rate = 1.6424e+06 tri/sec. Range of valid measurements = [1.63698e+06, 1.65298e+06] Image sanity check passed Image consistency check passed DrawElements triangle strip rate = 1.16057e+06 tri/sec. Range of valid measurements = [1.16014e+06, 1.16096e+06] Image sanity check failed Image consistency check failed Locked DrawElements triangle strip rate = 1.16132e+06 tri/sec. Range of valid measurements = [1.16064e+06, 1.16187e+06] Image sanity check failed Image consistency check failed
this bug also happens on 64bit env (915 and 945).
This regression seems to be caused by commit b59657ad965f9471574e914b861bb1d2a17d772e (vbo-0.2 merge).
Created attachment 10980 [details] [review] fix two vbo_split related errors This patch fix two vbo_split related errors. 1. assume all arrays need to be normalized is incorrect. Some client arrays(such as vertex array) can not be normalized. 2. GL_TRIANGLE_STRIP is a special case when spliting for example: the vertices are v0, v1, v2, v3, v4, v5, v6 ... so triangles should be(v0, v1, v2) (v2, v1, v3) (v2, v3, v4), (v4, v3, v5)... if the vertices was splited between v4 and v5, part 2 would be (v3, v4), v5, v6... so the first triangle of part 2 is (v3, v4, v5), note the clock order differ from (v4, v3, v5). It is severe if GL_CULL_FACE is enabled. This patch ensure part1 and part2 have the same clock order.
> 2. GL_TRIANGLE_STRIP is a special case when spliting > for example: > the vertices are v0, v1, v2, v3, v4, v5, v6 ... > so triangles should be(v0, v1, v2) (v2, v1, v3) (v2, v3, v4), (v4, v3, v5)... > if the vertices was splited between v4 and v5, part 2 would be (v3, v4), v5, > v6... so the first triangle of part 2 is (v3, v4, v5), note the clock order > differ from (v4, v3, v5). It is severe if GL_CULL_FACE is enabled. > This patch ensure part1 and part2 have the same clock order. Looks good, thanks for catching this. Your patch includes slightly more logic than I think is necessary, would something like the following work as well? if (mode == GL_TRIANGLE_STRIP && (copy->dstelt_nr & 1)) return GL_FALSE;
It is more clear and works well
fixed mesa commit: d05b72154319041dad38f24696638396753e0da3
verified on 915gm(32bit), 945gm(32bit), 915gv(64bit)
Mass version move, cvs -> git
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.