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