Bug 9962

Summary: GLEAN's 2 perf cases fail
Product: Mesa Reporter: Wei Wang <wei.z.wang>
Component: Drivers/DRI/i915Assignee: Default DRI bug account <dri-devel>
Status: VERIFIED FIXED QA Contact:
Severity: normal    
Priority: medium CC: haihao.xiang, keithw, shuang.he
Version: git   
Hardware: x86 (IA32)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments: fix two vbo_split related errors

Description Wei Wang 2007-02-12 21:56:14 UTC
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
Comment 1 Wei Wang 2007-02-12 21:56:53 UTC
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

Comment 2 Wei Wang 2007-02-12 21:59:11 UTC
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
Comment 3 Wei Wang 2007-02-15 20:55:18 UTC
this bug also happens on 64bit env (915 and 945).
Comment 4 Gordon Jin 2007-04-10 23:03:51 UTC
This regression seems to be caused by commit b59657ad965f9471574e914b861bb1d2a17d772e (vbo-0.2 merge).
Comment 5 haihao 2007-08-03 08:04:33 UTC
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.
Comment 6 Keith Whitwell 2007-08-03 09:08:30 UTC
> 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;
Comment 7 haihao 2007-08-06 16:40:30 UTC
It is more clear and works well
Comment 8 haihao 2007-08-06 17:26:32 UTC
fixed
mesa commit: d05b72154319041dad38f24696638396753e0da3
Comment 9 Shuang He 2007-08-06 20:40:37 UTC
verified on 915gm(32bit), 945gm(32bit), 915gv(64bit)
Comment 10 Adam Jackson 2009-08-24 12:25:52 UTC
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.