diff options
| author | Christoph Bumiller <e0425955@student.tuwien.ac.at> | 2009-09-24 17:37:08 +0200 | 
|---|---|---|
| committer | Christoph Bumiller <e0425955@student.tuwien.ac.at> | 2009-09-25 11:01:45 +0200 | 
| commit | 513cadf5afad18516f7299ade246f59d520753d0 (patch) | |
| tree | 386943a30b46209e8ca91d1b63f83b8876958c7e /src/gallium | |
| parent | 001daf78c87b2d194b51bc650bf9f917d4224e31 (diff) | |
nv50: actually enable view volume clipping
Until now, only primitives wholly outside the view volume
were not drawn.
This was only visibile when using a viewport smaller than
the window size, naturally.
Diffstat (limited to 'src/gallium')
| -rw-r--r-- | src/gallium/drivers/nv50/nv50_state_validate.c | 11 | 
1 files changed, 10 insertions, 1 deletions
| diff --git a/src/gallium/drivers/nv50/nv50_state_validate.c b/src/gallium/drivers/nv50/nv50_state_validate.c index 5a3559ed18..4ed76973c4 100644 --- a/src/gallium/drivers/nv50/nv50_state_validate.c +++ b/src/gallium/drivers/nv50/nv50_state_validate.c @@ -312,7 +312,7 @@ scissor_uptodate:  			goto viewport_uptodate;  		nv50->state.viewport_bypass = bypass; -		so = so_new(12, 0); +		so = so_new(14, 0);  		if (!bypass) {  			so_method(so, tesla, NV50TCL_VIEWPORT_TRANSLATE(0), 3);  			so_data  (so, fui(nv50->viewport.translate[0])); @@ -325,12 +325,21 @@ scissor_uptodate:  			so_method(so, tesla, NV50TCL_VIEWPORT_TRANSFORM_EN, 1);  			so_data  (so, 1); +			/* 0x0000 = remove whole primitive only (xyz) +			 * 0x1018 = remove whole primitive only (xy), clamp z +			 * 0x1080 = clip primitive (xyz) +			 * 0x1098 = clip primitive (xy), clamp z +			 */ +			so_method(so, tesla, NV50TCL_VIEW_VOLUME_CLIP_CTRL, 1); +			so_data  (so, 0x1080);  			/* no idea what 0f90 does */  			so_method(so, tesla, 0x0f90, 1);  			so_data  (so, 0);  		} else {  			so_method(so, tesla, NV50TCL_VIEWPORT_TRANSFORM_EN, 1);  			so_data  (so, 0); +			so_method(so, tesla, NV50TCL_VIEW_VOLUME_CLIP_CTRL, 1); +			so_data  (so, 0x0000);  			so_method(so, tesla, 0x0f90, 1);  			so_data  (so, 1);  		} | 
