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
278a99ec8e05ef541c586c2f8b427220d036589870Ian Romanick#include <stdbool.h>
28bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nouveau_driver.h"
29bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nouveau_context.h"
30920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez#include "nouveau_fbo.h"
31920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez#include "nouveau_util.h"
3269f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný#include "nv_object.xml.h"
3369f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný#include "nv20_3d.xml.h"
3456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez#include "nv04_driver.h"
3556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez#include "nv10_driver.h"
36bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez#include "nv20_driver.h"
37bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
3856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerezstatic void
39920481d38751957ec24de323ae8f15a6aec334a5Francisco Jereznv20_clear(struct gl_context *ctx, GLbitfield buffers)
40920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez{
412e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	struct nouveau_context *nctx = to_nouveau_context(ctx);
422e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	struct nouveau_pushbuf *push = context_push(ctx);
43920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez	struct gl_framebuffer *fb = ctx->DrawBuffer;
44920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez	uint32_t clear = 0;
45920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez
46920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez	nouveau_validate_framebuffer(ctx);
47920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez
482e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	nouveau_pushbuf_bufctx(push, nctx->hw.bufctx);
492e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	if (nouveau_pushbuf_validate(push)) {
502e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		nouveau_pushbuf_bufctx(push, NULL);
512e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		return;
522e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	}
532e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs
54920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez	if (buffers & BUFFER_BITS_COLOR) {
55920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez		struct nouveau_surface *s = &to_nouveau_renderbuffer(
56920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez			fb->_ColorDrawBuffers[0])->surface;
57920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez
58920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez		if (ctx->Color.ColorMask[0][RCOMP])
5969f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný			clear |= NV20_3D_CLEAR_BUFFERS_COLOR_R;
60920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez		if (ctx->Color.ColorMask[0][GCOMP])
6169f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný			clear |= NV20_3D_CLEAR_BUFFERS_COLOR_G;
62920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez		if (ctx->Color.ColorMask[0][BCOMP])
6369f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný			clear |= NV20_3D_CLEAR_BUFFERS_COLOR_B;
64920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez		if (ctx->Color.ColorMask[0][ACOMP])
6569f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný			clear |= NV20_3D_CLEAR_BUFFERS_COLOR_A;
66920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez
672e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, NV20_3D(CLEAR_VALUE), 1);
682e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, pack_rgba_clamp_f(s->format, ctx->Color.ClearColor.f));
69920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez
70920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez		buffers &= ~BUFFER_BITS_COLOR;
71920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez	}
72920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez
73920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez	if (buffers & (BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL)) {
74920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez		struct nouveau_surface *s = &to_nouveau_renderbuffer(
75a782db5570a45008f153396070eae153305a7953Brian Paul			fb->Attachment[BUFFER_DEPTH].Renderbuffer)->surface;
76920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez
77920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez		if (buffers & BUFFER_BIT_DEPTH && ctx->Depth.Mask)
7869f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný			clear |= NV20_3D_CLEAR_BUFFERS_DEPTH;
79920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez		if (buffers & BUFFER_BIT_STENCIL && ctx->Stencil.WriteMask[0])
8069f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný			clear |= NV20_3D_CLEAR_BUFFERS_STENCIL;
81920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez
822e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, NV20_3D(CLEAR_DEPTH_VALUE), 1);
832e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, pack_zs_f(s->format, ctx->Depth.Clear,
84920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez					 ctx->Stencil.Clear));
85920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez
86920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez		buffers &= ~(BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL);
87920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez	}
88920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez
892e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(CLEAR_BUFFERS), 1);
902e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, clear);
91920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez
922e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	nouveau_pushbuf_bufctx(push, NULL);
93920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez	nouveau_clear(ctx, buffers);
94920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez}
95920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez
96920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerezstatic void
97f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnv20_hwctx_init(struct gl_context *ctx)
9856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez{
992e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	struct nouveau_pushbuf *push = context_push(ctx);
10056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	struct nouveau_hw_state *hw = &to_nouveau_context(ctx)->hw;
1012e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	struct nv04_fifo *fifo = hw->chan->data;
10256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	int i;
10356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
1042e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV01_SUBC(3D, OBJECT), 1);
1052e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, hw->eng3d->handle);
1062e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(DMA_NOTIFY), 1);
1072e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, hw->ntfy->handle);
1082e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(DMA_TEXTURE0), 2);
1092e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, fifo->vram);
1102e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, fifo->gart);
1112e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(DMA_COLOR), 2);
1122e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, fifo->vram);
1132e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, fifo->vram);
1142e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(DMA_VTXBUF0), 2);
1152e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, fifo->vram);
1162e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, fifo->gart);
1172e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs
1182e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(DMA_QUERY), 1);
1192e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
1202e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs
1212e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(RT_HORIZ), 2);
1222e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
1232e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
1242e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs
1252e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(VIEWPORT_CLIP_HORIZ(0)), 1);
1262e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0xfff << 16 | 0x0);
1272e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(VIEWPORT_CLIP_VERT(0)), 1);
1282e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0xfff << 16 | 0x0);
12956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
13069f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný	for (i = 1; i < NV20_3D_VIEWPORT_CLIP_HORIZ__LEN; i++) {
1312e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, NV20_3D(VIEWPORT_CLIP_HORIZ(i)), 1);
1322e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 0);
1332e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, NV20_3D(VIEWPORT_CLIP_VERT(i)), 1);
1342e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 0);
13556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	}
13656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
1372e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(VIEWPORT_CLIP_MODE), 1);
1382e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
13956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
1402e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, SUBC_3D(0x17e0), 3);
1412e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
1422e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
1432e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 1.0);
14456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
14556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	if (context_chipset(ctx) >= 0x25) {
1462e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, NV20_3D(TEX_RCOMP), 1);
1472e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, NV20_3D_TEX_RCOMP_LEQUAL | 0xdb0);
14856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	} else {
1492e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, SUBC_3D(0x1e68), 1);
1502e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 0x4b800000); /* 16777216.000000 */
1512e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, NV20_3D(TEX_RCOMP), 1);
1522e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, NV20_3D_TEX_RCOMP_LEQUAL);
15356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	}
15456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
1552e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, SUBC_3D(0x290), 1);
1562e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0x10 << 16 | 1);
1572e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, SUBC_3D(0x9fc), 1);
1582e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
1592e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, SUBC_3D(0x1d80), 1);
1602e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 1);
1612e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, SUBC_3D(0x9f8), 1);
1622e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 4);
1632e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, SUBC_3D(0x17ec), 3);
1642e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
1652e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 1.0);
1662e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
16756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
16856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	if (context_chipset(ctx) >= 0x25) {
1692e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, SUBC_3D(0x1d88), 1);
1702e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 3);
17156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
1722e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, NV25_3D(DMA_HIERZ), 1);
1732e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, fifo->vram);
1742e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, NV25_3D(UNK01AC), 1);
1752e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, fifo->vram);
17656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	}
17756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
1782e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(DMA_FENCE), 1);
1792e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
18056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
1812e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, SUBC_3D(0x1e98), 1);
1822e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
18356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
1842e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV04_GRAPH(3D, NOTIFY), 1);
1852e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
18656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
1872e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, SUBC_3D(0x120), 3);
1882e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
1892e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 1);
1902e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 2);
19156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
19256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	if (context_chipset(ctx) >= 0x25) {
1932e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, SUBC_3D(0x1da4), 1);
1942e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 0);
19556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	}
19656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
1972e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(RT_HORIZ), 2);
1982e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0 << 16 | 0);
1992e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0 << 16 | 0);
20056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
2012e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(ALPHA_FUNC_ENABLE), 1);
2022e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2032e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(ALPHA_FUNC_FUNC), 2);
2042e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_ALPHA_FUNC_FUNC_ALWAYS);
2052e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
20656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
20769f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný	for (i = 0; i < NV20_3D_TEX__LEN; i++) {
2082e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, NV20_3D(TEX_ENABLE(i)), 1);
2092e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 0);
21056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	}
21156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
2122e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(TEX_SHADER_OP), 1);
2132e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2142e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(TEX_SHADER_CULL_MODE), 1);
2152e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2162e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs
2172e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(RC_IN_ALPHA(0)), 4);
2182e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0x30d410d0);
2192e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2202e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2212e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2222e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(RC_OUT_RGB(0)), 4);
2232e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0x00000c00);
2242e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2252e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2262e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2272e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(RC_ENABLE), 1);
2282e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0x00011101);
2292e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(RC_FINAL0), 2);
2302e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0x130e0300);
2312e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0x0c091c80);
2322e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(RC_OUT_ALPHA(0)), 4);
2332e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0x00000c00);
2342e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2352e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2362e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2372e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(RC_IN_RGB(0)), 4);
2382e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0x20c400c0);
2392e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2402e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2412e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2422e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(RC_COLOR0), 2);
2432e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2442e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2452e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(RC_CONSTANT_COLOR0(0)), 4);
2462e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0x035125a0);
2472e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2482e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0x40002000);
2492e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2502e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs
2512e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(MULTISAMPLE_CONTROL), 1);
2522e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0xffff0000);
2532e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(BLEND_FUNC_ENABLE), 1);
2542e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2552e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(DITHER_ENABLE), 1);
2562e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2572e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(STENCIL_ENABLE), 1);
2582e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2592e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(BLEND_FUNC_SRC), 4);
2602e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_BLEND_FUNC_SRC_ONE);
2612e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_BLEND_FUNC_DST_ZERO);
2622e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2632e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_BLEND_EQUATION_FUNC_ADD);
2642e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(STENCIL_MASK), 7);
2652e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0xff);
2662e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_STENCIL_FUNC_FUNC_ALWAYS);
2672e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2682e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0xff);
2692e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_STENCIL_OP_FAIL_KEEP);
2702e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_STENCIL_OP_ZFAIL_KEEP);
2712e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_STENCIL_OP_ZPASS_KEEP);
2722e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs
2732e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(COLOR_LOGIC_OP_ENABLE), 2);
2742e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2752e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_COLOR_LOGIC_OP_OP_COPY);
2762e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, SUBC_3D(0x17cc), 1);
2772e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
27856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	if (context_chipset(ctx) >= 0x25) {
2792e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, SUBC_3D(0x1d84), 1);
2802e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 1);
28156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	}
2822e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(LIGHTING_ENABLE), 1);
2832e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2842e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(LIGHT_MODEL), 1);
2852e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_LIGHT_MODEL_VIEWER_NONLOCAL);
2862e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(SEPARATE_SPECULAR_ENABLE), 1);
2872e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2882e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(LIGHT_MODEL_TWO_SIDE_ENABLE), 1);
2892e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2902e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(ENABLED_LIGHTS), 1);
2912e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2922e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(NORMALIZE_ENABLE), 1);
2932e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
2942e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(POLYGON_STIPPLE_PATTERN(0)),
29569f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný		   NV20_3D_POLYGON_STIPPLE_PATTERN__LEN);
29669f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný	for (i = 0; i < NV20_3D_POLYGON_STIPPLE_PATTERN__LEN; i++) {
2972e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 0xffffffff);
29856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	}
29956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
3002e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(POLYGON_OFFSET_POINT_ENABLE), 3);
3012e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
3022e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
3032e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
3042e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(DEPTH_FUNC), 1);
3052e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_DEPTH_FUNC_LESS);
3062e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(DEPTH_WRITE_ENABLE), 1);
3072e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
3082e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(DEPTH_TEST_ENABLE), 1);
3092e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
3102e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(POLYGON_OFFSET_FACTOR), 2);
3112e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
3122e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
3132e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(DEPTH_CLAMP), 1);
3142e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 1);
31556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	if (context_chipset(ctx) < 0x25) {
3162e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, SUBC_3D(0x1d84), 1);
3172e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 3);
31856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	}
3192e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(POINT_SIZE), 1);
32056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	if (context_chipset(ctx) >= 0x25)
3212e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATAf(push, 1.0);
32256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	else
3232e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 8);
32456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
32556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	if (context_chipset(ctx) >= 0x25) {
3262e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, NV20_3D(POINT_PARAMETERS_ENABLE), 1);
3272e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 0);
3282e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, SUBC_3D(0x0a1c), 1);
3292e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 0x800);
33056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	} else {
3312e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, NV20_3D(POINT_PARAMETERS_ENABLE), 2);
3322e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 0);
3332e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 0);
33456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	}
33556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
3362e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(LINE_WIDTH), 1);
3372e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 8);
3382e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(LINE_SMOOTH_ENABLE), 1);
3392e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
3402e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(POLYGON_MODE_FRONT), 2);
3412e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_POLYGON_MODE_FRONT_FILL);
3422e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_POLYGON_MODE_BACK_FILL);
3432e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(CULL_FACE), 2);
3442e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_CULL_FACE_BACK);
3452e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_FRONT_FACE_CCW);
3462e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(POLYGON_SMOOTH_ENABLE), 1);
3472e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
3482e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(CULL_FACE_ENABLE), 1);
3492e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
3502e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(SHADE_MODEL), 1);
3512e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_SHADE_MODEL_SMOOTH);
3522e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(POLYGON_STIPPLE_ENABLE), 1);
3532e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
3542e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs
3552e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(TEX_GEN_MODE(0,0)),
35669f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný		   4 * NV20_3D_TEX_GEN_MODE__ESIZE);
35769f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný	for (i=0; i < 4 * NV20_3D_TEX_GEN_MODE__LEN; i++)
3582e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 0);
3592e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs
3602e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(FOG_COEFF(0)), 3);
3612e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 1.5);
3622e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, -0.090168);
3632e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
3642e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(FOG_MODE), 2);
3652e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_FOG_MODE_EXP_SIGNED);
3662e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_FOG_COORD_FOG);
3672e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(FOG_ENABLE), 2);
3682e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
3692e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
3702e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs
3712e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(ENGINE), 1);
3722e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, NV20_3D_ENGINE_FIXED);
37356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
37469f54d2a7e06210f28b46d20f74a906d9750a36eViktor Novotný	for (i = 0; i < NV20_3D_TEX_MATRIX_ENABLE__LEN; i++) {
3752e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		BEGIN_NV04(push, NV20_3D(TEX_MATRIX_ENABLE(i)), 1);
3762e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATA (push, 0);
37756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	}
37856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
3792e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(VERTEX_ATTR_4F_X(1)), 4 * 15);
3802e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 1.0);
3812e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
3822e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
3832e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 1.0);
3842e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
3852e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
3862e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 1.0);
3872e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 1.0);
3882e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 1.0);
3892e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 1.0);
3902e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 1.0);
3912e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 1.0);
39256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	for (i = 0; i < 12; i++) {
3932e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATAf(push, 0.0);
3942e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATAf(push, 0.0);
3952e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATAf(push, 0.0);
3962e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		PUSH_DATAf(push, 1.0);
39756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	}
39856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
3992e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(EDGEFLAG_ENABLE), 1);
4002e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 1);
4012e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(COLOR_MASK), 1);
4022e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0x00010101);
4032e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(CLEAR_VALUE), 1);
4042e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATA (push, 0);
4052e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs
4062e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(DEPTH_RANGE_NEAR), 2);
4072e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
4082e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 16777216.0);
4092e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs
4102e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(VIEWPORT_TRANSLATE_X), 4);
4112e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
4122e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
4132e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
4142e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 16777215.0);
4152e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs
4162e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	BEGIN_NV04(push, NV20_3D(VIEWPORT_SCALE_X), 4);
4172e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
4182e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 0.0);
4192e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 16777215.0 * 0.5);
4202e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_DATAf(push, 65535.0);
4212e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs
4222e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	PUSH_KICK (push);
42356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez}
42456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
42556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerezstatic void
426f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergnv20_context_destroy(struct gl_context *ctx)
42756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez{
42856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	struct nouveau_context *nctx = to_nouveau_context(ctx);
42956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
43056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	nv04_surface_takedown(ctx);
431cdb38b5d3d1b93a90a91ad06c0f03efdfde6b525Francisco Jerez	nv20_swtnl_destroy(ctx);
432cdb38b5d3d1b93a90a91ad06c0f03efdfde6b525Francisco Jerez	nv20_vbo_destroy(ctx);
43356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
4342e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	nouveau_object_del(&nctx->hw.eng3d);
43556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
43656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	nouveau_context_deinit(ctx);
43756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	FREE(ctx);
43856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez}
43956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
440f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergstatic struct gl_context *
441d3491e775fb07f891463b2185d74bbad62f3ed24Kristian Høgsbergnv20_context_create(struct nouveau_screen *screen, const struct gl_config *visual,
442f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg		    struct gl_context *share_ctx)
443bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez{
444bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	struct nouveau_context *nctx;
445f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg	struct gl_context *ctx;
44656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	unsigned kelvin_class;
44756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	int ret;
448bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
449bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	nctx = CALLOC_STRUCT(nouveau_context);
450bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	if (!nctx)
451bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez		return NULL;
452bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
453bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx = &nctx->base;
454bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
45556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	if (!nouveau_context_init(ctx, screen, visual, share_ctx))
45656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		goto fail;
45756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
4588a99ec8e05ef541c586c2f8b427220d036589870Ian Romanick	ctx->Extensions.ARB_texture_env_crossbar = true;
4598a99ec8e05ef541c586c2f8b427220d036589870Ian Romanick	ctx->Extensions.ARB_texture_env_combine = true;
4608a99ec8e05ef541c586c2f8b427220d036589870Ian Romanick	ctx->Extensions.ARB_texture_env_dot3 = true;
46166389bb99d86c8d96c2a7dbd83a5227c0e13e767Nicholas Miell	ctx->Extensions.NV_fog_distance = true;
4628a99ec8e05ef541c586c2f8b427220d036589870Ian Romanick	ctx->Extensions.NV_texture_rectangle = true;
46383a02427e576a5126a618c13bc3e12ff2b4a3e0aViktor Novotný	if (ctx->Mesa_DXTn) {
46483a02427e576a5126a618c13bc3e12ff2b4a3e0aViktor Novotný		ctx->Extensions.EXT_texture_compression_s3tc = true;
46583a02427e576a5126a618c13bc3e12ff2b4a3e0aViktor Novotný		ctx->Extensions.S3_s3tc = true;
46683a02427e576a5126a618c13bc3e12ff2b4a3e0aViktor Novotný	}
467a7b8d105a6efe4056633f7129f80aac1f13cc246Francisco Jerez
46856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	/* GL constants. */
469bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Const.MaxTextureCoordUnits = NV20_TEXTURE_UNITS;
470bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Const.MaxTextureImageUnits = NV20_TEXTURE_UNITS;
471bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Const.MaxTextureUnits = NV20_TEXTURE_UNITS;
472bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Const.MaxTextureMaxAnisotropy = 8;
473bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	ctx->Const.MaxTextureLodBias = 15;
474920481d38751957ec24de323ae8f15a6aec334a5Francisco Jerez	ctx->Driver.Clear = nv20_clear;
475bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
47656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	/* 2D engine. */
47756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	ret = nv04_surface_init(ctx);
47856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	if (!ret)
47956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		goto fail;
48056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
48156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	/* 3D engine. */
48256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	if (context_chipset(ctx) >= 0x25)
4832e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		kelvin_class = NV25_3D_CLASS;
48456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	else
4852e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs		kelvin_class = NV20_3D_CLASS;
48656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
4872e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs	ret = nouveau_object_new(context_chan(ctx), 0xbeef0001, kelvin_class,
4882e47d01c9e5325906cf3bb979279599991c6328eBen Skeggs				 NULL, 0, &nctx->hw.eng3d);
48956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	if (ret)
49056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		goto fail;
49156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
49256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	nv20_hwctx_init(ctx);
493cdb38b5d3d1b93a90a91ad06c0f03efdfde6b525Francisco Jerez	nv20_vbo_init(ctx);
494cdb38b5d3d1b93a90a91ad06c0f03efdfde6b525Francisco Jerez	nv20_swtnl_init(ctx);
495bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
496bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez	return ctx;
497bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez
49856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerezfail:
49956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	nv20_context_destroy(ctx);
50056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	return NULL;
501bfb5dc68fcc9f5dee71f66d9499b8bdcde9627eaFrancisco Jerez}
50256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez
50356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerezconst struct nouveau_driver nv20_driver = {
50456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	.context_create = nv20_context_create,
50556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	.context_destroy = nv20_context_destroy,
50656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	.surface_copy = nv04_surface_copy,
50756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	.surface_fill = nv04_surface_fill,
50856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	.emit = (nouveau_state_func[]) {
50956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_alpha_func,
51056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_blend_color,
51156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_blend_equation,
51256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_blend_func,
51356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_clip_plane,
51456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_clip_plane,
51556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_clip_plane,
51656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_clip_plane,
51756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_clip_plane,
51856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_clip_plane,
51956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_color_mask,
52056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_color_material,
52156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_cull_face,
52256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_front_face,
52356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_depth,
52456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_dither,
5257269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez		nv20_emit_frag,
52656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_framebuffer,
52756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_fog,
52856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_light_enable,
52956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_light_model,
53056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_light_source,
53156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_light_source,
53256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_light_source,
53356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_light_source,
53456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_light_source,
53556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_light_source,
53656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_light_source,
53756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_light_source,
53856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_line_stipple,
53956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_line_mode,
54056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_logic_opcode,
54156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_material_ambient,
54256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_material_ambient,
54356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_material_diffuse,
54456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_material_diffuse,
54556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_material_specular,
54656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_material_specular,
54756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_material_shininess,
54856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_material_shininess,
54956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_modelview,
55056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_point_mode,
55156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_point_parameter,
55256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_polygon_mode,
55356dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_polygon_offset,
55456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_polygon_stipple,
55556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_projection,
55656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_render_mode,
55756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_scissor,
55856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_shade_model,
55956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_stencil_func,
56056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_stencil_mask,
56156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv10_emit_stencil_op,
5627269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez		nv20_emit_tex_env,
5637269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez		nv20_emit_tex_env,
5647269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez		nv20_emit_tex_env,
5657269a30b86745a29bb575ce3545ab82e6514ce2aFrancisco Jerez		nv20_emit_tex_env,
566c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez		nv20_emit_tex_gen,
567c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez		nv20_emit_tex_gen,
568c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez		nv20_emit_tex_gen,
569c944fb5ffe7cf16154d6395001f43a6c965cab1fFrancisco Jerez		nv20_emit_tex_gen,
5701a812ab57a71d16e45ca44de7ae0570d2bd46674Francisco Jerez		nv20_emit_tex_mat,
5711a812ab57a71d16e45ca44de7ae0570d2bd46674Francisco Jerez		nv20_emit_tex_mat,
5721a812ab57a71d16e45ca44de7ae0570d2bd46674Francisco Jerez		nv20_emit_tex_mat,
5731a812ab57a71d16e45ca44de7ae0570d2bd46674Francisco Jerez		nv20_emit_tex_mat,
57456dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_tex_obj,
57556dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_tex_obj,
57656dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_tex_obj,
57756dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_tex_obj,
57856dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_viewport,
57956dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez		nv20_emit_tex_shader
58056dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	},
58156dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez	.num_emit = NUM_NV20_STATE,
58256dcd011b5ec33190f268cf546a4c68f81f5ebd0Francisco Jerez};
583