1bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez/*
2bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * Copyright (C) 2009-2010 Francisco Jerez.
3bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * All Rights Reserved.
4bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez *
5bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * Permission is hereby granted, free of charge, to any person obtaining
6bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * a copy of this software and associated documentation files (the
7bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * "Software"), to deal in the Software without restriction, including
8bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * without limitation the rights to use, copy, modify, merge, publish,
9bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * distribute, sublicense, and/or sell copies of the Software, and to
10bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * permit persons to whom the Software is furnished to do so, subject to
11bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * the following conditions:
12bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez *
13bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * The above copyright notice and this permission notice (including the
14bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * next paragraph) shall be included in all copies or substantial
15bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * portions of the Software.
16bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez *
17bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
21bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez *
25bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez */
26bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
27bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nouveau_driver.h"
28bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nouveau_context.h"
2969f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný#include "nv20_3d.xml.h"
30bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nv20_driver.h"
31bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
32bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define NUM_VERTEX_ATTRS 16
33bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
34bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
3557382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jereznv20_emit_material(struct gl_context *ctx, struct nouveau_array *a,
36bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		   const void *v);
37bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
38bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez/* Vertex attribute format. */
39bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic struct nouveau_attr_info nv20_vertex_attrs[VERT_ATTRIB_MAX] = {
40bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_POS] = {
41bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.vbo_index = 0,
4269f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný		.imm_method = NV20_3D_VERTEX_POS_4F_X,
43bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.imm_fields = 4,
44bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
45bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_NORMAL] = {
46bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.vbo_index = 2,
4769f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný		.imm_method = NV20_3D_VERTEX_NOR_3F_X,
48bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.imm_fields = 3,
49bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
50bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_COLOR0] = {
51bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.vbo_index = 3,
5269f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný		.imm_method = NV20_3D_VERTEX_COL_4F,
53bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.imm_fields = 4,
54bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
55bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_COLOR1] = {
56bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.vbo_index = 4,
5769f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný		.imm_method = NV20_3D_VERTEX_COL2_3F,
58bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.imm_fields = 3,
59bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
60bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_FOG] = {
61bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.vbo_index = 5,
6269f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný		.imm_method = NV20_3D_VERTEX_FOG_1F,
63bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.imm_fields = 1,
64bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
65bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_TEX0] = {
66bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.vbo_index = 9,
6769f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný		.imm_method = NV20_3D_VERTEX_TX0_4F_S,
68bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.imm_fields = 4,
69bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
70bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_TEX1] = {
71bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.vbo_index = 10,
7269f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný		.imm_method = NV20_3D_VERTEX_TX1_4F_S,
73bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.imm_fields = 4,
74bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
75bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_TEX2] = {
76bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.vbo_index = 11,
7769f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný		.imm_method = NV20_3D_VERTEX_TX2_4F_S,
78bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.imm_fields = 4,
79bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
80bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_TEX3] = {
81bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.vbo_index = 12,
8269f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný		.imm_method = NV20_3D_VERTEX_TX3_4F_S,
83bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.imm_fields = 4,
84bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
85bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_GENERIC0] = {
86bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.emit = nv20_emit_material,
87bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
88bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_GENERIC1] = {
89bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.emit = nv20_emit_material,
90bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
91bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_GENERIC2] = {
92bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.emit = nv20_emit_material,
93bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
94bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_GENERIC3] = {
95bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.emit = nv20_emit_material,
96bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
97bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_GENERIC4] = {
98bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.emit = nv20_emit_material,
99bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
100bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_GENERIC5] = {
101bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.emit = nv20_emit_material,
102bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
103bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_GENERIC6] = {
104bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.emit = nv20_emit_material,
105bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
106bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_GENERIC7] = {
107bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.emit = nv20_emit_material,
108bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
109bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_GENERIC8] = {
110bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.emit = nv20_emit_material,
111bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
112bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	[VERT_ATTRIB_GENERIC9] = {
113bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		.emit = nv20_emit_material,
114bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	},
115bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez};
116bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
117bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic int
118bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezget_hw_format(int type)
119bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
120bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	switch (type) {
121bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_FLOAT:
12269f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný		return NV20_3D_VTXBUF_FMT_TYPE_FLOAT;
123bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_UNSIGNED_SHORT:
12469f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný		return NV20_3D_VTXBUF_FMT_TYPE_USHORT;
125bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	case GL_UNSIGNED_BYTE:
12669f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný		return NV20_3D_VTXBUF_FMT_TYPE_UBYTE;
127bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	default:
128bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		assert(0);
129bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	}
130bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
131bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
132bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
133f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnv20_render_set_format(struct gl_context *ctx)
134bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
135bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	struct nouveau_render_state *render = to_render_state(ctx);
1362e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	struct nouveau_pushbuf *push = context_push(ctx);
1379d1f1fcf136e8f5f427ae203128ff641cc9e7197Francisco Jerez	int i, attr, hw_format;
138bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
1399d1f1fcf136e8f5f427ae203128ff641cc9e7197Francisco Jerez	FOR_EACH_ATTR(render, i, attr) {
140bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		if (attr >= 0) {
14157382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez			struct nouveau_array *a = &render->attrs[attr];
142bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
143bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez			hw_format = a->stride << 8 |
144bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez				a->fields << 4 |
145bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez				get_hw_format(a->type);
146bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
147bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		} else {
148bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez			/* Unused attribute. */
14969f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný			hw_format = NV20_3D_VTXBUF_FMT_TYPE_FLOAT;
150bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		}
151bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
1522e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, NV20_3D(VTXBUF_FMT(i)), 1);
1532e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, hw_format);
154bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	}
155bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
156bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
157bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void
158f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnv20_render_bind_vertices(struct gl_context *ctx)
159bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
160bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	struct nouveau_render_state *render = to_render_state(ctx);
1612e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	struct nouveau_pushbuf *push = context_push(ctx);
1629d1f1fcf136e8f5f427ae203128ff641cc9e7197Francisco Jerez	int i, attr;
163bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
1649d1f1fcf136e8f5f427ae203128ff641cc9e7197Francisco Jerez	FOR_EACH_BOUND_ATTR(render, i, attr) {
16557382e71ef892a36ca2171fe8758aba6c9c885e6Francisco Jerez		struct nouveau_array *a = &render->attrs[attr];
166bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
1672e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, NV20_3D(VTXBUF_OFFSET(i)), 1);
1682e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_MTHD (push, NV20_3D(VTXBUF_OFFSET(i)), BUFCTX_VTX,
1692e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs				 a->bo, a->offset, NOUVEAU_BO_LOW |
1702e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs				 NOUVEAU_BO_OR | NOUVEAU_BO_GART |
1712e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs				 NOUVEAU_BO_RD, 0,
1722e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs				 NV20_3D_VTXBUF_OFFSET_DMA1);
173bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	}
174bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
175bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
1762e47d01c9e5325906cf3bb979279599991c6328eBen Skeggsstatic void
1772e47d01c9e5325906cf3bb979279599991c6328eBen Skeggsnv20_render_release_vertices(struct gl_context *ctx)
1782e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs{
1792e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_RESET(context_push(ctx), BUFCTX_VTX);
1802e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs}
1812e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs
182bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez/* Vertex array rendering defs. */
1832e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs#define RENDER_LOCALS(ctx)
184bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
185e89af209261e51988b99d954d09f2cbc59e55358Francisco Jerez#define BATCH_VALIDATE()						\
1862e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(VTXBUF_VALIDATE), 1);	\
1872e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0)
188e89af209261e51988b99d954d09f2cbc59e55358Francisco Jerez
189bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_BEGIN(prim)					\
1902e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(VERTEX_BEGIN_END), 1);	\
1912e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, prim)
192bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_END()						\
1932e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(VERTEX_BEGIN_END), 1);	\
1942e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0)
195bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
196bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define MAX_PACKET 0x400
197bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
198bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define MAX_OUT_L 0x100
199bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_PACKET_L(n)						\
2002e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NI04(push, NV20_3D(VTXBUF_BATCH), n)
201bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_OUT_L(i, n)			\
2022e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, ((n) - 1) << 24 | (i))
203bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
204bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define MAX_OUT_I16 0x2
205bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_PACKET_I16(n)					\
2062e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NI04(push, NV20_3D(VTXBUF_ELEMENT_U16), n)
207bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_OUT_I16(i0, i1)			\
2082e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, (i1) << 16 | (i0))
209bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
210bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define MAX_OUT_I32 0x1
211bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_PACKET_I32(n)					\
2122e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NI04(push, NV20_3D(VTXBUF_ELEMENT_U32), n)
213bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_OUT_I32(i)			\
2142e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, i)
215bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
216bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define IMM_PACKET(m, n)			\
2172e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, SUBC_3D(m), n)
218bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define IMM_OUT(x)				\
2192e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, x)
220bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
221bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define TAG(x) nv20_##x
222bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nouveau_render_t.c"
223cdb38b5d3d1b93a90a91ad06c0f03efdfde6b525Francisco Jerez#include "nouveau_vbo_t.c"
224cdb38b5d3d1b93a90a91ad06c0f03efdfde6b525Francisco Jerez#include "nouveau_swtnl_t.c"
225