I've been tracking down a performance problem with an appliction
running under the mga-glx driver.  The application took a large
performance hit (3-4x) between November 9th and 10th, about the
time that vertex arrays had a large number of changes made.

The top of the profile output looks like this:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  us/call  us/call  name    
 87.11     31.15    31.15   309540   100.63   100.63  shade_fast_rgba_one_sided
  2.10     31.90     0.75  2653200     0.28     0.28  triangle
  0.92     32.23     0.33   309540     1.07     1.11  rs_wg
  0.81     32.52     0.29   309540     0.94   109.09  gl_DrawArrays
  0.56     32.72     0.20   309540     0.65     0.65  trans_3_GLfloat_4f_raw
  0.56     32.92     0.20   221100     0.90     3.73  render_vb_tri_strip_raw

As you can see, shading seems to be taking an incredibly long
amount of time.  I've knocked the application down to a trivial
example (attached below) and instrumented TAG(shade_fast_rgba) to
spit out messages when it enters the outer (flags&VERT_END_VB)
and inner (flags&interesting) loops.  The output from that
experiment is also attached.  While I'm far from an expert in
Mesa's pipeline, it appears that the shade routine is somehow
finding 480 vertices in a list of 74 to shade.  Shouldn't it only
be shading the <count> vertices requested of glDrawArrays()?

All testing done in the 3.2 branch.

-tor

