~mmach/netext73/mesa-ryzen

« back to all changes in this revision

Viewing changes to src/gallium/drivers/i915/i915_prim_vbuf.c

  • Committer: mmach
  • Date: 2023-11-02 21:31:35 UTC
  • Revision ID: netbit73@gmail.com-20231102213135-18d4tzh7tj0uz752
2023-11-02 22:11:57

Show diffs side-by-side

added added

removed removed

Lines of Context:
131
131
      i915_update_derived(i915);
132
132
   }
133
133
 
134
 
   return &i915->current.vertex_info;
 
134
   return &i915->current.vertex_info.draw;
135
135
}
136
136
 
137
137
/**
200
200
 *    a new buffer. Also updates may update the vbo state
201
201
 *    on the i915 context.
202
202
 */
203
 
static boolean
 
203
static bool
204
204
i915_vbuf_render_allocate_vertices(struct vbuf_render *render,
205
 
                                   ushort vertex_size, ushort nr_vertices)
 
205
                                   uint16_t vertex_size, uint16_t nr_vertices)
206
206
{
207
207
   struct i915_vbuf_render *i915_render = i915_vbuf_render(render);
208
208
   size_t size = (size_t)vertex_size * (size_t)nr_vertices;
234
234
   i915_vbuf_update_vbo_state(render);
235
235
 
236
236
   if (!i915_render->vbo)
237
 
      return FALSE;
238
 
   return TRUE;
 
237
      return false;
 
238
   return true;
239
239
}
240
240
 
241
241
static void *
251
251
}
252
252
 
253
253
static void
254
 
i915_vbuf_render_unmap_vertices(struct vbuf_render *render, ushort min_index,
255
 
                                ushort max_index)
 
254
i915_vbuf_render_unmap_vertices(struct vbuf_render *render, uint16_t min_index,
 
255
                                uint16_t max_index)
256
256
{
257
257
   struct i915_vbuf_render *i915_render = i915_vbuf_render(render);
258
258
 
285
285
 
286
286
static void
287
287
i915_vbuf_render_set_primitive(struct vbuf_render *render,
288
 
                               enum pipe_prim_type prim)
 
288
                               enum mesa_prim prim)
