Lines Matching refs:nv30

32 #include "nv30-40_3d.xml.h"
37 nv30_emit_vtxattr(struct nv30_context *nv30, struct pipe_vertex_buffer *vb,
41 struct nouveau_pushbuf *push = nv30->base.pushbuf;
46 data = nouveau_resource_map_offset(&nv30->base, res, vb->buffer_offset +
81 nv30_vbuf_range(struct nv30_context *nv30, int vbi,
84 assert(nv30->vbo_max_index != ~0);
85 *base = nv30->vbo_min_index * nv30->vtxbuf[vbi].stride;
86 *size = (nv30->vbo_max_index -
87 nv30->vbo_min_index + 1) * nv30->vtxbuf[vbi].stride;
91 nv30_prevalidate_vbufs(struct nv30_context *nv30)
98 nv30->vbo_fifo = nv30->vbo_user = 0;
100 for (i = 0; i < nv30->num_vtxbufs; i++) {
101 vb = &nv30->vtxbuf[i];
108 if (nv30->vbo_push_hint) {
109 nv30->vbo_fifo = ~0;
113 nv30->vbo_user |= 1 << i;
115 nv30_vbuf_range(nv30, i, &base, &size);
116 nouveau_user_buffer_upload(&nv30->base, buf, base, size);
118 nouveau_buffer_migrate(&nv30->base, buf, NOUVEAU_BO_GART);
120 nv30->base.vbo_dirty = TRUE;
127 nv30_update_user_vbufs(struct nv30_context *nv30)
129 struct nouveau_pushbuf *push = nv30->base.pushbuf;
134 for (i = 0; i < nv30->vertex->num_elements; i++) {
135 struct pipe_vertex_element *ve = &nv30->vertex->pipe[i];
137 struct pipe_vertex_buffer *vb = &nv30->vtxbuf[b];
140 if (!(nv30->vbo_user & (1 << b)))
144 nv30_emit_vtxattr(nv30, vb, ve, i);
147 nv30_vbuf_range(nv30, b, &base, &size);
151 nouveau_user_buffer_upload(&nv30->base, buf, base, size);
161 nv30->base.vbo_dirty = TRUE;
165 nv30_release_user_vbufs(struct nv30_context *nv30)
167 uint32_t vbo_user = nv30->vbo_user;
173 nouveau_buffer_release_gpu_storage(nv04_resource(nv30->vtxbuf[i].buffer));
176 nouveau_bufctx_reset(nv30->bufctx, BUFCTX_VTXTMP);
180 nv30_vbo_validate(struct nv30_context *nv30)
182 struct nouveau_pushbuf *push = nv30->base.pushbuf;
183 struct nv30_vertex_stateobj *vertex = nv30->vertex;
188 nouveau_bufctx_reset(nv30->bufctx, BUFCTX_VTXBUF);
189 if (!nv30->vertex || nv30->draw_flags)
193 nv30->vbo_fifo = ~0;
194 nv30->vbo_user = 0;
196 nv30_prevalidate_vbufs(nv30);
202 redefine = MAX2(vertex->num_elements, nv30->state.num_vtxelts);
207 vb = &nv30->vtxbuf[ve->vertex_buffer_index];
209 if (likely(vb->stride) || nv30->vbo_fifo)
215 for (; i < nv30->state.num_vtxelts; i++) {
225 vb = &nv30->vtxbuf[ve->vertex_buffer_index];
226 user = (nv30->vbo_user & (1 << ve->vertex_buffer_index));
230 if (nv30->vbo_fifo || unlikely(vb->stride == 0)) {
231 if (!nv30->vbo_fifo)
232 nv30_emit_vtxattr(nv30, vb, ve, i);
244 nv30->state.num_vtxelts = vertex->num_elements;
321 struct nv30_context *nv30 = nv30_context(pipe);
323 nv30->vertex = hwcso;
324 nv30->dirty |= NV30_NEW_VERTEX;
328 nv30_draw_arrays(struct nv30_context *nv30,
332 struct nouveau_pushbuf *push = nv30->base.pushbuf;
452 nv30_draw_elements(struct nv30_context *nv30, boolean shorten,
456 const unsigned index_size = nv30->idxbuf.index_size;
457 struct nouveau_pushbuf *push = nv30->base.pushbuf;
458 struct nouveau_object *eng3d = nv30->screen->eng3d;
462 if (index_bias != nv30->state.index_bias) {
465 nv30->state.index_bias = index_bias;
470 nv30->idxbuf.buffer) {
471 struct nv04_resource *res = nv04_resource(nv30->idxbuf.buffer);
472 unsigned offset = nv30->idxbuf.offset;
507 if (nv30->idxbuf.buffer)
508 data = nouveau_resource_map_offset(&nv30->base,
509 nv04_resource(nv30->idxbuf.buffer),
510 nv30->idxbuf.offset, NOUVEAU_BO_RD);
512 data = nv30->idxbuf.user_buffer;
543 struct nv30_context *nv30 = nv30_context(pipe);
544 struct nouveau_pushbuf *push = nv30->base.pushbuf;
549 nv30->vbo_push_hint = /* the 64 is heuristic */
553 nv30->vbo_min_index = info->min_index;
554 nv30->vbo_max_index = info->max_index;
556 if (nv30->vbo_push_hint != !!nv30->vbo_fifo)
557 nv30->dirty |= NV30_NEW_ARRAYS;
559 push->user_priv = &nv30->bufctx;
560 if (nv30->vbo_user && !(nv30->dirty & (NV30_NEW_VERTEX | NV30_NEW_ARRAYS)))
561 nv30_update_user_vbufs(nv30);
563 nv30_state_validate(nv30, TRUE);
564 if (nv30->draw_flags) {
568 if (nv30->vbo_fifo) {
569 nv30_push_vbo(nv30, info);
573 if (nv30->base.vbo_dirty) {
576 nv30->base.vbo_dirty = FALSE;
580 nv30_draw_arrays(nv30,
586 if (info->primitive_restart != nv30->state.prim_restart) {
598 nv30->state.prim_restart = info->primitive_restart;
608 nv30_draw_elements(nv30, shorten,
613 nv30_state_release(nv30);
614 nv30_release_user_vbufs(nv30);