===================================== shade start
        shade outer 0
                shade inner 0
                shade inner 1
                shade inner 2
                shade inner 3
                shade inner 4
                shade inner 5
                shade inner 6
                shade inner 7
                shade inner 8
                shade inner 9
                shade inner 10
                shade inner 11
                shade inner 12
                shade inner 13
                shade inner 14
                shade inner 15
                shade inner 16
                shade inner 17
                shade inner 18
                shade inner 19
                shade inner 20
                shade inner 21
                shade inner 22
                shade inner 23
                shade inner 24
                shade inner 25
                shade inner 26
                shade inner 27
                shade inner 28
                shade inner 29
                shade inner 30
                shade inner 31
                shade inner 32
                shade inner 33
                shade inner 34
                shade inner 35
                shade inner 36
                shade inner 37
                shade inner 38
                shade inner 39
                shade inner 40
                shade inner 41
                shade inner 42
                shade inner 43
                shade inner 44
                shade inner 45
                shade inner 46
                shade inner 47
                shade inner 48
                shade inner 49
                shade inner 50
                shade inner 51
                shade inner 52
                shade inner 53
                shade inner 54
                shade inner 55
                shade inner 56
                shade inner 57
                shade inner 58
                shade inner 59
                shade inner 60
                shade inner 61
                shade inner 62
                shade inner 63
                shade inner 64
                shade inner 65
                shade inner 66
                shade inner 67
                shade inner 68
                shade inner 69
                shade inner 70
                shade inner 71
                shade inner 72
                shade inner 73
                shade inner 74
                shade inner 75
                shade inner 76
                shade inner 77
                shade inner 78
                shade inner 79
                shade inner 80
                shade inner 81
                shade inner 82
                shade inner 83
                shade inner 84
                shade inner 85
                shade inner 86
                shade inner 87
                shade inner 88
                shade inner 89
                shade inner 90
                shade inner 91
                shade inner 92
                shade inner 93
                shade inner 94
                shade inner 95
                shade inner 96
                shade inner 97
                shade inner 98
                shade inner 99
                shade inner 100
                shade inner 101
                shade inner 102
                shade inner 103
                shade inner 104
                shade inner 105
                shade inner 106
                shade inner 107
                shade inner 108
                shade inner 109
                shade inner 110
                shade inner 111
                shade inner 112
                shade inner 113
                shade inner 114
                shade inner 115
                shade inner 116
                shade inner 117
                shade inner 118
                shade inner 119
                shade inner 120
                shade inner 121
                shade inner 122
                shade inner 123
                shade inner 124
                shade inner 125
                shade inner 126
                shade inner 127
                shade inner 128
                shade inner 129
                shade inner 130
                shade inner 131
                shade inner 132
                shade inner 133
                shade inner 134
                shade inner 135
                shade inner 136
                shade inner 137
                shade inner 138
                shade inner 139
                shade inner 140
                shade inner 141
                shade inner 142
                shade inner 143
                shade inner 144
                shade inner 145
                shade inner 146
                shade inner 147
                shade inner 148
                shade inner 149
                shade inner 150
                shade inner 151
                shade inner 152
                shade inner 153
                shade inner 154
                shade inner 155
                shade inner 156
                shade inner 157
                shade inner 158
                shade inner 159
                shade inner 160
                shade inner 161
                shade inner 162
                shade inner 163
                shade inner 164
                shade inner 165
                shade inner 166
                shade inner 167
                shade inner 168
                shade inner 169
                shade inner 170
                shade inner 171
                shade inner 172
                shade inner 173
                shade inner 174
                shade inner 175
                shade inner 176
                shade inner 177
                shade inner 178
                shade inner 179
                shade inner 180
                shade inner 181
                shade inner 182
                shade inner 183
                shade inner 184
                shade inner 185
                shade inner 186
                shade inner 187
                shade inner 188
                shade inner 189
                shade inner 190
                shade inner 191
                shade inner 192
                shade inner 193
                shade inner 194
                shade inner 195
                shade inner 196
                shade inner 197
                shade inner 198
                shade inner 199
                shade inner 200
                shade inner 201
                shade inner 202
                shade inner 203
                shade inner 204
                shade inner 205
                shade inner 206
                shade inner 207
                shade inner 208
                shade inner 209
                shade inner 210
                shade inner 211
                shade inner 212
                shade inner 213
                shade inner 214
                shade inner 215
                shade inner 216
                shade inner 217
                shade inner 218
                shade inner 219
                shade inner 220
                shade inner 221
                shade inner 222
                shade inner 223
                shade inner 224
                shade inner 225
                shade inner 226
                shade inner 227
                shade inner 228
                shade inner 229
                shade inner 230
                shade inner 231
                shade inner 232
                shade inner 233
                shade inner 234
                shade inner 235
                shade inner 236
                shade inner 237
                shade inner 238
                shade inner 239
                shade inner 240
                shade inner 241
                shade inner 242
                shade inner 243
                shade inner 244
                shade inner 245
                shade inner 246
                shade inner 247
                shade inner 248
                shade inner 249
                shade inner 250
                shade inner 251
                shade inner 252
                shade inner 253
                shade inner 254
                shade inner 255
                shade inner 256
                shade inner 257
                shade inner 258
                shade inner 259
                shade inner 260
                shade inner 261
                shade inner 262
                shade inner 263
                shade inner 264
                shade inner 265
                shade inner 266
                shade inner 267
                shade inner 268
                shade inner 269
                shade inner 270
                shade inner 271
                shade inner 272
                shade inner 273
                shade inner 274
                shade inner 275
                shade inner 276
                shade inner 277
                shade inner 278
                shade inner 279
                shade inner 280
                shade inner 281
                shade inner 282
                shade inner 283
                shade inner 284
                shade inner 285
                shade inner 286
                shade inner 287
                shade inner 288
                shade inner 289
                shade inner 290
                shade inner 291
                shade inner 292
                shade inner 293
                shade inner 294
                shade inner 295
                shade inner 296
                shade inner 297
                shade inner 298
                shade inner 299
                shade inner 300
                shade inner 301
                shade inner 302
                shade inner 303
                shade inner 304
                shade inner 305
                shade inner 306
                shade inner 307
                shade inner 308
                shade inner 309
                shade inner 310
                shade inner 311
                shade inner 312
                shade inner 313
                shade inner 314
                shade inner 315
                shade inner 316
                shade inner 317
                shade inner 318
                shade inner 319
                shade inner 320
                shade inner 321
                shade inner 322
                shade inner 323
                shade inner 324
                shade inner 325
                shade inner 326
                shade inner 327
                shade inner 328
                shade inner 329
                shade inner 330
                shade inner 331
                shade inner 332
                shade inner 333
                shade inner 334
                shade inner 335
                shade inner 336
                shade inner 337
                shade inner 338
                shade inner 339
                shade inner 340
                shade inner 341
                shade inner 342
                shade inner 343
                shade inner 344
                shade inner 345
                shade inner 346
                shade inner 347
                shade inner 348
                shade inner 349
                shade inner 350
                shade inner 351
                shade inner 352
                shade inner 353
                shade inner 354
                shade inner 355
                shade inner 356
                shade inner 357
                shade inner 358
                shade inner 359
                shade inner 360
                shade inner 361
                shade inner 362
                shade inner 363
                shade inner 364
                shade inner 365
                shade inner 366
                shade inner 367
                shade inner 368
                shade inner 369
                shade inner 370
                shade inner 371
                shade inner 372
                shade inner 373
                shade inner 374
                shade inner 375
                shade inner 376
                shade inner 377
                shade inner 378
                shade inner 379
                shade inner 380
                shade inner 381
                shade inner 382
                shade inner 383
                shade inner 384
                shade inner 385
                shade inner 386
                shade inner 387
                shade inner 388
                shade inner 389
                shade inner 390
                shade inner 391
                shade inner 392
                shade inner 393
                shade inner 394
                shade inner 395
                shade inner 396
                shade inner 397
                shade inner 398
                shade inner 399
                shade inner 400
                shade inner 401
                shade inner 402
                shade inner 403
                shade inner 404
                shade inner 405
                shade inner 406
                shade inner 407
                shade inner 408
                shade inner 409
                shade inner 410
                shade inner 411
                shade inner 412
                shade inner 413
                shade inner 414
                shade inner 415
                shade inner 416
                shade inner 417
                shade inner 418
                shade inner 419
                shade inner 420
                shade inner 421
                shade inner 422
                shade inner 423
                shade inner 424
                shade inner 425
                shade inner 426
                shade inner 427
                shade inner 428
                shade inner 429
                shade inner 430
                shade inner 431
                shade inner 432
                shade inner 433
                shade inner 434
                shade inner 435
                shade inner 436
                shade inner 437
                shade inner 438
                shade inner 439
                shade inner 440
                shade inner 441
                shade inner 442
                shade inner 443
                shade inner 444
                shade inner 445
                shade inner 446
                shade inner 447
                shade inner 448
                shade inner 449
                shade inner 450
                shade inner 451
                shade inner 452
                shade inner 453
                shade inner 454
                shade inner 455
                shade inner 456
                shade inner 457
                shade inner 458
                shade inner 459
                shade inner 460
                shade inner 461
                shade inner 462
                shade inner 463
                shade inner 464
                shade inner 465
                shade inner 466
                shade inner 467
                shade inner 468
                shade inner 469
                shade inner 470
                shade inner 471
                shade inner 472
                shade inner 473
                shade inner 474
                shade inner 475
                shade inner 476
                shade inner 477
                shade inner 478
                shade inner 479
        shade outer 1
                shade inner 0
        shade outer 2
                shade inner 0
        shade outer 3
                shade inner 0
        shade outer 4
                shade inner 0
        shade outer 5
                shade inner 0
        shade outer 6
                shade inner 0
        shade outer 7
                shade inner 0
        shade outer 8
                shade inner 0
        shade outer 9
                shade inner 0
        shade outer 10
                shade inner 0
        shade outer 11
                shade inner 0
        shade outer 12
                shade inner 0
        shade outer 13
                shade inner 0
        shade outer 14
                shade inner 0
        shade outer 15
                shade inner 0
        shade outer 16
                shade inner 0
        shade outer 17
                shade inner 0
        shade outer 18
                shade inner 0
        shade outer 19
                shade inner 0
        shade outer 20
                shade inner 0
        shade outer 21
                shade inner 0
        shade outer 22
                shade inner 0
        shade outer 23
                shade inner 0
        shade outer 24
                shade inner 0
                shade inner 1
                shade inner 2
                shade inner 3
        shade outer 25
                shade inner 0
        shade outer 26
                shade inner 0
        shade outer 27
                shade inner 0
        shade outer 28
                shade inner 0
        shade outer 29
                shade inner 0
        shade outer 30
                shade inner 0
        shade outer 31
                shade inner 0
        shade outer 32
                shade inner 0
        shade outer 33
                shade inner 0
        shade outer 34
                shade inner 0
        shade outer 35
                shade inner 0
        shade outer 36
                shade inner 0
        shade outer 37
                shade inner 0
        shade outer 38
                shade inner 0
        shade outer 39
                shade inner 0
        shade outer 40
                shade inner 0

