Merge branch 'mesa_7_7_branch'
[mesa.git] / src / gallium / drivers / nv10 / nv10_vbo.c
1 #include "draw/draw_context.h"
2 #include "pipe/p_context.h"
3 #include "pipe/p_state.h"
4 #include "pipe/p_inlines.h"
5
6 #include "nv10_context.h"
7 #include "nv10_state.h"
8
9 #include "nouveau/nouveau_channel.h"
10 #include "nouveau/nouveau_pushbuf.h"
11
12 void nv10_draw_elements( struct pipe_context *pipe,
13 struct pipe_buffer *indexBuffer,
14 unsigned indexSize,
15 unsigned prim, unsigned start, unsigned count)
16 {
17 struct nv10_context *nv10 = nv10_context( pipe );
18 struct draw_context *draw = nv10->draw;
19 struct pipe_screen *pscreen = pipe->screen;
20 unsigned i;
21
22 nv10_emit_hw_state(nv10);
23
24 /*
25 * Map vertex buffers
26 */
27 for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
28 if (nv10->vtxbuf[i].buffer) {
29 void *buf =
30 pipe_buffer_map(pscreen, nv10->vtxbuf[i].buffer,
31 PIPE_BUFFER_USAGE_CPU_READ);
32 draw_set_mapped_vertex_buffer(draw, i, buf);
33 }
34 }
35 /* Map index buffer, if present */
36 if (indexBuffer) {
37 void *mapped_indexes
38 = pipe_buffer_map(pscreen, indexBuffer,
39 PIPE_BUFFER_USAGE_CPU_READ);
40 draw_set_mapped_element_buffer(draw, indexSize, mapped_indexes);
41 }
42 else {
43 /* no index/element buffer */
44 draw_set_mapped_element_buffer(draw, 0, NULL);
45 }
46
47 draw_set_mapped_constant_buffer(draw,
48 PIPE_SHADER_VERTEX,
49 nv10->constbuf[PIPE_SHADER_VERTEX],
50 nv10->constbuf_nr[PIPE_SHADER_VERTEX]);
51
52 /* draw! */
53 draw_arrays(nv10->draw, prim, start, count);
54
55 /*
56 * unmap vertex/index buffers
57 */
58 for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
59 if (nv10->vtxbuf[i].buffer) {
60 pipe_buffer_unmap(pscreen, nv10->vtxbuf[i].buffer);
61 draw_set_mapped_vertex_buffer(draw, i, NULL);
62 }
63 }
64 if (indexBuffer) {
65 pipe_buffer_unmap(pscreen, indexBuffer);
66 draw_set_mapped_element_buffer(draw, 0, NULL);
67 }
68 }
69
70 void nv10_draw_arrays( struct pipe_context *pipe,
71 unsigned prim, unsigned start, unsigned count)
72 {
73 nv10_draw_elements(pipe, NULL, 0, prim, start, count);
74 }
75
76
77