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