200
200
* a new buffer. Also updates may update the vbo state
201
201
* on the i915 context.
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)
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;
254
i915_vbuf_render_unmap_vertices(struct vbuf_render *render, ushort min_index,
254
i915_vbuf_render_unmap_vertices(struct vbuf_render *render, uint16_t min_index,
257
257
struct i915_vbuf_render *i915_render = i915_vbuf_render(render);
287
287
i915_vbuf_render_set_primitive(struct vbuf_render *render,
288
enum pipe_prim_type prim)
290
290
struct i915_vbuf_render *i915_render = i915_vbuf_render(render);
291
291
i915_render->prim = prim;
294
case PIPE_PRIM_POINTS:
294
case MESA_PRIM_POINTS:
295
295
i915_render->hwprim = PRIM3D_POINTLIST;
296
296
i915_render->fallback = 0;
298
case PIPE_PRIM_LINES:
298
case MESA_PRIM_LINES:
299
299
i915_render->hwprim = PRIM3D_LINELIST;
300
300
i915_render->fallback = 0;
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;
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;
310
case PIPE_PRIM_TRIANGLES:
310
case MESA_PRIM_TRIANGLES:
311
311
i915_render->hwprim = PRIM3D_TRILIST;
312
312
i915_render->fallback = 0;
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;
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;
322
case PIPE_PRIM_QUADS:
323
i915_render->hwprim = PRIM3D_TRILIST;
324
i915_render->fallback = PIPE_PRIM_QUADS;
326
case PIPE_PRIM_QUAD_STRIP:
327
i915_render->hwprim = PRIM3D_TRILIST;
328
i915_render->fallback = PIPE_PRIM_QUAD_STRIP;
330
case PIPE_PRIM_POLYGON:
322
case MESA_PRIM_QUADS:
323
i915_render->hwprim = PRIM3D_TRILIST;
324
i915_render->fallback = MESA_PRIM_QUADS;
326
case MESA_PRIM_QUAD_STRIP:
327
i915_render->hwprim = PRIM3D_TRILIST;
328
i915_render->fallback = MESA_PRIM_QUAD_STRIP;
330
case MESA_PRIM_POLYGON:
331
331
i915_render->hwprim = PRIM3D_POLY;
332
332
i915_render->fallback = 0;
360
case PIPE_PRIM_LINE_LOOP:
360
case MESA_PRIM_LINE_LOOP:
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);
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);
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);
497
497
* If type is zero normal operation assumed.
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)
503
503
struct i915_vbuf_render *i915_render = i915_vbuf_render(render);
514
514
OUT_BATCH((o + indices[i]));
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);
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);
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);
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;
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;
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)
569
569
struct i915_vbuf_render *i915_render = i915_vbuf_render(render);
570
570
struct i915_context *i915 = i915_render->i915;