remove final imports.h and imports.c bits
[mesa.git] / src / mesa / drivers / dri / nouveau / nv20_render.c
index de62dd5137e220b6c06187157d0b88bdd07ae652..9a426ccec07cccce1b97278081de3d664c7eb56d 100644 (file)
 
 #include "nouveau_driver.h"
 #include "nouveau_context.h"
-#include "nouveau_class.h"
+#include "nv20_3d.xml.h"
 #include "nv20_driver.h"
 
 #define NUM_VERTEX_ATTRS 16
 
 static void
-nv20_emit_material(struct gl_context *ctx, struct nouveau_array_state *a,
+nv20_emit_material(struct gl_context *ctx, struct nouveau_array *a,
                   const void *v);
 
 /* Vertex attribute format. */
 static struct nouveau_attr_info nv20_vertex_attrs[VERT_ATTRIB_MAX] = {
        [VERT_ATTRIB_POS] = {
                .vbo_index = 0,
-               .imm_method = NV20TCL_VERTEX_POS_4F_X,
+               .imm_method = NV20_3D_VERTEX_POS_4F_X,
                .imm_fields = 4,
        },
        [VERT_ATTRIB_NORMAL] = {
                .vbo_index = 2,
-               .imm_method = NV20TCL_VERTEX_NOR_3F_X,
+               .imm_method = NV20_3D_VERTEX_NOR_3F_X,
                .imm_fields = 3,
        },
        [VERT_ATTRIB_COLOR0] = {
                .vbo_index = 3,
-               .imm_method = NV20TCL_VERTEX_COL_4F_X,
+               .imm_method = NV20_3D_VERTEX_COL_4F,
                .imm_fields = 4,
        },
        [VERT_ATTRIB_COLOR1] = {
                .vbo_index = 4,
-               .imm_method = NV20TCL_VERTEX_COL2_3F_X,
+               .imm_method = NV20_3D_VERTEX_COL2_3F,
                .imm_fields = 3,
        },
        [VERT_ATTRIB_FOG] = {
                .vbo_index = 5,
-               .imm_method = NV20TCL_VERTEX_FOG_1F,
+               .imm_method = NV20_3D_VERTEX_FOG_1F,
                .imm_fields = 1,
        },
        [VERT_ATTRIB_TEX0] = {
                .vbo_index = 9,
-               .imm_method = NV20TCL_VERTEX_TX0_4F_S,
+               .imm_method = NV20_3D_VERTEX_TX0_4F_S,
                .imm_fields = 4,
        },
        [VERT_ATTRIB_TEX1] = {
                .vbo_index = 10,
-               .imm_method = NV20TCL_VERTEX_TX1_4F_S,
+               .imm_method = NV20_3D_VERTEX_TX1_4F_S,
                .imm_fields = 4,
        },
        [VERT_ATTRIB_TEX2] = {
                .vbo_index = 11,
-               .imm_method = NV20TCL_VERTEX_TX2_4F_S,
+               .imm_method = NV20_3D_VERTEX_TX2_4F_S,
                .imm_fields = 4,
        },
        [VERT_ATTRIB_TEX3] = {
                .vbo_index = 12,
-               .imm_method = NV20TCL_VERTEX_TX3_4F_S,
+               .imm_method = NV20_3D_VERTEX_TX3_4F_S,
                .imm_fields = 4,
        },
-       [VERT_ATTRIB_GENERIC0] = {
+       [VERT_ATTRIB_MAT(0)] = {
                .emit = nv20_emit_material,
        },
-       [VERT_ATTRIB_GENERIC1] = {
+       [VERT_ATTRIB_MAT(1)] = {
                .emit = nv20_emit_material,
        },
-       [VERT_ATTRIB_GENERIC2] = {
+       [VERT_ATTRIB_MAT(2)] = {
                .emit = nv20_emit_material,
        },
-       [VERT_ATTRIB_GENERIC3] = {
+       [VERT_ATTRIB_MAT(3)] = {
                .emit = nv20_emit_material,
        },
-       [VERT_ATTRIB_GENERIC4] = {
+       [VERT_ATTRIB_MAT(4)] = {
                .emit = nv20_emit_material,
        },
-       [VERT_ATTRIB_GENERIC5] = {
+       [VERT_ATTRIB_MAT(5)] = {
                .emit = nv20_emit_material,
        },
-       [VERT_ATTRIB_GENERIC6] = {
+       [VERT_ATTRIB_MAT(6)] = {
                .emit = nv20_emit_material,
        },
-       [VERT_ATTRIB_GENERIC7] = {
+       [VERT_ATTRIB_MAT(7)] = {
                .emit = nv20_emit_material,
        },
-       [VERT_ATTRIB_GENERIC8] = {
+       [VERT_ATTRIB_MAT(8)] = {
                .emit = nv20_emit_material,
        },
-       [VERT_ATTRIB_GENERIC9] = {
+       [VERT_ATTRIB_MAT(9)] = {
                .emit = nv20_emit_material,
        },
 };
@@ -119,11 +119,11 @@ get_hw_format(int type)
 {
        switch (type) {
        case GL_FLOAT:
-               return NV20TCL_VTXFMT_TYPE_FLOAT;
+               return NV20_3D_VTXBUF_FMT_TYPE_FLOAT;
        case GL_UNSIGNED_SHORT:
-               return NV20TCL_VTXFMT_TYPE_USHORT;
+               return NV20_3D_VTXBUF_FMT_TYPE_USHORT;
        case GL_UNSIGNED_BYTE:
-               return NV20TCL_VTXFMT_TYPE_UBYTE;
+               return NV20_3D_VTXBUF_FMT_TYPE_UBYTE;
        default:
                assert(0);
        }
@@ -133,13 +133,12 @@ static void
 nv20_render_set_format(struct gl_context *ctx)
 {
        struct nouveau_render_state *render = to_render_state(ctx);
-       struct nouveau_channel *chan = context_chan(ctx);
-       struct nouveau_grobj *kelvin = context_eng3d(ctx);
+       struct nouveau_pushbuf *push = context_push(ctx);
        int i, attr, hw_format;
 
        FOR_EACH_ATTR(render, i, attr) {
                if (attr >= 0) {
-                       struct nouveau_array_state *a = &render->attrs[attr];
+                       struct nouveau_array *a = &render->attrs[attr];
 
                        hw_format = a->stride << 8 |
                                a->fields << 4 |
@@ -147,11 +146,11 @@ nv20_render_set_format(struct gl_context *ctx)
 
                } else {
                        /* Unused attribute. */
-                       hw_format = NV10TCL_VTXFMT_TYPE_FLOAT;
+                       hw_format = NV20_3D_VTXBUF_FMT_TYPE_FLOAT;
                }
 
-               BEGIN_RING(chan, kelvin, NV20TCL_VTXFMT(i), 1);
-               OUT_RING(chan, hw_format);
+               BEGIN_NV04(push, NV20_3D(VTXBUF_FMT(i)), 1);
+               PUSH_DATA (push, hw_format);
        }
 }
 
@@ -159,61 +158,67 @@ static void
 nv20_render_bind_vertices(struct gl_context *ctx)
 {
        struct nouveau_render_state *render = to_render_state(ctx);
-       struct nouveau_bo_context *bctx = context_bctx(ctx, VERTEX);
-       struct nouveau_channel *chan = context_chan(ctx);
-       struct nouveau_grobj *kelvin = context_eng3d(ctx);
+       struct nouveau_pushbuf *push = context_push(ctx);
        int i, attr;
 
        FOR_EACH_BOUND_ATTR(render, i, attr) {
-               struct nouveau_array_state *a = &render->attrs[attr];
-
-               nouveau_bo_mark(bctx, kelvin,
-                               NV20TCL_VTXBUF_ADDRESS(i),
-                               a->bo, a->offset, 0,
-                               0, NV20TCL_VTXBUF_ADDRESS_DMA1,
-                               NOUVEAU_BO_LOW | NOUVEAU_BO_OR |
-                               NOUVEAU_BO_GART | NOUVEAU_BO_RD);
+               struct nouveau_array *a = &render->attrs[attr];
+
+               BEGIN_NV04(push, NV20_3D(VTXBUF_OFFSET(i)), 1);
+               PUSH_MTHD (push, NV20_3D(VTXBUF_OFFSET(i)), BUFCTX_VTX,
+                                a->bo, a->offset, NOUVEAU_BO_LOW |
+                                NOUVEAU_BO_OR | NOUVEAU_BO_GART |
+                                NOUVEAU_BO_RD, 0,
+                                NV20_3D_VTXBUF_OFFSET_DMA1);
        }
+}
 
-       BEGIN_RING(chan, kelvin, NV20TCL_VTX_CACHE_INVALIDATE, 1);
-       OUT_RING(chan, 0);
+static void
+nv20_render_release_vertices(struct gl_context *ctx)
+{
+       PUSH_RESET(context_push(ctx), BUFCTX_VTX);
 }
 
 /* Vertex array rendering defs. */
-#define RENDER_LOCALS(ctx)                                     \
-       struct nouveau_grobj *kelvin = context_eng3d(ctx)
+#define RENDER_LOCALS(ctx)
+
+#define BATCH_VALIDATE()                                               \
+       BEGIN_NV04(push, NV20_3D(VTXBUF_VALIDATE), 1);  \
+       PUSH_DATA (push, 0)
 
 #define BATCH_BEGIN(prim)                                      \
-       BEGIN_RING(chan, kelvin, NV20TCL_VERTEX_BEGIN_END, 1);  \
-       OUT_RING(chan, prim)
+       BEGIN_NV04(push, NV20_3D(VERTEX_BEGIN_END), 1); \
+       PUSH_DATA (push, prim)
 #define BATCH_END()                                            \
-       BEGIN_RING(chan, kelvin, NV20TCL_VERTEX_BEGIN_END, 1);  \
-       OUT_RING(chan, 0)
+       BEGIN_NV04(push, NV20_3D(VERTEX_BEGIN_END), 1); \
+       PUSH_DATA (push, 0)
 
 #define MAX_PACKET 0x400
 
 #define MAX_OUT_L 0x100
 #define BATCH_PACKET_L(n)                                              \
-       BEGIN_RING_NI(chan, kelvin, NV20TCL_VB_VERTEX_BATCH, n)
+       BEGIN_NI04(push, NV20_3D(VTXBUF_BATCH), n)
 #define BATCH_OUT_L(i, n)                      \
-       OUT_RING(chan, ((n) - 1) << 24 | (i))
+       PUSH_DATA (push, ((n) - 1) << 24 | (i))
 
 #define MAX_OUT_I16 0x2
 #define BATCH_PACKET_I16(n)                                    \
-       BEGIN_RING_NI(chan, kelvin, NV20TCL_VB_ELEMENT_U16, n)
+       BEGIN_NI04(push, NV20_3D(VTXBUF_ELEMENT_U16), n)
 #define BATCH_OUT_I16(i0, i1)                  \
-       OUT_RING(chan, (i1) << 16 | (i0))
+       PUSH_DATA (push, (i1) << 16 | (i0))
 
 #define MAX_OUT_I32 0x1
 #define BATCH_PACKET_I32(n)                                    \
-       BEGIN_RING_NI(chan, kelvin, NV20TCL_VB_ELEMENT_U32, n)
+       BEGIN_NI04(push, NV20_3D(VTXBUF_ELEMENT_U32), n)
 #define BATCH_OUT_I32(i)                       \
-       OUT_RING(chan, i)
+       PUSH_DATA (push, i)
 
 #define IMM_PACKET(m, n)                       \
-       BEGIN_RING(chan, kelvin, m, n)
+       BEGIN_NV04(push, SUBC_3D(m), n)
 #define IMM_OUT(x)                             \
-       OUT_RINGf(chan, x)
+       PUSH_DATAf(push, x)
 
 #define TAG(x) nv20_##x
 #include "nouveau_render_t.c"
+#include "nouveau_vbo_t.c"
+#include "nouveau_swtnl_t.c"