-------

// Sun:
// CC dodec.C -o dodec -I/usr/openwin/include -I/cs/include/glut -L/usr/openwin/lib 
-R/usr/openwin/lib -L/cs/lib -lglut -lGLU -lGL -lXmu -lX11 -lm

// Linux:
// g++ dodec.C -o dodec -I/usr/X11R6/include -L/usr/X11R6/lib -lglut -lGLU -lGL -lXmu 
-lX11 -lXext -lXi -lm

#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>

class PentakisDodecahedron {
 private:
   PentakisDodecahedron() {}
   static int initter;
   static int init();
   static float normals_and_verts[74][6];
 public:
   static void Draw() {
      glInterleavedArrays(GL_N3F_V3F, 0, normals_and_verts);
      glDrawArrays(GL_TRIANGLE_FAN, 0, 7);
      glDrawArrays(GL_TRIANGLE_FAN, 7, 7);
      glDrawArrays(GL_TRIANGLE_STRIP, 14, 12);
      glDrawArrays(GL_TRIANGLE_STRIP, 26, 12);
      glDrawArrays(GL_TRIANGLE_STRIP, 38, 12);
      glDrawArrays(GL_TRIANGLE_STRIP, 50, 12);
      glDrawArrays(GL_TRIANGLE_STRIP, 62, 12);
   }
};

