nv20_render.c revision f9995b30756140724f41daf963fa06167912be7f
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" 29bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nouveau_class.h" 30bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nv20_driver.h" 31bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 32bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define NUM_VERTEX_ATTRS 16 33bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 34bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void 35f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnv20_emit_material(struct gl_context *ctx, struct nouveau_array_state *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, 42bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_method = NV20TCL_VERTEX_POS_4F_X, 43bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_fields = 4, 44bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez }, 45bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez [VERT_ATTRIB_NORMAL] = { 46bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .vbo_index = 2, 47bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_method = NV20TCL_VERTEX_NOR_3F_X, 48bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_fields = 3, 49bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez }, 50bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez [VERT_ATTRIB_COLOR0] = { 51bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .vbo_index = 3, 52bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_method = NV20TCL_VERTEX_COL_4F_X, 53bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_fields = 4, 54bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez }, 55bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez [VERT_ATTRIB_COLOR1] = { 56bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .vbo_index = 4, 57bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_method = NV20TCL_VERTEX_COL2_3F_X, 58bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_fields = 3, 59bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez }, 60bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez [VERT_ATTRIB_FOG] = { 61bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .vbo_index = 5, 62bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_method = NV20TCL_VERTEX_FOG_1F, 63bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_fields = 1, 64bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez }, 65bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez [VERT_ATTRIB_TEX0] = { 66bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .vbo_index = 9, 67bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_method = NV20TCL_VERTEX_TX0_4F_S, 68bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_fields = 4, 69bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez }, 70bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez [VERT_ATTRIB_TEX1] = { 71bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .vbo_index = 10, 72bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_method = NV20TCL_VERTEX_TX1_4F_S, 73bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_fields = 4, 74bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez }, 75bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez [VERT_ATTRIB_TEX2] = { 76bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .vbo_index = 11, 77bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_method = NV20TCL_VERTEX_TX2_4F_S, 78bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_fields = 4, 79bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez }, 80bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez [VERT_ATTRIB_TEX3] = { 81bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .vbo_index = 12, 82bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez .imm_method = NV20TCL_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: 122bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return NV20TCL_VTXFMT_TYPE_FLOAT; 123bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez case GL_UNSIGNED_SHORT: 124bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return NV20TCL_VTXFMT_TYPE_USHORT; 125bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez case GL_UNSIGNED_BYTE: 126bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return NV20TCL_VTXFMT_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); 136bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez struct nouveau_channel *chan = context_chan(ctx); 137bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez struct nouveau_grobj *kelvin = context_eng3d(ctx); 138bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez int i, hw_format; 139bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 140bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez for (i = 0; i < NUM_VERTEX_ATTRS; i++) { 141bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez int attr = render->map[i]; 142bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 143bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez if (attr >= 0) { 144bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez struct nouveau_array_state *a = &render->attrs[attr]; 145bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 146bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez hw_format = a->stride << 8 | 147bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez a->fields << 4 | 148bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez get_hw_format(a->type); 149bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 150bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez } else { 151bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez /* Unused attribute. */ 152bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez hw_format = NV10TCL_VTXFMT_TYPE_FLOAT; 153bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez } 154bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 155bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_VTXFMT(i), 1); 156bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez OUT_RING(chan, hw_format); 157bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez } 158bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 159bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 160bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerezstatic void 161f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnv20_render_bind_vertices(struct gl_context *ctx) 162bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 163bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez struct nouveau_render_state *render = to_render_state(ctx); 164bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez struct nouveau_bo_context *bctx = context_bctx(ctx, VERTEX); 165bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez struct nouveau_channel *chan = context_chan(ctx); 166bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez struct nouveau_grobj *kelvin = context_eng3d(ctx); 167bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez int i; 168bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 169bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez for (i = 0; i < NUM_VERTEX_ATTRS; i++) { 170bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez int attr = render->map[i]; 171bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 172bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez if (attr >= 0) { 173bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez struct nouveau_array_state *a = &render->attrs[attr]; 174bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 175bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez nouveau_bo_mark(bctx, kelvin, 176bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez NV20TCL_VTXBUF_ADDRESS(i), 177bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez a->bo, a->offset, 0, 178bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 0, NV20TCL_VTXBUF_ADDRESS_DMA1, 179bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez NOUVEAU_BO_LOW | NOUVEAU_BO_OR | 180bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez NOUVEAU_BO_GART | NOUVEAU_BO_RD); 181bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez } 182bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez } 183bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 184bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_VTX_CACHE_INVALIDATE, 1); 185bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez OUT_RING(chan, 0); 186bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 187bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 188bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez/* Vertex array rendering defs. */ 189bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define RENDER_LOCALS(ctx) \ 190bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez struct nouveau_grobj *kelvin = context_eng3d(ctx) 191bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 192bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_BEGIN(prim) \ 193bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_VERTEX_BEGIN_END, 1); \ 19435a1893fd1993932a428f5f83051383d51c8135eFrancisco Jerez OUT_RING(chan, prim) 195bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_END() \ 196bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_VERTEX_BEGIN_END, 1); \ 19735a1893fd1993932a428f5f83051383d51c8135eFrancisco Jerez OUT_RING(chan, 0) 198bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 199bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define MAX_PACKET 0x400 200bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 201bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define MAX_OUT_L 0x100 202bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_PACKET_L(n) \ 20335a1893fd1993932a428f5f83051383d51c8135eFrancisco Jerez BEGIN_RING_NI(chan, kelvin, NV20TCL_VB_VERTEX_BATCH, n) 204bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_OUT_L(i, n) \ 20535a1893fd1993932a428f5f83051383d51c8135eFrancisco Jerez OUT_RING(chan, ((n) - 1) << 24 | (i)) 206bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 207bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define MAX_OUT_I16 0x2 208bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_PACKET_I16(n) \ 20935a1893fd1993932a428f5f83051383d51c8135eFrancisco Jerez BEGIN_RING_NI(chan, kelvin, NV20TCL_VB_ELEMENT_U16, n) 210bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_OUT_I16(i0, i1) \ 21135a1893fd1993932a428f5f83051383d51c8135eFrancisco Jerez OUT_RING(chan, (i1) << 16 | (i0)) 212bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 213bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define MAX_OUT_I32 0x1 214bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_PACKET_I32(n) \ 21535a1893fd1993932a428f5f83051383d51c8135eFrancisco Jerez BEGIN_RING_NI(chan, kelvin, NV20TCL_VB_ELEMENT_U32, n) 216bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define BATCH_OUT_I32(i) \ 21735a1893fd1993932a428f5f83051383d51c8135eFrancisco Jerez OUT_RING(chan, i) 218bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 219bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define IMM_PACKET(m, n) \ 22035a1893fd1993932a428f5f83051383d51c8135eFrancisco Jerez BEGIN_RING(chan, kelvin, m, n) 221bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define IMM_OUT(x) \ 22235a1893fd1993932a428f5f83051383d51c8135eFrancisco Jerez OUT_RINGf(chan, x) 223bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 224bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#define TAG(x) nv20_##x 225bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nouveau_render_t.c" 226