nv20_context.c revision c944fb5ffe7cf16154d6395001f43a6c965cab1f
1bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez/* 256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco 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" 2956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez#include "nouveau_class.h" 3056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez#include "nv04_driver.h" 3156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez#include "nv10_driver.h" 32bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nv20_driver.h" 33bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 34a7b8d105a6efe4056633f7129f80aac1f13cc246Francisco Jerezstatic const struct dri_extension nv20_extensions[] = { 35a7b8d105a6efe4056633f7129f80aac1f13cc246Francisco Jerez { "GL_EXT_texture_rectangle", NULL }, 36a7b8d105a6efe4056633f7129f80aac1f13cc246Francisco Jerez { NULL, NULL } 37a7b8d105a6efe4056633f7129f80aac1f13cc246Francisco Jerez}; 38a7b8d105a6efe4056633f7129f80aac1f13cc246Francisco Jerez 3956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerezstatic void 4056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jereznv20_hwctx_init(GLcontext *ctx) 4156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez{ 4256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez struct nouveau_channel *chan = context_chan(ctx); 4356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez struct nouveau_grobj *kelvin = context_eng3d(ctx); 4456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez struct nouveau_hw_state *hw = &to_nouveau_context(ctx)->hw; 4556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez int i; 4656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 4756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_DMA_NOTIFY, 1); 4856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, hw->ntfy->handle); 4956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_DMA_TEXTURE0, 2); 5056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, chan->vram->handle); 5156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, chan->gart->handle); 5256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_DMA_COLOR, 2); 5356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, chan->vram->handle); 5456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, chan->vram->handle); 5556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_DMA_VTXBUF0, 2); 5656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING(chan, chan->vram->handle); 5756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING(chan, chan->gart->handle); 5856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 5956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_DMA_QUERY, 1); 6056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 6156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 6256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_RT_HORIZ, 2); 6356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 6456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 6556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 6656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_CLIP_HORIZ(0), 1); 6756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0xfff << 16 | 0x0); 6856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_CLIP_VERT(0), 1); 6956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0xfff << 16 | 0x0); 7056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 7156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez for (i = 1; i < NV20TCL_VIEWPORT_CLIP_HORIZ__SIZE; i++) { 7256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_CLIP_HORIZ(i), 1); 7356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 7456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_CLIP_VERT(i), 1); 7556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 7656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez } 7756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 7856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_CLIP_MODE, 1); 7956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 8056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 8156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x17e0, 3); 8256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 0.0); 8356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 0.0); 8456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 1.0); 8556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 8656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez if (context_chipset(ctx) >= 0x25) { 8756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_TX_RCOMP, 1); 8856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_TX_RCOMP_LEQUAL | 0xdb0); 8956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez } else { 9056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x1e68, 1); 9156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0x4b800000); /* 16777216.000000 */ 9256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_TX_RCOMP, 1); 9356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_TX_RCOMP_LEQUAL); 9456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez } 9556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 9656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x290, 1); 9756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0x10 << 16 | 1); 9856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x9fc, 1); 9956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 10056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x1d80, 1); 10156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 1); 10256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x9f8, 1); 10356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 4); 10456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x17ec, 3); 10556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 0.0); 10656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 1.0); 10756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 0.0); 10856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 10956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez if (context_chipset(ctx) >= 0x25) { 11056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x1d88, 1); 11156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 3); 11256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 11356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV25TCL_DMA_IN_MEMORY9, 1); 11456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, chan->vram->handle); 11556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV25TCL_DMA_IN_MEMORY8, 1); 11656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, chan->vram->handle); 11756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez } 11856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 11956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_DMA_FENCE, 1); 12056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 12156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 12256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x1e98, 1); 12356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 12456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 12556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_NOTIFY, 1); 12656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 12756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 12856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x120, 3); 12956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 13056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 1); 13156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 2); 13256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 13356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez if (context_chipset(ctx) >= 0x25) { 13456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x022c, 2); 13556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0x280); 13656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0x07d28000); 13756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 13856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x1da4, 1); 13956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 14056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez } 14156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 14256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_RT_HORIZ, 2); 14356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0 << 16 | 0); 14456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0 << 16 | 0); 14556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 14656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_ALPHA_FUNC_ENABLE, 1); 14756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 14856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_ALPHA_FUNC_FUNC, 2); 14956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_ALPHA_FUNC_FUNC_ALWAYS); 15056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 15156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 15256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez for (i = 0; i < NV20TCL_TX_ENABLE__SIZE; i++) { 15356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_TX_ENABLE(i), 1); 15456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 15556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez } 15656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 15756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_TX_SHADER_OP, 1); 15856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 15956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_TX_SHADER_CULL_MODE, 1); 16056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 16156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 16256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_RC_IN_ALPHA(0), 4); 16356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0x30d410d0); 16456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 16556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 16656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 16756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_RC_OUT_RGB(0), 4); 16856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0x00000c00); 16956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 17056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 17156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 17256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_RC_ENABLE, 1); 17356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0x00011101); 17456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_RC_FINAL0, 2); 17556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0x130e0300); 17656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0x0c091c80); 17756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_RC_OUT_ALPHA(0), 4); 17856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0x00000c00); 17956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 18056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 18156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 18256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_RC_IN_RGB(0), 4); 18356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0x20c400c0); 18456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 18556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 18656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 18756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_RC_COLOR0, 2); 18856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 18956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 19056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_RC_CONSTANT_COLOR0(0), 4); 19156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0x035125a0); 19256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 19356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0x40002000); 19456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 19556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 19656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_MULTISAMPLE_CONTROL, 1); 19756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0xffff0000); 19856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_BLEND_FUNC_ENABLE, 1); 19956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 20056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_DITHER_ENABLE, 1); 20156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 20256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_STENCIL_ENABLE, 1); 20356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 20456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_BLEND_FUNC_SRC, 4); 20556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_BLEND_FUNC_SRC_ONE); 20656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_BLEND_FUNC_DST_ZERO); 20756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 20856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_BLEND_EQUATION_FUNC_ADD); 20956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_STENCIL_MASK, 7); 21056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0xff); 21156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_STENCIL_FUNC_FUNC_ALWAYS); 21256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 21356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0xff); 21456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_STENCIL_OP_FAIL_KEEP); 21556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_STENCIL_OP_ZFAIL_KEEP); 21656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_STENCIL_OP_ZPASS_KEEP); 21756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 21856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_COLOR_LOGIC_OP_ENABLE, 2); 21956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 22056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_COLOR_LOGIC_OP_OP_COPY); 22156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x17cc, 1); 22256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 22356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez if (context_chipset(ctx) >= 0x25) { 22456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x1d84, 1); 22556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 1); 22656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez } 22756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_LIGHTING_ENABLE, 1); 22856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 22956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_LIGHT_MODEL, 1); 23056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_LIGHT_MODEL_VIEWER_NONLOCAL); 23156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_SEPARATE_SPECULAR_ENABLE, 1); 23256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 23356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_LIGHT_MODEL_TWO_SIDE_ENABLE, 1); 23456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 23556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_ENABLED_LIGHTS, 1); 23656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 23756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_NORMALIZE_ENABLE, 1); 23856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 23956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_POLYGON_STIPPLE_PATTERN(0), 24056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez NV20TCL_POLYGON_STIPPLE_PATTERN__SIZE); 24156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez for (i = 0; i < NV20TCL_POLYGON_STIPPLE_PATTERN__SIZE; i++) { 24256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING(chan, 0xffffffff); 24356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez } 24456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 24556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_POLYGON_OFFSET_POINT_ENABLE, 3); 24656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 24756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 24856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 24956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_DEPTH_FUNC, 1); 25056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_DEPTH_FUNC_LESS); 25156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_DEPTH_WRITE_ENABLE, 1); 25256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 25356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_DEPTH_TEST_ENABLE, 1); 25456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 25556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_POLYGON_OFFSET_FACTOR, 2); 25656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 0.0); 25756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 0.0); 25856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_DEPTH_UNK17D8, 1); 25956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 1); 26056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez if (context_chipset(ctx) < 0x25) { 26156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x1d84, 1); 26256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 3); 26356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez } 26456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_POINT_SIZE, 1); 26556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez if (context_chipset(ctx) >= 0x25) 26656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 1.0); 26756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez else 26856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 8); 26956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 27056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez if (context_chipset(ctx) >= 0x25) { 27156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_POINT_PARAMETERS_ENABLE, 1); 27256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 27356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, 0x0a1c, 1); 27456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0x800); 27556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez } else { 27656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_POINT_PARAMETERS_ENABLE, 2); 27756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 27856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 27956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez } 28056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 28156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_LINE_WIDTH, 1); 28256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 8); 28356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_LINE_SMOOTH_ENABLE, 1); 28456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 28556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_POLYGON_MODE_FRONT, 2); 28656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_POLYGON_MODE_FRONT_FILL); 28756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_POLYGON_MODE_BACK_FILL); 28856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_CULL_FACE, 2); 28956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_CULL_FACE_BACK); 29056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_FRONT_FACE_CCW); 29156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_POLYGON_SMOOTH_ENABLE, 1); 29256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 29356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_CULL_FACE_ENABLE, 1); 29456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 29556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_SHADE_MODEL, 1); 29656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_SHADE_MODEL_SMOOTH); 29756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_POLYGON_STIPPLE_ENABLE, 1); 29856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 29956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 300c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_TX_GEN_MODE_S(0), 301c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez 4 * NV20TCL_TX_GEN_MODE_S__SIZE); 302c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez for (i=0; i < 4 * NV20TCL_TX_GEN_MODE_S__SIZE; i++) 30356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING(chan, 0); 30456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 30556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_FOG_EQUATION_CONSTANT, 3); 30656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 1.5); 30756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, -0.090168); 30856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 0.0); 30956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_FOG_MODE, 2); 31056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_FOG_MODE_EXP_SIGNED); 31156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_FOG_COORD_FOG); 31256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_FOG_ENABLE, 2); 31356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 31456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 31556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 31656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_ENGINE, 1); 31756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, NV20TCL_ENGINE_FIXED); 31856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 31956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez for (i = 0; i < NV20TCL_TX_MATRIX_ENABLE__SIZE; i++) { 32056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_TX_MATRIX_ENABLE(i), 1); 32156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 32256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez } 32356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 32456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_VTX_ATTR_4F_X(1), 4 * 15); 32556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 1.0); 32656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 0.0); 32756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 0.0); 32856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 1.0); 32956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 0.0); 33056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 0.0); 33156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 1.0); 33256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 1.0); 33356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 1.0); 33456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 1.0); 33556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 1.0); 33656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 1.0); 33756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez for (i = 0; i < 12; i++) { 33856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 0.0); 33956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 0.0); 34056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 0.0); 34156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf(chan, 1.0); 34256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez } 34356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 34456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_EDGEFLAG_ENABLE, 1); 34556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 1); 34656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_COLOR_MASK, 1); 34756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0x00010101); 34856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_CLEAR_VALUE, 1); 34956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RING (chan, 0); 35056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 35156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_DEPTH_RANGE_NEAR, 2); 35256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 0.0); 35356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 16777216.0); 35456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 35556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_TRANSLATE_X, 4); 35656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 0.0); 35756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 0.0); 35856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 0.0); 35956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 16777215.0); 36056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 36156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez BEGIN_RING(chan, kelvin, NV20TCL_VIEWPORT_SCALE_X, 4); 36256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 0.0); 36356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 0.0); 36456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 16777215.0 * 0.5); 36556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez OUT_RINGf (chan, 65535.0); 36656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 36756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez FIRE_RING(chan); 36856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez} 36956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 37056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerezstatic void 37156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jereznv20_context_destroy(GLcontext *ctx) 37256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez{ 37356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez struct nouveau_context *nctx = to_nouveau_context(ctx); 37456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 37556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv04_surface_takedown(ctx); 37656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_render_destroy(ctx); 37756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 37856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nouveau_grobj_free(&nctx->hw.eng3d); 37956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 38056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nouveau_context_deinit(ctx); 38156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez FREE(ctx); 38256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez} 38356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 38456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerezstatic GLcontext * 385bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jereznv20_context_create(struct nouveau_screen *screen, const GLvisual *visual, 386bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez GLcontext *share_ctx) 387bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{ 388bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez struct nouveau_context *nctx; 389bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez GLcontext *ctx; 39056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez unsigned kelvin_class; 39156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez int ret; 392bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 393bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez nctx = CALLOC_STRUCT(nouveau_context); 394bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez if (!nctx) 395bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return NULL; 396bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 397bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez ctx = &nctx->base; 398bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 39956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez if (!nouveau_context_init(ctx, screen, visual, share_ctx)) 40056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez goto fail; 40156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 402a7b8d105a6efe4056633f7129f80aac1f13cc246Francisco Jerez driInitExtensions(ctx, nv20_extensions, GL_FALSE); 403a7b8d105a6efe4056633f7129f80aac1f13cc246Francisco Jerez 40456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez /* GL constants. */ 405bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez ctx->Const.MaxTextureCoordUnits = NV20_TEXTURE_UNITS; 406bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez ctx->Const.MaxTextureImageUnits = NV20_TEXTURE_UNITS; 407bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez ctx->Const.MaxTextureUnits = NV20_TEXTURE_UNITS; 408bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez ctx->Const.MaxTextureMaxAnisotropy = 8; 409bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez ctx->Const.MaxTextureLodBias = 15; 410bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 41156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez /* 2D engine. */ 41256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez ret = nv04_surface_init(ctx); 41356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez if (!ret) 41456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez goto fail; 41556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 41656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez /* 3D engine. */ 41756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez if (context_chipset(ctx) >= 0x25) 41856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez kelvin_class = NV25TCL; 41956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez else 42056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez kelvin_class = NV20TCL; 42156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 42256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez ret = nouveau_grobj_alloc(context_chan(ctx), 0xbeef0001, kelvin_class, 42356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez &nctx->hw.eng3d); 42456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez if (ret) 42556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez goto fail; 42656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 42756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_hwctx_init(ctx); 428bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez nv20_render_init(ctx); 429bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 430bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez return ctx; 431bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez 43256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerezfail: 43356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_context_destroy(ctx); 43456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez return NULL; 435bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez} 43656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez 43756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerezconst struct nouveau_driver nv20_driver = { 43856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez .context_create = nv20_context_create, 43956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez .context_destroy = nv20_context_destroy, 44056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez .surface_copy = nv04_surface_copy, 44156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez .surface_fill = nv04_surface_fill, 44256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez .emit = (nouveau_state_func[]) { 44356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_alpha_func, 44456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_blend_color, 44556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_blend_equation, 44656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_blend_func, 44756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_clip_plane, 44856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_clip_plane, 44956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_clip_plane, 45056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_clip_plane, 45156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_clip_plane, 45256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_clip_plane, 45356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_color_mask, 45456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_color_material, 45556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_cull_face, 45656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_front_face, 45756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_depth, 45856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_dither, 4597269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez nv20_emit_frag, 46056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_framebuffer, 46156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_fog, 46256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_light_enable, 46356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_light_model, 46456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_light_source, 46556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_light_source, 46656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_light_source, 46756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_light_source, 46856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_light_source, 46956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_light_source, 47056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_light_source, 47156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_light_source, 47256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_line_stipple, 47356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_line_mode, 47456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_logic_opcode, 47556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_material_ambient, 47656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_material_ambient, 47756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_material_diffuse, 47856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_material_diffuse, 47956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_material_specular, 48056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_material_specular, 48156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_material_shininess, 48256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_material_shininess, 48356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_modelview, 48456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_point_mode, 48556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_point_parameter, 48656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_polygon_mode, 48756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_polygon_offset, 48856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_polygon_stipple, 48956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_projection, 49056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_render_mode, 49156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_scissor, 49256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_shade_model, 49356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_stencil_func, 49456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_stencil_mask, 49556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv10_emit_stencil_op, 4967269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez nv20_emit_tex_env, 4977269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez nv20_emit_tex_env, 4987269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez nv20_emit_tex_env, 4997269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez nv20_emit_tex_env, 500c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez nv20_emit_tex_gen, 501c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez nv20_emit_tex_gen, 502c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez nv20_emit_tex_gen, 503c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez nv20_emit_tex_gen, 5041a812ab57a71d16e45ca44de7ae0570d2bd46674Francisco Jerez nv20_emit_tex_mat, 5051a812ab57a71d16e45ca44de7ae0570d2bd46674Francisco Jerez nv20_emit_tex_mat, 5061a812ab57a71d16e45ca44de7ae0570d2bd46674Francisco Jerez nv20_emit_tex_mat, 5071a812ab57a71d16e45ca44de7ae0570d2bd46674Francisco Jerez nv20_emit_tex_mat, 50856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_tex_obj, 50956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_tex_obj, 51056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_tex_obj, 51156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_tex_obj, 51256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_viewport, 51356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez nv20_emit_tex_shader 51456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez }, 51556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez .num_emit = NUM_NV20_STATE, 51656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez}; 517