int PentakisDodecahedron::initter = PentakisDodecahedron::init();
float PentakisDodecahedron::normals_and_verts[74][6];

static void assign(float f[6], double d[3]) {
   f[0] = f[3] = (float)d[0];
   f[1] = f[4] = (float)d[1];
   f[2] = f[5] = (float)d[2];
}


/* pentakis dodecahedron */
int
PentakisDodecahedron::init() {
   double sqrt5 = sqrt(5.0), phi = 0.5 * sqrt5 + 0.5;
   double diam = sqrt(phi + 2.0);
   double scale = 1.0 / (diam * sqrt(3.0));
   double pts[3][2] = {{2.0 * scale, (phi + 1.0) * scale},
                       {2.0 * phi * scale, (phi - 1.0) * scale},
                       {0.4 * sqrt5, -0.2 * sqrt5}};
   double verts[5][6][3];
   double top[3] = { 0, 0, 1 };
   double bot[3] = { 0, 0,-1 };

   int i, j, k;
   for (j=0; j<3; j++) {
      verts[0][j][0] = pts[j][0];
      verts[0][j][1] = 0.0;

      verts[4][j][0] =   verts[1][j][0] = 0.5 * (phi - 1.0) * pts[j][0];
      verts[4][j][1] = -(verts[1][j][1] = 0.5 * diam * pts[j][0]);

      verts[3][j][0] =   verts[2][j][0] = -0.5 * phi * pts[j][0];
      verts[3][j][1] = -(verts[2][j][1] = 0.5 * (phi - 1.0) * diam * pts[j][0]);

      verts[4][j][2] = verts[3][j][2] = verts[2][j][2] =
         verts[1][j][2] = verts[0][j][2] = pts[j][1];
   }
   for (k=0; k<5; k++)
      for (j=0; j<3; j++)
         for (i=0; i<3; i++)
            verts[k][j+3][i] = -verts[k][j][i];

   assign(normals_and_verts[0], top);
   assign(normals_and_verts[1], verts[0][0]);
   assign(normals_and_verts[2], verts[1][0]);
   assign(normals_and_verts[3], verts[2][0]);
   assign(normals_and_verts[4], verts[3][0]);
   assign(normals_and_verts[5], verts[4][0]);
   assign(normals_and_verts[6], verts[0][0]);

   assign(normals_and_verts[7], bot);
   assign(normals_and_verts[8], verts[0][3]);
   assign(normals_and_verts[9], verts[4][3]);
   assign(normals_and_verts[10], verts[3][3]);
   assign(normals_and_verts[11], verts[2][3]);
   assign(normals_and_verts[12], verts[1][3]);
   assign(normals_and_verts[13], verts[0][3]);

   for (k=0; k<5; k++) {
      assign(normals_and_verts[k*12+14], verts[(k+4)%5][0]);
      assign(normals_and_verts[k*12+15], verts[(k+2)%5][5]);
      assign(normals_and_verts[k*12+16], verts[k%5][0]);
      assign(normals_and_verts[k*12+17], verts[k%5][1]);
      assign(normals_and_verts[k*12+18], verts[(k+3)%5][5]);
      assign(normals_and_verts[k*12+19], verts[(k+3)%5][4]);
      assign(normals_and_verts[k*12+20], verts[(k+1)%5][1]);
      assign(normals_and_verts[k*12+21], verts[(k+1)%5][2]);
      assign(normals_and_verts[k*12+22], verts[(k+4)%5][4]);
      assign(normals_and_verts[k*12+23], verts[(k+4)%5][3]);
      assign(normals_and_verts[k*12+24], verts[(k+2)%5][2]);
      assign(normals_and_verts[k*12+25], verts[k%5][3]);
   }

   return 0;
}

