2 * Copyright (C) 2009-2010 Francisco Jerez.
5 * Permission is hereby granted, free of charge, to any person obtaining
6 * a copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sublicense, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
13 * The above copyright notice and this permission notice (including the
14 * next paragraph) shall be included in all copies or substantial
15 * portions of the Software.
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
21 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 #include "nouveau_driver.h"
28 #include "nouveau_context.h"
29 #include "nouveau_fbo.h"
30 #include "nouveau_util.h"
31 #include "nv_object.xml.h"
32 #include "nv20_3d.xml.h"
33 #include "nv04_driver.h"
34 #include "nv10_driver.h"
35 #include "nv20_driver.h"
37 static const struct dri_extension nv20_extensions
[] = {
38 { "GL_ARB_texture_env_crossbar", NULL
},
39 { "GL_EXT_texture_rectangle", NULL
},
40 { "GL_ARB_texture_env_combine", NULL
},
41 { "GL_ARB_texture_env_dot3", NULL
},
46 nv20_clear(struct gl_context
*ctx
, GLbitfield buffers
)
48 struct nouveau_channel
*chan
= context_chan(ctx
);
49 struct nouveau_grobj
*kelvin
= context_eng3d(ctx
);
50 struct gl_framebuffer
*fb
= ctx
->DrawBuffer
;
53 nouveau_validate_framebuffer(ctx
);
55 if (buffers
& BUFFER_BITS_COLOR
) {
56 struct nouveau_surface
*s
= &to_nouveau_renderbuffer(
57 fb
->_ColorDrawBuffers
[0])->surface
;
59 if (ctx
->Color
.ColorMask
[0][RCOMP
])
60 clear
|= NV20_3D_CLEAR_BUFFERS_COLOR_R
;
61 if (ctx
->Color
.ColorMask
[0][GCOMP
])
62 clear
|= NV20_3D_CLEAR_BUFFERS_COLOR_G
;
63 if (ctx
->Color
.ColorMask
[0][BCOMP
])
64 clear
|= NV20_3D_CLEAR_BUFFERS_COLOR_B
;
65 if (ctx
->Color
.ColorMask
[0][ACOMP
])
66 clear
|= NV20_3D_CLEAR_BUFFERS_COLOR_A
;
68 BEGIN_RING(chan
, kelvin
, NV20_3D_CLEAR_VALUE
, 1);
69 OUT_RING(chan
, pack_rgba_f(s
->format
, ctx
->Color
.ClearColor
));
71 buffers
&= ~BUFFER_BITS_COLOR
;
74 if (buffers
& (BUFFER_BIT_DEPTH
| BUFFER_BIT_STENCIL
)) {
75 struct nouveau_surface
*s
= &to_nouveau_renderbuffer(
76 fb
->_DepthBuffer
->Wrapped
)->surface
;
78 if (buffers
& BUFFER_BIT_DEPTH
&& ctx
->Depth
.Mask
)
79 clear
|= NV20_3D_CLEAR_BUFFERS_DEPTH
;
80 if (buffers
& BUFFER_BIT_STENCIL
&& ctx
->Stencil
.WriteMask
[0])
81 clear
|= NV20_3D_CLEAR_BUFFERS_STENCIL
;
83 BEGIN_RING(chan
, kelvin
, NV20_3D_CLEAR_DEPTH_VALUE
, 1);
84 OUT_RING(chan
, pack_zs_f(s
->format
, ctx
->Depth
.Clear
,
87 buffers
&= ~(BUFFER_BIT_DEPTH
| BUFFER_BIT_STENCIL
);
90 BEGIN_RING(chan
, kelvin
, NV20_3D_CLEAR_BUFFERS
, 1);
91 OUT_RING(chan
, clear
);
93 nouveau_clear(ctx
, buffers
);
97 nv20_hwctx_init(struct gl_context
*ctx
)
99 struct nouveau_channel
*chan
= context_chan(ctx
);
100 struct nouveau_grobj
*kelvin
= context_eng3d(ctx
);
101 struct nouveau_hw_state
*hw
= &to_nouveau_context(ctx
)->hw
;
104 BEGIN_RING(chan
, kelvin
, NV20_3D_DMA_NOTIFY
, 1);
105 OUT_RING (chan
, hw
->ntfy
->handle
);
106 BEGIN_RING(chan
, kelvin
, NV20_3D_DMA_TEXTURE0
, 2);
107 OUT_RING (chan
, chan
->vram
->handle
);
108 OUT_RING (chan
, chan
->gart
->handle
);
109 BEGIN_RING(chan
, kelvin
, NV20_3D_DMA_COLOR
, 2);
110 OUT_RING (chan
, chan
->vram
->handle
);
111 OUT_RING (chan
, chan
->vram
->handle
);
112 BEGIN_RING(chan
, kelvin
, NV20_3D_DMA_VTXBUF0
, 2);
113 OUT_RING(chan
, chan
->vram
->handle
);
114 OUT_RING(chan
, chan
->gart
->handle
);
116 BEGIN_RING(chan
, kelvin
, NV20_3D_DMA_QUERY
, 1);
119 BEGIN_RING(chan
, kelvin
, NV20_3D_RT_HORIZ
, 2);
123 BEGIN_RING(chan
, kelvin
, NV20_3D_VIEWPORT_CLIP_HORIZ(0), 1);
124 OUT_RING (chan
, 0xfff << 16 | 0x0);
125 BEGIN_RING(chan
, kelvin
, NV20_3D_VIEWPORT_CLIP_VERT(0), 1);
126 OUT_RING (chan
, 0xfff << 16 | 0x0);
128 for (i
= 1; i
< NV20_3D_VIEWPORT_CLIP_HORIZ__LEN
; i
++) {
129 BEGIN_RING(chan
, kelvin
, NV20_3D_VIEWPORT_CLIP_HORIZ(i
), 1);
131 BEGIN_RING(chan
, kelvin
, NV20_3D_VIEWPORT_CLIP_VERT(i
), 1);
135 BEGIN_RING(chan
, kelvin
, NV20_3D_VIEWPORT_CLIP_MODE
, 1);
138 BEGIN_RING(chan
, kelvin
, 0x17e0, 3);
139 OUT_RINGf (chan
, 0.0);
140 OUT_RINGf (chan
, 0.0);
141 OUT_RINGf (chan
, 1.0);
143 if (context_chipset(ctx
) >= 0x25) {
144 BEGIN_RING(chan
, kelvin
, NV20_3D_TEX_RCOMP
, 1);
145 OUT_RING (chan
, NV20_3D_TEX_RCOMP_LEQUAL
| 0xdb0);
147 BEGIN_RING(chan
, kelvin
, 0x1e68, 1);
148 OUT_RING (chan
, 0x4b800000); /* 16777216.000000 */
149 BEGIN_RING(chan
, kelvin
, NV20_3D_TEX_RCOMP
, 1);
150 OUT_RING (chan
, NV20_3D_TEX_RCOMP_LEQUAL
);
153 BEGIN_RING(chan
, kelvin
, 0x290, 1);
154 OUT_RING (chan
, 0x10 << 16 | 1);
155 BEGIN_RING(chan
, kelvin
, 0x9fc, 1);
157 BEGIN_RING(chan
, kelvin
, 0x1d80, 1);
159 BEGIN_RING(chan
, kelvin
, 0x9f8, 1);
161 BEGIN_RING(chan
, kelvin
, 0x17ec, 3);
162 OUT_RINGf (chan
, 0.0);
163 OUT_RINGf (chan
, 1.0);
164 OUT_RINGf (chan
, 0.0);
166 if (context_chipset(ctx
) >= 0x25) {
167 BEGIN_RING(chan
, kelvin
, 0x1d88, 1);
170 BEGIN_RING(chan
, kelvin
, NV25_3D_DMA_HIERZ
, 1);
171 OUT_RING (chan
, chan
->vram
->handle
);
172 BEGIN_RING(chan
, kelvin
, NV25_3D_UNK01AC
, 1);
173 OUT_RING (chan
, chan
->vram
->handle
);
176 BEGIN_RING(chan
, kelvin
, NV20_3D_DMA_FENCE
, 1);
179 BEGIN_RING(chan
, kelvin
, 0x1e98, 1);
182 BEGIN_RING(chan
, kelvin
, NV01_GRAPH_NOTIFY
, 1);
185 BEGIN_RING(chan
, kelvin
, 0x120, 3);
190 if (context_chipset(ctx
) >= 0x25) {
191 BEGIN_RING(chan
, kelvin
, 0x1da4, 1);
195 BEGIN_RING(chan
, kelvin
, NV20_3D_RT_HORIZ
, 2);
196 OUT_RING (chan
, 0 << 16 | 0);
197 OUT_RING (chan
, 0 << 16 | 0);
199 BEGIN_RING(chan
, kelvin
, NV20_3D_ALPHA_FUNC_ENABLE
, 1);
201 BEGIN_RING(chan
, kelvin
, NV20_3D_ALPHA_FUNC_FUNC
, 2);
202 OUT_RING (chan
, NV20_3D_ALPHA_FUNC_FUNC_ALWAYS
);
205 for (i
= 0; i
< NV20_3D_TEX__LEN
; i
++) {
206 BEGIN_RING(chan
, kelvin
, NV20_3D_TEX_ENABLE(i
), 1);
210 BEGIN_RING(chan
, kelvin
, NV20_3D_TEX_SHADER_OP
, 1);
212 BEGIN_RING(chan
, kelvin
, NV20_3D_TEX_SHADER_CULL_MODE
, 1);
215 BEGIN_RING(chan
, kelvin
, NV20_3D_RC_IN_ALPHA(0), 4);
216 OUT_RING (chan
, 0x30d410d0);
220 BEGIN_RING(chan
, kelvin
, NV20_3D_RC_OUT_RGB(0), 4);
221 OUT_RING (chan
, 0x00000c00);
225 BEGIN_RING(chan
, kelvin
, NV20_3D_RC_ENABLE
, 1);
226 OUT_RING (chan
, 0x00011101);
227 BEGIN_RING(chan
, kelvin
, NV20_3D_RC_FINAL0
, 2);
228 OUT_RING (chan
, 0x130e0300);
229 OUT_RING (chan
, 0x0c091c80);
230 BEGIN_RING(chan
, kelvin
, NV20_3D_RC_OUT_ALPHA(0), 4);
231 OUT_RING (chan
, 0x00000c00);
235 BEGIN_RING(chan
, kelvin
, NV20_3D_RC_IN_RGB(0), 4);
236 OUT_RING (chan
, 0x20c400c0);
240 BEGIN_RING(chan
, kelvin
, NV20_3D_RC_COLOR0
, 2);
243 BEGIN_RING(chan
, kelvin
, NV20_3D_RC_CONSTANT_COLOR0(0), 4);
244 OUT_RING (chan
, 0x035125a0);
246 OUT_RING (chan
, 0x40002000);
249 BEGIN_RING(chan
, kelvin
, NV20_3D_MULTISAMPLE_CONTROL
, 1);
250 OUT_RING (chan
, 0xffff0000);
251 BEGIN_RING(chan
, kelvin
, NV20_3D_BLEND_FUNC_ENABLE
, 1);
253 BEGIN_RING(chan
, kelvin
, NV20_3D_DITHER_ENABLE
, 1);
255 BEGIN_RING(chan
, kelvin
, NV20_3D_STENCIL_ENABLE
, 1);
257 BEGIN_RING(chan
, kelvin
, NV20_3D_BLEND_FUNC_SRC
, 4);
258 OUT_RING (chan
, NV20_3D_BLEND_FUNC_SRC_ONE
);
259 OUT_RING (chan
, NV20_3D_BLEND_FUNC_DST_ZERO
);
261 OUT_RING (chan
, NV20_3D_BLEND_EQUATION_FUNC_ADD
);
262 BEGIN_RING(chan
, kelvin
, NV20_3D_STENCIL_MASK
, 7);
263 OUT_RING (chan
, 0xff);
264 OUT_RING (chan
, NV20_3D_STENCIL_FUNC_FUNC_ALWAYS
);
266 OUT_RING (chan
, 0xff);
267 OUT_RING (chan
, NV20_3D_STENCIL_OP_FAIL_KEEP
);
268 OUT_RING (chan
, NV20_3D_STENCIL_OP_ZFAIL_KEEP
);
269 OUT_RING (chan
, NV20_3D_STENCIL_OP_ZPASS_KEEP
);
271 BEGIN_RING(chan
, kelvin
, NV20_3D_COLOR_LOGIC_OP_ENABLE
, 2);
273 OUT_RING (chan
, NV20_3D_COLOR_LOGIC_OP_OP_COPY
);
274 BEGIN_RING(chan
, kelvin
, 0x17cc, 1);
276 if (context_chipset(ctx
) >= 0x25) {
277 BEGIN_RING(chan
, kelvin
, 0x1d84, 1);
280 BEGIN_RING(chan
, kelvin
, NV20_3D_LIGHTING_ENABLE
, 1);
282 BEGIN_RING(chan
, kelvin
, NV20_3D_LIGHT_MODEL
, 1);
283 OUT_RING (chan
, NV20_3D_LIGHT_MODEL_VIEWER_NONLOCAL
);
284 BEGIN_RING(chan
, kelvin
, NV20_3D_SEPARATE_SPECULAR_ENABLE
, 1);
286 BEGIN_RING(chan
, kelvin
, NV20_3D_LIGHT_MODEL_TWO_SIDE_ENABLE
, 1);
288 BEGIN_RING(chan
, kelvin
, NV20_3D_ENABLED_LIGHTS
, 1);
290 BEGIN_RING(chan
, kelvin
, NV20_3D_NORMALIZE_ENABLE
, 1);
292 BEGIN_RING(chan
, kelvin
, NV20_3D_POLYGON_STIPPLE_PATTERN(0),
293 NV20_3D_POLYGON_STIPPLE_PATTERN__LEN
);
294 for (i
= 0; i
< NV20_3D_POLYGON_STIPPLE_PATTERN__LEN
; i
++) {
295 OUT_RING(chan
, 0xffffffff);
298 BEGIN_RING(chan
, kelvin
, NV20_3D_POLYGON_OFFSET_POINT_ENABLE
, 3);
302 BEGIN_RING(chan
, kelvin
, NV20_3D_DEPTH_FUNC
, 1);
303 OUT_RING (chan
, NV20_3D_DEPTH_FUNC_LESS
);
304 BEGIN_RING(chan
, kelvin
, NV20_3D_DEPTH_WRITE_ENABLE
, 1);
306 BEGIN_RING(chan
, kelvin
, NV20_3D_DEPTH_TEST_ENABLE
, 1);
308 BEGIN_RING(chan
, kelvin
, NV20_3D_POLYGON_OFFSET_FACTOR
, 2);
309 OUT_RINGf (chan
, 0.0);
310 OUT_RINGf (chan
, 0.0);
311 BEGIN_RING(chan
, kelvin
, NV20_3D_DEPTH_CLAMP
, 1);
313 if (context_chipset(ctx
) < 0x25) {
314 BEGIN_RING(chan
, kelvin
, 0x1d84, 1);
317 BEGIN_RING(chan
, kelvin
, NV20_3D_POINT_SIZE
, 1);
318 if (context_chipset(ctx
) >= 0x25)
319 OUT_RINGf (chan
, 1.0);
323 if (context_chipset(ctx
) >= 0x25) {
324 BEGIN_RING(chan
, kelvin
, NV20_3D_POINT_PARAMETERS_ENABLE
, 1);
326 BEGIN_RING(chan
, kelvin
, 0x0a1c, 1);
327 OUT_RING (chan
, 0x800);
329 BEGIN_RING(chan
, kelvin
, NV20_3D_POINT_PARAMETERS_ENABLE
, 2);
334 BEGIN_RING(chan
, kelvin
, NV20_3D_LINE_WIDTH
, 1);
336 BEGIN_RING(chan
, kelvin
, NV20_3D_LINE_SMOOTH_ENABLE
, 1);
338 BEGIN_RING(chan
, kelvin
, NV20_3D_POLYGON_MODE_FRONT
, 2);
339 OUT_RING (chan
, NV20_3D_POLYGON_MODE_FRONT_FILL
);
340 OUT_RING (chan
, NV20_3D_POLYGON_MODE_BACK_FILL
);
341 BEGIN_RING(chan
, kelvin
, NV20_3D_CULL_FACE
, 2);
342 OUT_RING (chan
, NV20_3D_CULL_FACE_BACK
);
343 OUT_RING (chan
, NV20_3D_FRONT_FACE_CCW
);
344 BEGIN_RING(chan
, kelvin
, NV20_3D_POLYGON_SMOOTH_ENABLE
, 1);
346 BEGIN_RING(chan
, kelvin
, NV20_3D_CULL_FACE_ENABLE
, 1);
348 BEGIN_RING(chan
, kelvin
, NV20_3D_SHADE_MODEL
, 1);
349 OUT_RING (chan
, NV20_3D_SHADE_MODEL_SMOOTH
);
350 BEGIN_RING(chan
, kelvin
, NV20_3D_POLYGON_STIPPLE_ENABLE
, 1);
353 BEGIN_RING(chan
, kelvin
, NV20_3D_TEX_GEN_MODE(0,0),
354 4 * NV20_3D_TEX_GEN_MODE__ESIZE
);
355 for (i
=0; i
< 4 * NV20_3D_TEX_GEN_MODE__LEN
; i
++)
358 BEGIN_RING(chan
, kelvin
, NV20_3D_FOG_COEFF(0), 3);
359 OUT_RINGf (chan
, 1.5);
360 OUT_RINGf (chan
, -0.090168);
361 OUT_RINGf (chan
, 0.0);
362 BEGIN_RING(chan
, kelvin
, NV20_3D_FOG_MODE
, 2);
363 OUT_RING (chan
, NV20_3D_FOG_MODE_EXP_SIGNED
);
364 OUT_RING (chan
, NV20_3D_FOG_COORD_FOG
);
365 BEGIN_RING(chan
, kelvin
, NV20_3D_FOG_ENABLE
, 2);
369 BEGIN_RING(chan
, kelvin
, NV20_3D_ENGINE
, 1);
370 OUT_RING (chan
, NV20_3D_ENGINE_FIXED
);
372 for (i
= 0; i
< NV20_3D_TEX_MATRIX_ENABLE__LEN
; i
++) {
373 BEGIN_RING(chan
, kelvin
, NV20_3D_TEX_MATRIX_ENABLE(i
), 1);
377 BEGIN_RING(chan
, kelvin
, NV20_3D_VERTEX_ATTR_4F_X(1), 4 * 15);
378 OUT_RINGf(chan
, 1.0);
379 OUT_RINGf(chan
, 0.0);
380 OUT_RINGf(chan
, 0.0);
381 OUT_RINGf(chan
, 1.0);
382 OUT_RINGf(chan
, 0.0);
383 OUT_RINGf(chan
, 0.0);
384 OUT_RINGf(chan
, 1.0);
385 OUT_RINGf(chan
, 1.0);
386 OUT_RINGf(chan
, 1.0);
387 OUT_RINGf(chan
, 1.0);
388 OUT_RINGf(chan
, 1.0);
389 OUT_RINGf(chan
, 1.0);
390 for (i
= 0; i
< 12; i
++) {
391 OUT_RINGf(chan
, 0.0);
392 OUT_RINGf(chan
, 0.0);
393 OUT_RINGf(chan
, 0.0);
394 OUT_RINGf(chan
, 1.0);
397 BEGIN_RING(chan
, kelvin
, NV20_3D_EDGEFLAG_ENABLE
, 1);
399 BEGIN_RING(chan
, kelvin
, NV20_3D_COLOR_MASK
, 1);
400 OUT_RING (chan
, 0x00010101);
401 BEGIN_RING(chan
, kelvin
, NV20_3D_CLEAR_VALUE
, 1);
404 BEGIN_RING(chan
, kelvin
, NV20_3D_DEPTH_RANGE_NEAR
, 2);
405 OUT_RINGf (chan
, 0.0);
406 OUT_RINGf (chan
, 16777216.0);
408 BEGIN_RING(chan
, kelvin
, NV20_3D_VIEWPORT_TRANSLATE_X
, 4);
409 OUT_RINGf (chan
, 0.0);
410 OUT_RINGf (chan
, 0.0);
411 OUT_RINGf (chan
, 0.0);
412 OUT_RINGf (chan
, 16777215.0);
414 BEGIN_RING(chan
, kelvin
, NV20_3D_VIEWPORT_SCALE_X
, 4);
415 OUT_RINGf (chan
, 0.0);
416 OUT_RINGf (chan
, 0.0);
417 OUT_RINGf (chan
, 16777215.0 * 0.5);
418 OUT_RINGf (chan
, 65535.0);
424 nv20_context_destroy(struct gl_context
*ctx
)
426 struct nouveau_context
*nctx
= to_nouveau_context(ctx
);
428 nv04_surface_takedown(ctx
);
429 nv20_swtnl_destroy(ctx
);
430 nv20_vbo_destroy(ctx
);
432 nouveau_grobj_free(&nctx
->hw
.eng3d
);
434 nouveau_context_deinit(ctx
);
438 static struct gl_context
*
439 nv20_context_create(struct nouveau_screen
*screen
, const struct gl_config
*visual
,
440 struct gl_context
*share_ctx
)
442 struct nouveau_context
*nctx
;
443 struct gl_context
*ctx
;
444 unsigned kelvin_class
;
447 nctx
= CALLOC_STRUCT(nouveau_context
);
453 if (!nouveau_context_init(ctx
, screen
, visual
, share_ctx
))
456 driInitExtensions(ctx
, nv20_extensions
, GL_FALSE
);
459 ctx
->Const
.MaxTextureCoordUnits
= NV20_TEXTURE_UNITS
;
460 ctx
->Const
.MaxTextureImageUnits
= NV20_TEXTURE_UNITS
;
461 ctx
->Const
.MaxTextureUnits
= NV20_TEXTURE_UNITS
;
462 ctx
->Const
.MaxTextureMaxAnisotropy
= 8;
463 ctx
->Const
.MaxTextureLodBias
= 15;
464 ctx
->Driver
.Clear
= nv20_clear
;
467 ret
= nv04_surface_init(ctx
);
472 if (context_chipset(ctx
) >= 0x25)
473 kelvin_class
= NV25_3D
;
475 kelvin_class
= NV20_3D
;
477 ret
= nouveau_grobj_alloc(context_chan(ctx
), 0xbeef0001, kelvin_class
,
482 nv20_hwctx_init(ctx
);
484 nv20_swtnl_init(ctx
);
489 nv20_context_destroy(ctx
);
493 const struct nouveau_driver nv20_driver
= {
494 .context_create
= nv20_context_create
,
495 .context_destroy
= nv20_context_destroy
,
496 .surface_copy
= nv04_surface_copy
,
497 .surface_fill
= nv04_surface_fill
,
498 .emit
= (nouveau_state_func
[]) {
499 nv10_emit_alpha_func
,
500 nv10_emit_blend_color
,
501 nv10_emit_blend_equation
,
502 nv10_emit_blend_func
,
503 nv20_emit_clip_plane
,
504 nv20_emit_clip_plane
,
505 nv20_emit_clip_plane
,
506 nv20_emit_clip_plane
,
507 nv20_emit_clip_plane
,
508 nv20_emit_clip_plane
,
509 nv10_emit_color_mask
,
510 nv20_emit_color_material
,
512 nv10_emit_front_face
,
516 nv20_emit_framebuffer
,
518 nv10_emit_light_enable
,
519 nv20_emit_light_model
,
520 nv20_emit_light_source
,
521 nv20_emit_light_source
,
522 nv20_emit_light_source
,
523 nv20_emit_light_source
,
524 nv20_emit_light_source
,
525 nv20_emit_light_source
,
526 nv20_emit_light_source
,
527 nv20_emit_light_source
,
528 nv10_emit_line_stipple
,
530 nv20_emit_logic_opcode
,
531 nv20_emit_material_ambient
,
532 nv20_emit_material_ambient
,
533 nv20_emit_material_diffuse
,
534 nv20_emit_material_diffuse
,
535 nv20_emit_material_specular
,
536 nv20_emit_material_specular
,
537 nv20_emit_material_shininess
,
538 nv20_emit_material_shininess
,
540 nv20_emit_point_mode
,
541 nv10_emit_point_parameter
,
542 nv10_emit_polygon_mode
,
543 nv10_emit_polygon_offset
,
544 nv10_emit_polygon_stipple
,
545 nv20_emit_projection
,
546 nv10_emit_render_mode
,
548 nv10_emit_shade_model
,
549 nv10_emit_stencil_func
,
550 nv10_emit_stencil_mask
,
551 nv10_emit_stencil_op
,
571 .num_emit
= NUM_NV20_STATE
,