summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <electronghost@users.sourceforge.net>2002-07-02 21:34:25 +0000
committerTim Smith <electronghost@users.sourceforge.net>2002-07-02 21:34:25 +0000
commitcc45cc060963356edd832d1bbdf21da46e01c8fb (patch)
treedec27ec2878debd4d7b5b9f5c17fba78099b3051
parentbb91bc0879ccc1981c49fa761e9bd58bceb1e5cd (diff)
Fix lockup on faster machines when drawing in multiple clip rectangles
(e.g. when part of a 3D window is obscured by another window)
-rw-r--r--linux/radeon_drv.h1
-rw-r--r--linux/radeon_state.c5
2 files changed, 3 insertions, 3 deletions
diff --git a/linux/radeon_drv.h b/linux/radeon_drv.h
index 31e598b2..457c183a 100644
--- a/linux/radeon_drv.h
+++ b/linux/radeon_drv.h
@@ -477,6 +477,7 @@ extern int radeon_cp_flip( struct inode *inode, struct file *filp,
# define RADEON_CNTL_HOSTDATA_BLT 0x00009400
# define RADEON_CNTL_PAINT_MULTI 0x00009A00
# define RADEON_CNTL_BITBLT_MULTI 0x00009B00
+# define RADEON_CNTL_SET_SCISSORS 0xC0001E00
#define RADEON_CP_PACKET_MASK 0xC0000000
#define RADEON_CP_PACKET_COUNT_MASK 0x3fff0000
diff --git a/linux/radeon_state.c b/linux/radeon_state.c
index ff2fd66d..a5fb0c3f 100644
--- a/linux/radeon_state.c
+++ b/linux/radeon_state.c
@@ -48,10 +48,9 @@ static inline void radeon_emit_clip_rect( drm_radeon_private_t *dev_priv,
DRM_DEBUG( " box: x1=%d y1=%d x2=%d y2=%d\n",
box->x1, box->y1, box->x2, box->y2 );
- BEGIN_RING( 4 );
- OUT_RING( CP_PACKET0( RADEON_RE_TOP_LEFT, 0 ) );
+ BEGIN_RING( 3 );
+ OUT_RING( CP_PACKET3( RADEON_CNTL_SET_SCISSORS, 1 ));
OUT_RING( (box->y1 << 16) | box->x1 );
- OUT_RING( CP_PACKET0( RADEON_RE_WIDTH_HEIGHT, 0 ) );
/* OUT_RING( ((box->y2 - 1) << 16) | (box->x2 - 1) );*/
OUT_RING( (box->y2 << 16) | box->x2 );
ADVANCE_RING();