void init(void) 
{
   static GLfloat pos[4] = {0.0, 1.0, 5.0, 0.0};
   static GLfloat zeros[4] = {0, 0, 0, 1};
   static GLfloat ones[4] = {1, 1, 1, 1};

   glClearColor(0.0, 0.0, 0.0, 0.0);
   glEnable(GL_DEPTH_TEST);
   glEnable(GL_CULL_FACE);
   
   glLightfv(GL_LIGHT0, GL_POSITION, pos);
   glLightfv(GL_LIGHT0, GL_DIFFUSE, ones);
   glLightfv(GL_LIGHT0, GL_AMBIENT, zeros);
   glEnable(GL_LIGHTING);
   glEnable(GL_LIGHT0);

   glColorMaterial(GL_FRONT, GL_DIFFUSE);
   glEnable(GL_COLOR_MATERIAL);
   glMaterialfv(GL_FRONT, GL_AMBIENT, zeros);
   glMaterialfv(GL_FRONT, GL_DIFFUSE, ones);
   glEnable(GL_NORMALIZE);
}

void display(void)
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glColor3f(1.0, 1.0, 1.0);
   glLoadIdentity ();
   gluLookAt(0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
   PentakisDodecahedron::Draw();
   glutSwapBuffers();
}

void reshape (int w, int h)
{
   glViewport(0, 0, (GLsizei) w, (GLsizei) h); 
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glFrustum(-1.0, 1.0, -1.0, 1.0, 5, 10.0);
   glMatrixMode(GL_MODELVIEW);
}

void keyboard(unsigned char key, int x, int y)
{
   switch (key) {
      case 27:
         exit(0);
         break;
   }
}

int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);
   glutInitWindowSize (500, 500); 
   glutInitWindowPosition (100, 100);
   glutCreateWindow (argv[0]);
   init ();
   glutDisplayFunc(display); 
   glutReshapeFunc(reshape);
   glutKeyboardFunc(keyboard);
   glutMainLoop();
   return 0;
}




_______________________________________________
Mesa-bug maillist  -  [EMAIL PROTECTED]
http://lists.mesa3d.org/mailman/listinfo/mesa-bug


_______________________________________________
Mesa-dev maillist  -  [EMAIL PROTECTED]
http://lists.mesa3d.org/mailman/listinfo/mesa-dev

Reply via email to