diff options
| author | Stephane Marchesin <marchesin@icps.u-strasbg.fr> | 2006-11-18 00:19:22 +0000 | 
|---|---|---|
| committer | Stephane Marchesin <marchesin@icps.u-strasbg.fr> | 2006-11-18 00:19:22 +0000 | 
| commit | e722e3480f3a5b975c05b584f9acef222c2c9d6b (patch) | |
| tree | 00acaeb6dbb9b6499f1406796faba03aa6601da0 /src | |
| parent | 8532b6e0a56b09e03e034e37850589d26c20805b (diff) | |
Add nv20_state.c ; hook nv10_state.c into the build ; do the renaming
    required by the renouveau changes.
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/drivers/dri/nouveau/Makefile | 2 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/nouveau/nouveau_reg.h | 61 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/nouveau/nv10_state.c | 21 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/nouveau/nv20_state.c | 575 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/nouveau/nv30_state.c | 4 | 
5 files changed, 621 insertions, 42 deletions
| diff --git a/src/mesa/drivers/dri/nouveau/Makefile b/src/mesa/drivers/dri/nouveau/Makefile index ed700a7085..2db6f8989d 100644 --- a/src/mesa/drivers/dri/nouveau/Makefile +++ b/src/mesa/drivers/dri/nouveau/Makefile @@ -20,6 +20,8 @@ DRIVER_SOURCES = \  	nouveau_tex.c            \  	nouveau_swtcl.c          \  	nv10_swtcl.c             \ +	nv10_state.c             \ +	nv20_state.c             \  	nv30_state.c  C_SOURCES = \ diff --git a/src/mesa/drivers/dri/nouveau/nouveau_reg.h b/src/mesa/drivers/dri/nouveau/nouveau_reg.h index c5052d7c4b..389c541e1c 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_reg.h +++ b/src/mesa/drivers/dri/nouveau/nouveau_reg.h @@ -43,7 +43,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  ************************************************************************** -   Created from objects.c rev. 1.332 +   Created from objects.c rev. 1.337  */  #ifndef _NOUVEAU_REG_H @@ -239,7 +239,7 @@ Object NV04_SCALED_IMAGE_FROM_MEMORY used on: NV04  #	define		NV04_SCALED_IMAGE_FROM_MEMORY_DU_DX			0x00000318	/* Parameters: int frac*0x100000 */  #	define		NV04_SCALED_IMAGE_FROM_MEMORY_DV_DY			0x0000031c	/* Parameters: int frac*0x100000 */  #	define		NV04_SCALED_IMAGE_FROM_MEMORY_SIZE			0x00000400	/* Parameters: width height */ -#	define		NV04_SCALED_IMAGE_FROM_MEMORY_FORMAT			0x00000404	/* Parameters: pitch */ +#	define		NV04_SCALED_IMAGE_FROM_MEMORY_FORMAT			0x00000404	/* Parameters: pitch origin filter */  #	define		NV04_SCALED_IMAGE_FROM_MEMORY_OFFSET			0x00000408  #	define		NV04_SCALED_IMAGE_FROM_MEMORY_POINT			0x0000040c	/* Parameters: u_int u_frac*0x10 v_int v_frac*0x10 */ @@ -328,7 +328,7 @@ Object NV10_TCL_PRIMITIVE_3D used on: NV10  #	define		NV10_TCL_PRIMITIVE_3D_FOG_COLOR				0x000002a8	/* Parameters: a b g r */  #	define		NV10_TCL_PRIMITIVE_3D_VIEWPORT_CLIP_HORIZ(d)		(0x000002c0 + d * 0x0004)	/* Parameters: x2 x1 */  #	define		NV10_TCL_PRIMITIVE_3D_VIEWPORT_CLIP_VERT(d)		(0x000002e0 + d * 0x0004)	/* Parameters: y2 y1 */ -#	define		NV10_TCL_PRIMITIVE_3D_ALPHA_TEST_ENABLE			0x00000300 +#	define		NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_ENABLE			0x00000300  #	define		NV10_TCL_PRIMITIVE_3D_BLEND_ENABLE			0x00000304  #	define		NV10_TCL_PRIMITIVE_3D_CULL_FACE_ENABLE			0x00000308  #	define		NV10_TCL_PRIMITIVE_3D_DEPTH_TEST_ENABLE			0x0000030c @@ -339,11 +339,11 @@ Object NV10_TCL_PRIMITIVE_3D used on: NV10  #	define		NV10_TCL_PRIMITIVE_3D_LINE_SMOOTH_ENABLE		0x00000320  #	define		NV10_TCL_PRIMITIVE_3D_POLYGON_SMOOTH_ENABLE		0x00000324  #	define		NV10_TCL_PRIMITIVE_3D_VERTEX_WEIGHT_ENABLE		0x00000328 -#	define		NV10_TCL_PRIMITIVE_3D_STENCIL_TEST_ENABLE		0x0000032c +#	define		NV10_TCL_PRIMITIVE_3D_STENCIL_ENABLE			0x0000032c  #	define		NV10_TCL_PRIMITIVE_3D_POLYGON_OFFSET_POINT_ENABLE	0x00000330  #	define		NV10_TCL_PRIMITIVE_3D_POLYGON_OFFSET_LINE_ENABLE	0x00000334  #	define		NV10_TCL_PRIMITIVE_3D_POLYGON_OFFSET_FILL_ENABLE	0x00000338 -#	define		NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC			0x0000033c +#	define		NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_FUNC			0x0000033c  #	define		NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_REF			0x00000340  #	define		NV10_TCL_PRIMITIVE_3D_BLEND_FUNC_SRC			0x00000344  #	define		NV10_TCL_PRIMITIVE_3D_BLEND_FUNC_DST			0x00000348 @@ -351,7 +351,7 @@ Object NV10_TCL_PRIMITIVE_3D used on: NV10  #	define		NV10_TCL_PRIMITIVE_3D_BLEND_EQUATION			0x00000350  #	define		NV10_TCL_PRIMITIVE_3D_DEPTH_FUNC			0x00000354  #	define		NV10_TCL_PRIMITIVE_3D_COLOR_MASK			0x00000358	/* Parameters: r g b */ -#	define		NV10_TCL_PRIMITIVE_3D_DEPTH_MASK			0x0000035c +#	define		NV10_TCL_PRIMITIVE_3D_DEPTH_WRITE_ENABLE		0x0000035c  #	define		NV10_TCL_PRIMITIVE_3D_STENCIL_MASK			0x00000360  #	define		NV10_TCL_PRIMITIVE_3D_STENCIL_FUNC_FUNC			0x00000364  #	define		NV10_TCL_PRIMITIVE_3D_STENCIL_FUNC_REF			0x00000368 @@ -534,7 +534,7 @@ Object NV15_TCL_PRIMITIVE_3D used on: NV15  #	define		NV17_TCL_PRIMITIVE_3D_COLOR_MASK_ENABLE			0x000002bc  #	define		NV10_TCL_PRIMITIVE_3D_VIEWPORT_CLIP_HORIZ(d)		(0x000002c0 + d * 0x0004)	/* Parameters: x2 x1 */  #	define		NV10_TCL_PRIMITIVE_3D_VIEWPORT_CLIP_VERT(d)		(0x000002e0 + d * 0x0004)	/* Parameters: y2 y1 */ -#	define		NV10_TCL_PRIMITIVE_3D_ALPHA_TEST_ENABLE			0x00000300 +#	define		NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_ENABLE			0x00000300  #	define		NV10_TCL_PRIMITIVE_3D_BLEND_ENABLE			0x00000304  #	define		NV10_TCL_PRIMITIVE_3D_CULL_FACE_ENABLE			0x00000308  #	define		NV10_TCL_PRIMITIVE_3D_DEPTH_TEST_ENABLE			0x0000030c @@ -545,11 +545,11 @@ Object NV15_TCL_PRIMITIVE_3D used on: NV15  #	define		NV10_TCL_PRIMITIVE_3D_LINE_SMOOTH_ENABLE		0x00000320  #	define		NV10_TCL_PRIMITIVE_3D_POLYGON_SMOOTH_ENABLE		0x00000324  #	define		NV10_TCL_PRIMITIVE_3D_VERTEX_WEIGHT_ENABLE		0x00000328 -#	define		NV10_TCL_PRIMITIVE_3D_STENCIL_TEST_ENABLE		0x0000032c +#	define		NV10_TCL_PRIMITIVE_3D_STENCIL_ENABLE			0x0000032c  #	define		NV10_TCL_PRIMITIVE_3D_POLYGON_OFFSET_POINT_ENABLE	0x00000330  #	define		NV10_TCL_PRIMITIVE_3D_POLYGON_OFFSET_LINE_ENABLE	0x00000334  #	define		NV10_TCL_PRIMITIVE_3D_POLYGON_OFFSET_FILL_ENABLE	0x00000338 -#	define		NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC			0x0000033c +#	define		NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_FUNC			0x0000033c  #	define		NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_REF			0x00000340  #	define		NV10_TCL_PRIMITIVE_3D_BLEND_FUNC_SRC			0x00000344  #	define		NV10_TCL_PRIMITIVE_3D_BLEND_FUNC_DST			0x00000348 @@ -557,7 +557,7 @@ Object NV15_TCL_PRIMITIVE_3D used on: NV15  #	define		NV10_TCL_PRIMITIVE_3D_BLEND_EQUATION			0x00000350  #	define		NV10_TCL_PRIMITIVE_3D_DEPTH_FUNC			0x00000354  #	define		NV10_TCL_PRIMITIVE_3D_COLOR_MASK			0x00000358	/* Parameters: r g b */ -#	define		NV10_TCL_PRIMITIVE_3D_DEPTH_MASK			0x0000035c +#	define		NV10_TCL_PRIMITIVE_3D_DEPTH_WRITE_ENABLE		0x0000035c  #	define		NV10_TCL_PRIMITIVE_3D_STENCIL_MASK			0x00000360  #	define		NV10_TCL_PRIMITIVE_3D_STENCIL_FUNC_FUNC			0x00000364  #	define		NV10_TCL_PRIMITIVE_3D_STENCIL_FUNC_REF			0x00000368 @@ -797,17 +797,17 @@ Object NV10_CONTEXT_SURFACES_2D used on: NV10 NV15 NV20 NV30 NV40 G70  #	define		NV10_CONTEXT_SURFACES_2D_OFFSET_DST			0x0000030c  /******************************************  -Object NV04_SURFACE used on: NV04 NV10 NV15  +Object NV04_CONTEXT_SURFACES_2D used on: NV04 NV10 NV15   */ -#define			NV04_SURFACE						0x00000042 -#	define		NV04_SURFACE_NOTIFY					0x00000104 -#	define		NV04_SURFACE_DMA_NOTIFY					0x00000180 -#	define		NV04_SURFACE_DMA_IMAGE_SOURCE				0x00000184 -#	define		NV04_SURFACE_DMA_IMAGE_DESTIN				0x00000188 -#	define		NV04_SURFACE_FORMAT					0x00000300 -#	define		NV04_SURFACE_PITCH					0x00000304	/* Parameters: source destin */ -#	define		NV04_SURFACE_OFFSET_SOURCE				0x00000308 -#	define		NV04_SURFACE_OFFSET_DESTIN				0x0000030c +#define			NV04_CONTEXT_SURFACES_2D				0x00000042 +#	define		NV04_CONTEXT_SURFACES_2D_NOTIFY				0x00000104 +#	define		NV04_CONTEXT_SURFACES_2D_SET_DMA_NOTIFY			0x00000180 +#	define		NV04_CONTEXT_SURFACES_2D_SET_DMA_IMAGE_SRC		0x00000184 +#	define		NV04_CONTEXT_SURFACES_2D_SET_DMA_IMAGE_DST		0x00000188 +#	define		NV04_CONTEXT_SURFACES_2D_FORMAT				0x00000300 +#	define		NV04_CONTEXT_SURFACES_2D_PITCH				0x00000304	/* Parameters: src dst */ +#	define		NV04_CONTEXT_SURFACES_2D_OFFSET_SRC			0x00000308 +#	define		NV04_CONTEXT_SURFACES_2D_OFFSET_DST			0x0000030c  /******************************************   Object NV04_IMAGE_PATTERN used on: NV04 NV10 NV15 NV20 NV30 NV40 G70 @@ -858,16 +858,18 @@ Object NV20_TCL_PRIMITIVE_3D used on: NV20  #	define		NV20_TCL_PRIMITIVE_3D_COLOR_MATERIAL_CONTROL		0x00000298	/* Parameters: back_specular back_ambient back_diffuse back_emission front_specular front_ambient front_diffuse front_emission */  #	define		NV20_TCL_PRIMITIVE_3D_FOG_MODE				0x0000029c  #	define		NV20_TCL_PRIMITIVE_3D_FOG_COORD_DIST			0x000002a0 -#	define		NV20_TCL_PRIMITIVE_3D_ALPHA_TEST_ENABLE			0x00000300 -#	define		NV20_TCL_PRIMITIVE_3D_BLEND_ENABLE			0x00000304 +#	define		NV20_TCL_PRIMITIVE_3D_FOG_ENABLE			0x000002a4 +#	define		NV20_TCL_PRIMITIVE_3D_ALPHA_FUNC_ENABLE			0x00000300 +#	define		NV20_TCL_PRIMITIVE_3D_BLEND_FUNC_ENABLE			0x00000304  #	define		NV20_TCL_PRIMITIVE_3D_CULL_FACE_ENABLE			0x00000308  #	define		NV20_TCL_PRIMITIVE_3D_DEPTH_TEST_ENABLE			0x0000030c  #	define		NV20_TCL_PRIMITIVE_3D_DITHER_ENABLE			0x00000310  #	define		NV20_TCL_PRIMITIVE_3D_LIGHTING_ENABLE			0x00000314 +#	define		NV20_TCL_PRIMITIVE_3D_POINT_SMOOTH_ENABLE		0x0000031c  #	define		NV20_TCL_PRIMITIVE_3D_POINT_PARAMETERS_ENABLE		0x00000318  #	define		NV20_TCL_PRIMITIVE_3D_LINE_SMOOTH_ENABLE		0x00000320  #	define		NV20_TCL_PRIMITIVE_3D_POLYGON_SMOOTH_ENABLE		0x00000324 -#	define		NV20_TCL_PRIMITIVE_3D_STENCIL_TEST_ENABLE		0x0000032c +#	define		NV20_TCL_PRIMITIVE_3D_STENCIL_ENABLE			0x0000032c  #	define		NV20_TCL_PRIMITIVE_3D_POLYGON_OFFSET_POINT_ENABLE	0x00000330  #	define		NV20_TCL_PRIMITIVE_3D_POLYGON_OFFSET_LINE_ENABLE	0x00000334  #	define		NV20_TCL_PRIMITIVE_3D_POLYGON_OFFSET_FILL_ENABLE	0x00000338 @@ -879,7 +881,7 @@ Object NV20_TCL_PRIMITIVE_3D used on: NV20  #	define		NV20_TCL_PRIMITIVE_3D_BLEND_EQUATION			0x00000350  #	define		NV20_TCL_PRIMITIVE_3D_DEPTH_FUNC			0x00000354  #	define		NV20_TCL_PRIMITIVE_3D_COLOR_MASK			0x00000358	/* Parameters: a r g b */ -#	define		NV20_TCL_PRIMITIVE_3D_DEPTH_MASK			0x0000035c +#	define		NV20_TCL_PRIMITIVE_3D_DEPTH_WRITE_ENABLE		0x0000035c  #	define		NV20_TCL_PRIMITIVE_3D_STENCIL_MASK			0x00000360  #	define		NV20_TCL_PRIMITIVE_3D_STENCIL_FUNC_FUNC			0x00000364  #	define		NV20_TCL_PRIMITIVE_3D_STENCIL_FUNC_REF			0x00000368 @@ -1081,11 +1083,12 @@ Object NV20_TCL_PRIMITIVE_3D used on: NV20  #	define		NV20_TCL_PRIMITIVE_3D_LIGHT_MODEL_BACK_SIDE_PRODUCT_AMBIENT_PLUS_EMISSION	0x000017a0  #	define		NV20_TCL_PRIMITIVE_3D_COLOR_MATERIAL_BACK		0x000017b0  #	define		NV20_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_ENABLE		0x000017bc -#	define		NV20_TCL_PRIMITIVE_3D_LOGIC_OP				0x000017c0 +#	define		NV20_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_OP			0x000017c0  #	define		NV20_TCL_PRIMITIVE_3D_LIGHT_MODEL_TWO_SIDE_ENABLE	0x000017c4  #	define		NV20_TCL_PRIMITIVE_3D_BEGIN_END				0x000017fc -#	define		NV20_TCL_PRIMITIVE_3D_CLEAR_COLOR			0x00001d90 -#	define		NV20_TCL_PRIMITIVE_3D_CLEAR_MASK			0x00001d94	/* Parameters: clear color a clear color b clear color g clear color r clear depth clear stencil */ +#	define		NV20_TCL_PRIMITIVE_3D_CLEAR_VALUE_DEPTH			0x00001d8c +#	define		NV20_TCL_PRIMITIVE_3D_CLEAR_VALUE_ARGB			0x00001d90 +#	define		NV20_TCL_PRIMITIVE_3D_CLEAR_WHICH_BUFFERS		0x00001d94	/* Parameters: clear color a clear color b clear color g clear color r clear depth clear stencil */  #	define		NV20_TCL_PRIMITIVE_3D_INDEX_DATA			0x00001800	/* Parameters: index1 index0 */  #	define		NV20_TCL_PRIMITIVE_3D_VB_VERTEX_BATCH			0x00001810	/* Parameters: count_vertices offset_vertices */  #	define		NV20_TCL_PRIMITIVE_3D_VERTEX_DATA			0x00001818 @@ -1330,8 +1333,8 @@ Object NV30_TCL_PRIMITIVE_3D used on: NV30 NV40 G70  #	define		NV30_TCL_PRIMITIVE_3D_TX_DEPTH_UNIT(d)			(0x00001840 + d * 0x0004)	/* Parameters: depth NPOT pitch */  #	define		NV30_TCL_PRIMITIVE_3D_VB_VERTEX_BATCH			0x00001814	/* Parameters: count_vertices offset_vertices */  #	define		NV30_TCL_PRIMITIVE_3D_VERTEX_DATA			0x00001818 -#	define		NV30_TCL_PRIMITIVE_3D_LOGIC_OP_ENABLE			0x00000374 -#	define		NV30_TCL_PRIMITIVE_3D_LOGIC_OP_OP			0x00000378 +#	define		NV30_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_ENABLE		0x00000374 +#	define		NV30_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_OP			0x00000378  #	define		NV30_TCL_PRIMITIVE_3D_SET_DISPLAY_LIST_MEM_OFFSET	0x0000181c  #	define		NV30_TCL_PRIMITIVE_3D_EXECUTE_DISPLAY_LIST		0x00001824	/* Parameters: length start offset */  #	define		NV30_TCL_PRIMITIVE_3D_POLYGON_MODE_FRONT		0x00001828 diff --git a/src/mesa/drivers/dri/nouveau/nv10_state.c b/src/mesa/drivers/dri/nouveau/nv10_state.c index e752905841..a8592acc84 100644 --- a/src/mesa/drivers/dri/nouveau/nv10_state.c +++ b/src/mesa/drivers/dri/nouveau/nv10_state.c @@ -40,8 +40,8 @@ void nv10AlphaFunc(GLcontext *ctx, GLenum func, GLfloat ref)  	GLubyte ubRef;  	CLAMPED_FLOAT_TO_UBYTE(ubRef, ref); -	BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC, 2); -	OUT_RING(func);     /* NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC */ +	BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_FUNC, 2); +	OUT_RING(func);     /* NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_FUNC */  	OUT_RING(ubRef);    /* NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_REF  */  } @@ -157,7 +157,7 @@ void nv10DepthFunc(GLcontext *ctx, GLenum func)  void nv10DepthMask(GLcontext *ctx, GLboolean flag)  {  	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); -	BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_DEPTH_MASK, 1); +	BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_DEPTH_WRITE_ENABLE, 1);  	OUT_RING(flag);  } @@ -180,7 +180,7 @@ void nv10Enable(GLcontext *ctx, GLenum cap, GLboolean state)  	switch(cap)  	{  		case GL_ALPHA_TEST: -			BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_ALPHA_TEST_ENABLE, 1); +			BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_ALPHA_FUNC_ENABLE, 1);  			OUT_RING(state);  			break;  //		case GL_AUTO_NORMAL: @@ -198,7 +198,7 @@ void nv10Enable(GLcontext *ctx, GLenum cap, GLboolean state)  			OUT_RING(state);  			break;  		case GL_COLOR_LOGIC_OP: -			BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_LOGIC_OP_ENABLE, 1); +			BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_ENABLE, 1);  			OUT_RING(state);  			break;  //		case GL_COLOR_MATERIAL: @@ -250,7 +250,10 @@ void nv10Enable(GLcontext *ctx, GLenum cap, GLboolean state)  			else  				OUT_RING(0x0);  			break; -//		case GL_LINE_SMOOTH: +		case GL_LINE_SMOOTH: +			BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_LINE_SMOOTH_ENABLE, 1); +			OUT_RING(state); +			break;  //		case GL_LINE_STIPPLE:  //		case GL_MAP1_COLOR_4:  //		case GL_MAP1_INDEX: @@ -292,10 +295,6 @@ void nv10Enable(GLcontext *ctx, GLenum cap, GLboolean state)  			BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_POLYGON_SMOOTH_ENABLE, 1);  			OUT_RING(state);  			break; -		case GL_LINE_SMOOTH: -			BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_LINE_SMOOTH_ENABLE, 1); -			OUT_RING(state); -			break;  		case GL_POINT_SMOOTH:  			BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_POINT_SMOOTH_ENABLE, 1);  			OUT_RING(state); @@ -307,7 +306,7 @@ void nv10Enable(GLcontext *ctx, GLenum cap, GLboolean state)  //		case GL_SCISSOR_TEST:  //		case GL_SEPARABLE_2D:  		case GL_STENCIL_TEST: -			BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_STENCIL_TEST_ENABLE, 1); +			BEGIN_RING_SIZE(NvSub3D, NV10_TCL_PRIMITIVE_3D_STENCIL_ENABLE, 1);  			OUT_RING(state);  			break;  //		case GL_TEXTURE_GEN_Q: diff --git a/src/mesa/drivers/dri/nouveau/nv20_state.c b/src/mesa/drivers/dri/nouveau/nv20_state.c new file mode 100644 index 0000000000..88b8d6d204 --- /dev/null +++ b/src/mesa/drivers/dri/nouveau/nv20_state.c @@ -0,0 +1,575 @@ +/************************************************************************** + +Copyright 2006 Nouveau +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +on the rights to use, copy, modify, merge, publish, distribute, sub +license, and/or sell copies of the Software, and to permit persons to whom +the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL +ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. + +**************************************************************************/ + +#include "nouveau_context.h" +#include "nouveau_object.h" +#include "nouveau_fifo.h" +#include "nouveau_reg.h" + +#include "tnl/t_pipeline.h" + +#include "mtypes.h" +#include "colormac.h" + +static void nv20AlphaFunc(GLcontext *ctx, GLenum func, GLfloat ref) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	GLubyte ubRef; +	CLAMPED_FLOAT_TO_UBYTE(ubRef, ref); + +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_ALPHA_FUNC_FUNC, 2); +	OUT_RING(func);     /* NV20_TCL_PRIMITIVE_3D_ALPHA_FUNC_FUNC */ +	OUT_RING(ubRef);    /* NV20_TCL_PRIMITIVE_3D_ALPHA_FUNC_REF  */ +} + +static void nv20BlendColor(GLcontext *ctx, const GLfloat color[4]) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx);  +	GLubyte cf[4]; + +	CLAMPED_FLOAT_TO_UBYTE(cf[0], color[0]); +	CLAMPED_FLOAT_TO_UBYTE(cf[1], color[1]); +	CLAMPED_FLOAT_TO_UBYTE(cf[2], color[2]); +	CLAMPED_FLOAT_TO_UBYTE(cf[3], color[3]); + +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_BLEND_COLOR, 1); +	OUT_RING(PACK_COLOR_8888(cf[3], cf[1], cf[2], cf[0])); +} + +static void nv20BlendEquationSeparate(GLcontext *ctx, GLenum modeRGB, GLenum modeA) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_BLEND_EQUATION, 1); +	OUT_RING((modeA<<16) | modeRGB); +} + + +static void nv20BlendFuncSeparate(GLcontext *ctx, GLenum sfactorRGB, GLenum dfactorRGB, +		GLenum sfactorA, GLenum dfactorA) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_BLEND_FUNC_SRC, 2); +	OUT_RING((sfactorA<<16) | sfactorRGB); +	OUT_RING((dfactorA<<16) | dfactorRGB); +} + +static void nv20ClearColor(GLcontext *ctx, const GLfloat color[4]) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	GLubyte c[4]; +	UNCLAMPED_FLOAT_TO_RGBA_CHAN(c,color); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_CLEAR_VALUE_ARGB, 1); +	OUT_RING(PACK_COLOR_8888(c[3],c[0],c[1],c[2])); +} + +static void nv20ClearDepth(GLcontext *ctx, GLclampd d) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	nmesa->clear_value=((nmesa->clear_value&0x000000FF)|(((uint32_t)(d*0xFFFFFF))<<8)); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_CLEAR_VALUE_DEPTH, 1); +	OUT_RING(nmesa->clear_value); +} + +/* we're don't support indexed buffers +   void (*ClearIndex)(GLcontext *ctx, GLuint index) + */ + +static void nv20ClearStencil(GLcontext *ctx, GLint s) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	nmesa->clear_value=((nmesa->clear_value&0xFFFFFF00)|(s&0x000000FF)); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_CLEAR_VALUE_DEPTH, 1); +	OUT_RING(nmesa->clear_value); +} + +static void nv20ClipPlane(GLcontext *ctx, GLenum plane, const GLfloat *equation) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_CLIP_PLANE_A(plane), 4); +	OUT_RINGf(equation[0]); +	OUT_RINGf(equation[1]); +	OUT_RINGf(equation[2]); +	OUT_RINGf(equation[3]); +} + +static void nv20ColorMask(GLcontext *ctx, GLboolean rmask, GLboolean gmask, +		GLboolean bmask, GLboolean amask ) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_COLOR_MASK, 1); +	OUT_RING(((amask && 0x01) << 24) | ((rmask && 0x01) << 16) | ((gmask && 0x01)<< 8) | ((bmask && 0x01) << 0)); +} + +static void nv20ColorMaterial(GLcontext *ctx, GLenum face, GLenum mode) +{ +	// TODO I need love +} + +static void nv20CullFace(GLcontext *ctx, GLenum mode) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_CULL_FACE, 1); +	OUT_RING(mode); +} + +static void nv20FrontFace(GLcontext *ctx, GLenum mode) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_FRONT_FACE, 1); +	OUT_RING(mode); +} + +static void nv20DepthFunc(GLcontext *ctx, GLenum func) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_DEPTH_FUNC, 1); +	OUT_RING(func); +} + +static void nv20DepthMask(GLcontext *ctx, GLboolean flag) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_DEPTH_WRITE_ENABLE, 1); +	OUT_RING(flag); +} + +static void nv20DepthRange(GLcontext *ctx, GLclampd nearval, GLclampd farval) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_DEPTH_RANGE_NEAR, 2); +	OUT_RINGf(nearval); +	OUT_RINGf(farval); +} + +/** Specify the current buffer for writing */ +//void (*DrawBuffer)( GLcontext *ctx, GLenum buffer ); +/** Specify the buffers for writing for fragment programs*/ +//void (*DrawBuffers)( GLcontext *ctx, GLsizei n, const GLenum *buffers ); + +static void nv20Enable(GLcontext *ctx, GLenum cap, GLboolean state) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	switch(cap) +	{ +		case GL_ALPHA_TEST: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_ALPHA_FUNC_ENABLE, 1); +			OUT_RING(state); +			break; +//		case GL_AUTO_NORMAL: +		case GL_BLEND: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_BLEND_FUNC_ENABLE, 1); +			OUT_RING(state); +			break; +		case GL_CLIP_PLANE0: +		case GL_CLIP_PLANE1: +		case GL_CLIP_PLANE2: +		case GL_CLIP_PLANE3: +		case GL_CLIP_PLANE4: +		case GL_CLIP_PLANE5: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_CLIP_PLANE_ENABLE(cap-GL_CLIP_PLANE0), 1); +			OUT_RING(state); +			break; +		case GL_COLOR_LOGIC_OP: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_ENABLE, 1); +			OUT_RING(state); +			break; +//		case GL_COLOR_MATERIAL: +//		case GL_COLOR_SUM_EXT: +//		case GL_COLOR_TABLE: +//		case GL_CONVOLUTION_1D: +//		case GL_CONVOLUTION_2D: +		case GL_CULL_FACE: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_CULL_FACE_ENABLE, 1); +			OUT_RING(state); +			break; +		case GL_DEPTH_TEST: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_DEPTH_TEST_ENABLE, 1); +			OUT_RING(state); +			break; +		case GL_DITHER: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_DITHER_ENABLE, 1); +			OUT_RING(state); +			break; +		case GL_FOG: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_FOG_ENABLE, 1); +			OUT_RING(state); +			break; +//		case GL_HISTOGRAM: +//		case GL_INDEX_LOGIC_OP: +		case GL_LIGHT0: +		case GL_LIGHT1: +		case GL_LIGHT2: +		case GL_LIGHT3: +		case GL_LIGHT4: +		case GL_LIGHT5: +		case GL_LIGHT6: +		case GL_LIGHT7: +			{ +			uint32_t mask=0x11<<(2*(cap-GL_LIGHT0)); +			nmesa->enabled_lights=((nmesa->enabled_lights&mask)|(mask*state)); +			if (nmesa->lighting_enabled) +			{ +				BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_ENABLED_LIGHTS, 1); +				OUT_RING(nmesa->enabled_lights); +			} +			break; +			} +		case GL_LIGHTING: +			nmesa->lighting_enabled=state; +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_ENABLED_LIGHTS, 1); +			if (nmesa->lighting_enabled) +				OUT_RING(nmesa->enabled_lights); +			else +				OUT_RING(0x0); +			break; +		case GL_LINE_SMOOTH: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LINE_SMOOTH_ENABLE, 1); +			OUT_RING(state); +			break; +//		case GL_LINE_STIPPLE: +//		case GL_MAP1_COLOR_4: +//		case GL_MAP1_INDEX: +//		case GL_MAP1_NORMAL: +//		case GL_MAP1_TEXTURE_COORD_1: +//		case GL_MAP1_TEXTURE_COORD_2: +//		case GL_MAP1_TEXTURE_COORD_3: +//		case GL_MAP1_TEXTURE_COORD_4: +//		case GL_MAP1_VERTEX_3: +//		case GL_MAP1_VERTEX_4: +//		case GL_MAP2_COLOR_4: +//		case GL_MAP2_INDEX: +//		case GL_MAP2_NORMAL: +//		case GL_MAP2_TEXTURE_COORD_1: +//		case GL_MAP2_TEXTURE_COORD_2: +//		case GL_MAP2_TEXTURE_COORD_3: +//		case GL_MAP2_TEXTURE_COORD_4: +//		case GL_MAP2_VERTEX_3: +//		case GL_MAP2_VERTEX_4: +//		case GL_MINMAX: +		case GL_NORMALIZE: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_NORMALIZE_ENABLE, 1); +			OUT_RING(state); +			break; +//		case GL_POINT_SMOOTH: +		case GL_POLYGON_OFFSET_POINT: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POLYGON_OFFSET_POINT_ENABLE, 1); +			OUT_RING(state); +			break; +		case GL_POLYGON_OFFSET_LINE: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POLYGON_OFFSET_LINE_ENABLE, 1); +			OUT_RING(state); +			break; +		case GL_POLYGON_OFFSET_FILL: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POLYGON_OFFSET_FILL_ENABLE, 1); +			OUT_RING(state); +			break; +		case GL_POLYGON_SMOOTH: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POLYGON_SMOOTH_ENABLE, 1); +			OUT_RING(state); +			break; +		case GL_POLYGON_STIPPLE: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POLYGON_STIPPLE_ENABLE, 1); +			OUT_RING(state); +			break; +//		case GL_POST_COLOR_MATRIX_COLOR_TABLE: +//		case GL_POST_CONVOLUTION_COLOR_TABLE: +//		case GL_RESCALE_NORMAL: +//		case GL_SCISSOR_TEST: +//		case GL_SEPARABLE_2D: +		case GL_STENCIL_TEST: +			// TODO BACK and FRONT ? +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_STENCIL_ENABLE, 1); +			OUT_RING(state); +			break; +//		case GL_TEXTURE_GEN_Q: +//		case GL_TEXTURE_GEN_R: +//		case GL_TEXTURE_GEN_S: +//		case GL_TEXTURE_GEN_T: +//		case GL_TEXTURE_1D: +//		case GL_TEXTURE_2D: +//		case GL_TEXTURE_3D: +	} +} + +static void nv20Fogfv(GLcontext *ctx, GLenum pname, const GLfloat *params) +{ +    nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +    switch(pname) +    { +        case GL_FOG_MODE: +            BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_FOG_MODE, 1); +            //OUT_RING (params); +            break; +            /* TODO: unsure about the rest.*/ +        default: +            break; +    } + +} +    +static void nv20Hint(GLcontext *ctx, GLenum target, GLenum mode) +{ +	// TODO I need love (fog and line_smooth hints) +} + +// void (*IndexMask)(GLcontext *ctx, GLuint mask); + +static void nv20Lightfv(GLcontext *ctx, GLenum light, GLenum pname, const GLfloat *params ) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	/* not sure where the fourth param value goes...*/ +	switch(pname) +	{ +		case GL_AMBIENT: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_FRONT_SIDE_PRODUCT_AMBIENT_A(light), 3); +			OUT_RINGf(params[0]); +			OUT_RINGf(params[1]); +			OUT_RINGf(params[2]); +			break; +		case GL_DIFFUSE: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_FRONT_SIDE_PRODUCT_DIFFUSE_A(light), 3); +			OUT_RINGf(params[0]); +			OUT_RINGf(params[1]); +			OUT_RINGf(params[2]); +			break; +		case GL_SPECULAR: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_FRONT_SIDE_PRODUCT_SPECULAR_A(light), 3); +			OUT_RINGf(params[0]); +			OUT_RINGf(params[1]); +			OUT_RINGf(params[2]); +			break; +		case GL_SPOT_DIRECTION: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_SPOT_DIR_X(light), 3); +			OUT_RINGf(params[0]); +			OUT_RINGf(params[1]); +			OUT_RINGf(params[2]); +			break; +		case GL_POSITION: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_POSITION_X(light), 3); +			OUT_RINGf(params[0]); +			OUT_RINGf(params[1]); +			OUT_RINGf(params[2]); +			break; +		case GL_SPOT_EXPONENT: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_SPOT_EXPONENT(light), 1); +			OUT_RINGf(*params); +			break; +		case GL_SPOT_CUTOFF: +			/* you can't factor these */ +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_SPOT_CUTOFF_A(light), 1); +			OUT_RINGf(params[0]); +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_SPOT_CUTOFF_B(light), 1); +			OUT_RINGf(params[1]); +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_SPOT_CUTOFF_C(light), 1); +			OUT_RINGf(params[2]); +			break; +		case GL_CONSTANT_ATTENUATION: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_CONSTANT_ATTENUATION(light), 1); +			OUT_RINGf(*params); +			break; +		case GL_LINEAR_ATTENUATION: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_LINEAR_ATTENUATION(light), 1); +			OUT_RINGf(*params); +			break; +		case GL_QUADRATIC_ATTENUATION: +			BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LIGHT_QUADRATIC_ATTENUATION(light), 1); +			OUT_RINGf(*params); +			break; +		default: +			break; +	} +} + +/** Set the lighting model parameters */ +static void (*LightModelfv)(GLcontext *ctx, GLenum pname, const GLfloat *params); + + +static void nv20LineStipple(GLcontext *ctx, GLint factor, GLushort pattern ) +{ +/*	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LINE_STIPPLE_PATTERN, 1); +	OUT_RING((pattern << 16) | factor);*/ +} + +static void nv20LineWidth(GLcontext *ctx, GLfloat width) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_LINE_WIDTH, 1); +	OUT_RINGf(width); +} + +static void nv20LogicOpcode(GLcontext *ctx, GLenum opcode) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_OP, 1); +	OUT_RING(opcode); +} + +static void nv20PointParameterfv(GLcontext *ctx, GLenum pname, const GLfloat *params) +{ +	/*TODO: not sure what goes here. */ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	 +} + +/** Specify the diameter of rasterized points */ +static void nv20PointSize(GLcontext *ctx, GLfloat size) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POINT_SIZE, 1); +	OUT_RINGf(size); +} + +/** Select a polygon rasterization mode */ +static void nv20PolygonMode(GLcontext *ctx, GLenum face, GLenum mode) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); + +	if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { +		BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POLYGON_MODE_FRONT, 1); +		OUT_RING(mode); +	} +	if (face == GL_BACK || face == GL_FRONT_AND_BACK) { +		BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_POLYGON_MODE_BACK, 1); +		OUT_RING(mode); +	} +} + +/** Set the scale and units used to calculate depth values */ +void (*PolygonOffset)(GLcontext *ctx, GLfloat factor, GLfloat units); +/** Set the polygon stippling pattern */ +void (*PolygonStipple)(GLcontext *ctx, const GLubyte *mask ); +/* Specifies the current buffer for reading */ +void (*ReadBuffer)( GLcontext *ctx, GLenum buffer ); +/** Set rasterization mode */ +void (*RenderMode)(GLcontext *ctx, GLenum mode ); +/** Define the scissor box */ +void (*Scissor)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h); +/** Select flat or smooth shading */ +void (*ShadeModel)(GLcontext *ctx, GLenum mode); + +/** OpenGL 2.0 two-sided StencilFunc */ +static void nv20StencilFuncSeparate(GLcontext *ctx, GLenum face, GLenum func, +		GLint ref, GLuint mask) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); + +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_STENCIL_FUNC_FUNC, 3); +	OUT_RING(func); +	OUT_RING(ref); +	OUT_RING(mask); +} + +/** OpenGL 2.0 two-sided StencilMask */ +static void nv20StencilMaskSeparate(GLcontext *ctx, GLenum face, GLuint mask) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); + +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_STENCIL_MASK, 1); +	OUT_RING(mask); +} + +/** OpenGL 2.0 two-sided StencilOp */ +static void nv20StencilOpSeparate(GLcontext *ctx, GLenum face, GLenum fail, +		GLenum zfail, GLenum zpass) +{ +	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); + +	BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_STENCIL_OP_FAIL, 1); +	OUT_RING(fail); +	OUT_RING(zfail); +	OUT_RING(zpass); +} + +/** Control the generation of texture coordinates */ +void (*TexGen)(GLcontext *ctx, GLenum coord, GLenum pname, +		const GLfloat *params); +/** Set texture environment parameters */ +void (*TexEnv)(GLcontext *ctx, GLenum target, GLenum pname, +		const GLfloat *param); +/** Set texture parameters */ +void (*TexParameter)(GLcontext *ctx, GLenum target, +		struct gl_texture_object *texObj, +		GLenum pname, const GLfloat *params); +void (*TextureMatrix)(GLcontext *ctx, GLuint unit, const GLmatrix *mat); + +/** Set the viewport */ +static void nv20Viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h) +{ +    /* TODO: Where do the VIEWPORT_XFRM_* regs come in? */ +    nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); +    BEGIN_RING_SIZE(NvSub3D, NV20_TCL_PRIMITIVE_3D_VIEWPORT_HORIZ, 2); +    OUT_RING((w << 16) | x); +    OUT_RING((h << 16) | y); +} + +void nv20InitStateFuncs(struct dd_function_table *func) +{ +	func->AlphaFunc			= nv20AlphaFunc; +	func->BlendColor		= nv20BlendColor; +	func->BlendEquationSeparate	= nv20BlendEquationSeparate; +	func->BlendFuncSeparate		= nv20BlendFuncSeparate; +	func->ClearColor		= nv20ClearColor; +	func->ClearDepth		= nv20ClearDepth; +	func->ClearStencil		= nv20ClearStencil; +	func->ClipPlane			= nv20ClipPlane; +	func->ColorMask			= nv20ColorMask; +	func->ColorMaterial		= nv20ColorMaterial; +	func->CullFace			= nv20CullFace; +	func->FrontFace			= nv20FrontFace; +	func->DepthFunc			= nv20DepthFunc; +	func->DepthMask			= nv20DepthMask; +	func->DepthRange		= nv20DepthRange; +	func->Enable			= nv20Enable; +	func->Fogfv			= nv20Fogfv; +	func->Hint			= nv20Hint; +	func->Lightfv			= nv20Lightfv; +/*	func->LightModelfv		= nv20LightModelfv; */ +	func->LineStipple		= nv20LineStipple; +	func->LineWidth			= nv20LineWidth; +	func->LogicOpcode		= nv20LogicOpcode; +	func->PointParameterfv		= nv20PointParameterfv; +	func->PointSize			= nv20PointSize; +	func->PolygonMode		= nv20PolygonMode; +#if 0 +	func->PolygonOffset		= nv20PolygonOffset; +	func->PolygonStipple		= nv20PolygonStipple; +	func->ReadBuffer		= nv20ReadBuffer; +	func->RenderMode		= nv20RenderMode; +	func->Scissor			= nv20Scissor; +	func->ShadeModel		= nv20ShaderModel; +#endif +	func->StencilFuncSeparate	= nv20StencilFuncSeparate; +	func->StencilMaskSeparate	= nv20StencilMaskSeparate; +	func->StencilOpSeparate		= nv20StencilOpSeparate; +#if 0 +	func->TexGen			= nv20TexGen; +	func->TexParameter		= nv20TexParameter; +	func->TextureMatrix		= nv20TextureMatrix; +#endif +	func->Viewport			= nv20Viewport; +} + diff --git a/src/mesa/drivers/dri/nouveau/nv30_state.c b/src/mesa/drivers/dri/nouveau/nv30_state.c index 470f18d80a..dffd97b4e5 100644 --- a/src/mesa/drivers/dri/nouveau/nv30_state.c +++ b/src/mesa/drivers/dri/nouveau/nv30_state.c @@ -193,7 +193,7 @@ static void nv30Enable(GLcontext *ctx, GLenum cap, GLboolean state)  			OUT_RING(state);  			break;  		case GL_COLOR_LOGIC_OP: -			BEGIN_RING_SIZE(NvSub3D, NV30_TCL_PRIMITIVE_3D_LOGIC_OP_ENABLE, 1); +			BEGIN_RING_SIZE(NvSub3D, NV30_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_ENABLE, 1);  			OUT_RING(state);  			break;  //		case GL_COLOR_MATERIAL: @@ -421,7 +421,7 @@ static void nv30LineWidth(GLcontext *ctx, GLfloat width)  static void nv30LogicOpcode(GLcontext *ctx, GLenum opcode)  {  	nouveauContextPtr nmesa = NOUVEAU_CONTEXT(ctx); -	BEGIN_RING_SIZE(NvSub3D, NV30_TCL_PRIMITIVE_3D_LOGIC_OP_OP, 1); +	BEGIN_RING_SIZE(NvSub3D, NV30_TCL_PRIMITIVE_3D_COLOR_LOGIC_OP_OP, 1);  	OUT_RING(opcode);  } | 
