1 #include "draw/draw_context.h"
2 #include "pipe/p_context.h"
3 #include "pipe/p_state.h"
5 #include "nv04_context.h"
6 #include "nv04_state.h"
8 #include "nouveau/nouveau_channel.h"
9 #include "nouveau/nouveau_pushbuf.h"
11 boolean
nv04_draw_elements( struct pipe_context
*pipe
,
12 struct pipe_buffer
*indexBuffer
,
14 unsigned prim
, unsigned start
, unsigned count
)
16 struct nv04_context
*nv04
= nv04_context( pipe
);
17 struct draw_context
*draw
= nv04
->draw
;
23 for (i
= 0; i
< PIPE_MAX_ATTRIBS
; i
++) {
24 if (nv04
->vertex_buffer
[i
].buffer
) {
26 = pipe
->winsys
->buffer_map(pipe
->winsys
,
27 nv04
->vertex_buffer
[i
].buffer
,
28 PIPE_BUFFER_USAGE_CPU_READ
);
29 draw_set_mapped_vertex_buffer(draw
, i
, buf
);
32 /* Map index buffer, if present */
35 = pipe
->winsys
->buffer_map(pipe
->winsys
, indexBuffer
,
36 PIPE_BUFFER_USAGE_CPU_READ
);
37 draw_set_mapped_element_buffer(draw
, indexSize
, mapped_indexes
);
40 /* no index/element buffer */
41 draw_set_mapped_element_buffer(draw
, 0, NULL
);
45 draw_arrays(nv04
->draw
, prim
, start
, count
);
48 * unmap vertex/index buffers
50 for (i
= 0; i
< PIPE_MAX_ATTRIBS
; i
++) {
51 if (nv04
->vertex_buffer
[i
].buffer
) {
52 pipe
->winsys
->buffer_unmap(pipe
->winsys
, nv04
->vertex_buffer
[i
].buffer
);
53 draw_set_mapped_vertex_buffer(draw
, i
, NULL
);
57 pipe
->winsys
->buffer_unmap(pipe
->winsys
, indexBuffer
);
58 draw_set_mapped_element_buffer(draw
, 0, NULL
);
64 boolean
nv04_draw_arrays( struct pipe_context
*pipe
,
65 unsigned prim
, unsigned start
, unsigned count
)
67 return nv04_draw_elements(pipe
, NULL
, 0, prim
, start
, count
);