Merge remote branch 'upstream/gallium-0.1' into nouveau-gallium-0.1
[mesa.git] / src / gallium / drivers / nv40 / nv40_draw.c
index 9cd8fa6a497ae5ac40538ba02106b4e99d523f56..8e56cdc2fe0b9a3ba240cc50d474779479930404 100644 (file)
@@ -1,9 +1,10 @@
-#include "pipe/p_util.h"
 #include "pipe/p_shader_tokens.h"
 
+#include "util/u_pack_color.h"
+
 #include "draw/draw_context.h"
 #include "draw/draw_vertex.h"
-#include "draw/draw_private.h"
+#include "draw/draw_pipe.h"
 
 #include "nv40_context.h"
 #define NV40_SHADER_NO_FUCKEDNESS
@@ -39,7 +40,7 @@ nv40_render_vertex(struct nv40_context *nv40, const struct vertex_header *v)
                case EMIT_OMIT:
                        break;
                case EMIT_1F:
-                       BEGIN_RING(curie, 0x1e40 + (hw * 4), 1);
+                       BEGIN_RING(curie, NV40TCL_VTX_ATTR_1F(hw), 1);
                        OUT_RING  (fui(v->data[idx][0]));
                        break;
                case EMIT_2F:
@@ -61,7 +62,7 @@ nv40_render_vertex(struct nv40_context *nv40, const struct vertex_header *v)
                        OUT_RING  (fui(v->data[idx][3]));
                        break;
                case EMIT_4UB:
-                       BEGIN_RING(curie, 0x1940 + (hw * 4), 1);
+                       BEGIN_RING(curie, NV40TCL_VTX_ATTR_4UB(hw), 1);
                        OUT_RING  (pack_ub4(float_to_ubyte(v->data[idx][0]),
                                            float_to_ubyte(v->data[idx][1]),
                                            float_to_ubyte(v->data[idx][2]),
@@ -236,12 +237,10 @@ nv40_draw_elements_swtnl(struct pipe_context *pipe,
 
        if (!nv40_state_validate_swtnl(nv40))
                return FALSE;
-       nv40->dirty &= ~(1ULL << NV40_STATE_VTXBUF);
+       nv40->state.dirty &= ~(1ULL << NV40_STATE_VTXBUF);
        nv40_state_emit(nv40);
 
-       for (i = 0; i < PIPE_ATTRIB_MAX; i++) {
-               if (!nv40->vtxbuf[i].buffer)
-                       continue;
+       for (i = 0; i < nv40->vtxbuf_nr; i++) {
                map = ws->buffer_map(ws, nv40->vtxbuf[i].buffer,
                                     PIPE_BUFFER_USAGE_CPU_READ);
                draw_set_mapped_vertex_buffer(nv40->draw, i, map);
@@ -255,18 +254,17 @@ nv40_draw_elements_swtnl(struct pipe_context *pipe,
        }
 
        if (nv40->constbuf[PIPE_SHADER_VERTEX]) {
+               const unsigned nr = nv40->constbuf_nr[PIPE_SHADER_VERTEX];
+
                map = ws->buffer_map(ws, nv40->constbuf[PIPE_SHADER_VERTEX],
                                     PIPE_BUFFER_USAGE_CPU_READ);
-               draw_set_mapped_constant_buffer(nv40->draw, map);
+               draw_set_mapped_constant_buffer(nv40->draw, map, nr);
        }
 
        draw_arrays(nv40->draw, mode, start, count);
 
-       for (i = 0; i < PIPE_ATTRIB_MAX; i++) {
-               if (!nv40->vtxbuf[i].buffer)
-                       continue;
+       for (i = 0; i < nv40->vtxbuf_nr; i++)
                ws->buffer_unmap(ws, nv40->vtxbuf[i].buffer);
-       }
 
        if (idxbuf)
                ws->buffer_unmap(ws, idxbuf);