289
289
{
290
290
   struct i915_vbuf_render *i915_render = i915_vbuf_render(render);
291
291
   i915_render->prim = prim;
292
292
 
293
293
   switch (prim) {
294
 
   case PIPE_PRIM_POINTS:
 
294
   case MESA_PRIM_POINTS:
295
295
      i915_render->hwprim = PRIM3D_POINTLIST;
296
296
      i915_render->fallback = 0;
297
297
      break;
298
 
   case PIPE_PRIM_LINES:
 
298
   case MESA_PRIM_LINES:
299
299
      i915_render->hwprim = PRIM3D_LINELIST;
300
300
      i915_render->fallback = 0;
301
301
      break;
302
 
   case PIPE_PRIM_LINE_LOOP:
 
302
   case MESA_PRIM_LINE_LOOP:
303
303
      i915_render->hwprim = PRIM3D_LINELIST;
304
 
      i915_render->fallback = PIPE_PRIM_LINE_LOOP;
 
304
      i915_render->fallback = MESA_PRIM_LINE_LOOP;
305
305
      break;
306
 
   case PIPE_PRIM_LINE_STRIP:
 
306
   case MESA_PRIM_LINE_STRIP:
307
307
      i915_render->hwprim = PRIM3D_LINESTRIP;
308
308
      i915_render->fallback = 0;
309
309
      break;
310
 
   case PIPE_PRIM_TRIANGLES:
 
310
   case MESA_PRIM_TRIANGLES:
311
311
      i915_render->hwprim = PRIM3D_TRILIST;
312
312
      i915_render->fallback = 0;
313
313
      break;
314
 
   case PIPE_PRIM_TRIANGLE_STRIP:
 
314
   case MESA_PRIM_TRIANGLE_STRIP:
315
315
      i915_render->hwprim = PRIM3D_TRISTRIP;
316
316
      i915_render->fallback = 0;
317
317
      break;
318
 
   case PIPE_PRIM_TRIANGLE_FAN:
 
318
   case MESA_PRIM_TRIANGLE_FAN:
319
319
      i915_render->hwprim = PRIM3D_TRIFAN;
320
320
      i915_render->fallback = 0;
321
321
      break;
322
 
   case PIPE_PRIM_QUADS:
323
 
      i915_render->hwprim = PRIM3D_TRILIST;
324
 
      i915_render->fallback = PIPE_PRIM_QUADS;
325
 
      break;
326
 
   case PIPE_PRIM_QUAD_STRIP:
327
 
      i915_render->hwprim = PRIM3D_TRILIST;
328
 
      i915_render->fallback = PIPE_PRIM_QUAD_STRIP;
329
 
      break;
330
 
   case PIPE_PRIM_POLYGON:
 
322
   case MESA_PRIM_QUADS:
 
323
      i915_render->hwprim = PRIM3D_TRILIST;
 
324
      i915_render->fallback = MESA_PRIM_QUADS;
 
325
      break;
 
326
   case MESA_PRIM_QUAD_STRIP:
 
327
      i915_render->hwprim = PRIM3D_TRILIST;
 
328
      i915_render->fallback = MESA_PRIM_QUAD_STRIP;
 
329
      break;
 
330
   case MESA_PRIM_POLYGON:
331
331
      i915_render->hwprim = PRIM3D_POLY;
332
332
      i915_render->fallback = 0;
333
333
      break;
357
357
      if (i < end)
358
358
         OUT_BATCH(i);
359
359
      break;
360
 
   case PIPE_PRIM_LINE_LOOP:
 
360
   case MESA_PRIM_LINE_LOOP:
361
361
      if (nr >= 2) {
362
362
         for (i = start + 1; i < end; i++)
363
363
            OUT_BATCH((i - 1) | (i + 0) << 16);
364
364
         OUT_BATCH((i - 1) | (start) << 16);
365
365
      }
366
366
      break;
367
 
   case PIPE_PRIM_QUADS:
 
367
   case MESA_PRIM_QUADS:
368
368
      for (i = start; i + 3 < end; i += 4) {
369
369
         OUT_BATCH((i + 0) | (i + 1) << 16);
370
370
         OUT_BATCH((i + 3) | (i + 1) << 16);
371
371
         OUT_BATCH((i + 2) | (i + 3) << 16);
372
372
      }
373
373
      break;
374
 
   case PIPE_PRIM_QUAD_STRIP:
 
374
   case MESA_PRIM_QUAD_STRIP:
375
375
      for (i = start; i + 3 < end; i += 2) {
376
376
         OUT_BATCH((i + 0) | (i + 1) << 16);
377
377
         OUT_BATCH((i + 3) | (i + 2) << 16);
389
389
   switch (type) {
390
390
   case 0:
391
391
      return nr;
392
 
   case PIPE_PRIM_LINE_LOOP:
 
392
   case MESA_PRIM_LINE_LOOP:
393
393
      if (nr >= 2)
394
394
         return nr * 2;
395
395
      else
396
396
         return 0;
397
 
   case PIPE_PRIM_QUADS:
 
397
   case MESA_PRIM_QUADS:
398
398
      return (nr / 4) * 6;
399
 
   case PIPE_PRIM_QUAD_STRIP:
 
399
   case MESA_PRIM_QUAD_STRIP:
400
400
      return ((nr - 2) / 2) * 6;
401
401
   default:
402
402
      assert(0);
497
497
 * If type is zero normal operation assumed.
498
498
 */
499
499
static void
500
 
draw_generate_indices(struct vbuf_render *render, const ushort *indices,
 
500
draw_generate_indices(struct vbuf_render *render, const uint16_t *indices,
501
501
                      uint32_t nr_indices, unsigned type)
502
502
{
503
503
   struct i915_vbuf_render *i915_render = i915_vbuf_render(render);
514
514
         OUT_BATCH((o + indices[i]));
515
515
      }
516
516
      break;
517
 
   case PIPE_PRIM_LINE_LOOP:
 
517
   case MESA_PRIM_LINE_LOOP:
518
518
      if (nr_indices >= 2) {
519
519
         for (i = 1; i < nr_indices; i++)
520
520
            OUT_BATCH((o + indices[i - 1]) | (o + indices[i]) << 16);
521
521
         OUT_BATCH((o + indices[i - 1]) | (o + indices[0]) << 16);
522
522
      }
523
523
      break;
524
 
   case PIPE_PRIM_QUADS:
 
524
   case MESA_PRIM_QUADS:
525
525
      for (i = 0; i + 3 < nr_indices; i += 4) {
526
526
         OUT_BATCH((o + indices[i + 0]) | (o + indices[i + 1]) << 16);
527
527
         OUT_BATCH((o + indices[i + 3]) | (o + indices[i + 1]) << 16);
528
528
         OUT_BATCH((o + indices[i + 2]) | (o + indices[i + 3]) << 16);
529
529
      }
530
530
      break;
531
 
   case PIPE_PRIM_QUAD_STRIP:
 
531
   case MESA_PRIM_QUAD_STRIP:
532
532
      for (i = 0; i + 3 < nr_indices; i += 2) {
533
533
         OUT_BATCH((o + indices[i + 0]) | (o + indices[i + 1]) << 16);
534
534
         OUT_BATCH((o + indices[i + 3]) | (o + indices[i + 2]) << 16);
547
547
   switch (type) {
548
548
   case 0:
549
549
      return nr_indices;
550
 
   case PIPE_PRIM_LINE_LOOP:
 
550
   case MESA_PRIM_LINE_LOOP:
551
551
      if (nr_indices >= 2)
552
552
         return nr_indices * 2;
553
553
      else
554
554
         return 0;
555
 
   case PIPE_PRIM_QUADS:
 
555
   case MESA_PRIM_QUADS:
556
556
      return (nr_indices / 4) * 6;
557
 
   case PIPE_PRIM_QUAD_STRIP:
 
557
   case MESA_PRIM_QUAD_STRIP:
558
558
      return ((nr_indices - 2) / 2) * 6;
559
559
   default:
560
560
      assert(0);
564
564
 
565
565
static void
566
566
i915_vbuf_render_draw_elements(struct vbuf_render *render,
567
 
                               const ushort *indices, uint32_t nr_indices)
 
567
                               const uint16_t *indices, uint32_t nr_indices)
568
568
{
569
569
   struct i915_vbuf_render *i915_render = i915_vbuf_render(render);
570
570
   struct i915_context *i915 = i915_render->i915;