Deleted Added
full compact
r128_state.c (113995) r128_state.c (119098)
1/* r128_state.c -- State support for r128 -*- linux-c -*-
2 * Created: Thu Jan 27 02:53:43 2000 by gareth@valinux.com
3 *
4 * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
5 * All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),

--- 12 unchanged lines hidden (view full) ---

21 * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
22 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
23 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 * DEALINGS IN THE SOFTWARE.
25 *
26 * Authors:
27 * Gareth Hughes <gareth@valinux.com>
28 *
1/* r128_state.c -- State support for r128 -*- linux-c -*-
2 * Created: Thu Jan 27 02:53:43 2000 by gareth@valinux.com
3 *
4 * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
5 * All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),

--- 12 unchanged lines hidden (view full) ---

21 * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
22 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
23 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 * DEALINGS IN THE SOFTWARE.
25 *
26 * Authors:
27 * Gareth Hughes <gareth@valinux.com>
28 *
29 * $FreeBSD: head/sys/dev/drm/r128_state.c 113995 2003-04-25 01:18:47Z anholt $
29 * $FreeBSD: head/sys/dev/drm/r128_state.c 119098 2003-08-19 02:57:31Z anholt $
30 */
31
32#include "dev/drm/r128.h"
33#include "dev/drm/drmP.h"
34#include "dev/drm/drm.h"
35#include "dev/drm/r128_drm.h"
36#include "dev/drm/r128_drv.h"
37

--- 459 unchanged lines hidden (view full) ---

497 (dev_priv->color_fmt << 8) |
498 R128_GMC_SRC_DATATYPE_COLOR |
499 R128_ROP3_S |
500 R128_DP_SRC_SOURCE_MEMORY |
501 R128_GMC_CLR_CMP_CNTL_DIS |
502 R128_GMC_AUX_CLIP_DIS |
503 R128_GMC_WR_MSK_DIS );
504
30 */
31
32#include "dev/drm/r128.h"
33#include "dev/drm/drmP.h"
34#include "dev/drm/drm.h"
35#include "dev/drm/r128_drm.h"
36#include "dev/drm/r128_drv.h"
37

--- 459 unchanged lines hidden (view full) ---

497 (dev_priv->color_fmt << 8) |
498 R128_GMC_SRC_DATATYPE_COLOR |
499 R128_ROP3_S |
500 R128_DP_SRC_SOURCE_MEMORY |
501 R128_GMC_CLR_CMP_CNTL_DIS |
502 R128_GMC_AUX_CLIP_DIS |
503 R128_GMC_WR_MSK_DIS );
504
505 OUT_RING( dev_priv->back_pitch_offset_c );
506 OUT_RING( dev_priv->front_pitch_offset_c );
505 /* Make this work even if front & back are flipped:
506 */
507 if (dev_priv->current_page == 0) {
508 OUT_RING( dev_priv->back_pitch_offset_c );
509 OUT_RING( dev_priv->front_pitch_offset_c );
510 }
511 else {
512 OUT_RING( dev_priv->front_pitch_offset_c );
513 OUT_RING( dev_priv->back_pitch_offset_c );
514 }
507
508 OUT_RING( (x << 16) | y );
509 OUT_RING( (x << 16) | y );
510 OUT_RING( (w << 16) | h );
511
512 ADVANCE_RING();
513 }
514

--- 10 unchanged lines hidden (view full) ---

525
526 ADVANCE_RING();
527}
528
529static void r128_cce_dispatch_flip( drm_device_t *dev )
530{
531 drm_r128_private_t *dev_priv = dev->dev_private;
532 RING_LOCALS;
515
516 OUT_RING( (x << 16) | y );
517 OUT_RING( (x << 16) | y );
518 OUT_RING( (w << 16) | h );
519
520 ADVANCE_RING();
521 }
522

--- 10 unchanged lines hidden (view full) ---

533
534 ADVANCE_RING();
535}
536
537static void r128_cce_dispatch_flip( drm_device_t *dev )
538{
539 drm_r128_private_t *dev_priv = dev->dev_private;
540 RING_LOCALS;
533 DRM_DEBUG( "page=%d\n", dev_priv->current_page );
541 DRM_DEBUG("%s: page=%d pfCurrentPage=%d\n",
542 __FUNCTION__,
543 dev_priv->current_page,
544 dev_priv->sarea_priv->pfCurrentPage);
534
535#if R128_PERFORMANCE_BOXES
536 /* Do some trivial performance monitoring...
537 */
538 r128_cce_performance_boxes( dev_priv );
539#endif
540
541 BEGIN_RING( 4 );
542
543 R128_WAIT_UNTIL_PAGE_FLIPPED();
544 OUT_RING( CCE_PACKET0( R128_CRTC_OFFSET, 0 ) );
545
546 if ( dev_priv->current_page == 0 ) {
547 OUT_RING( dev_priv->back_offset );
545
546#if R128_PERFORMANCE_BOXES
547 /* Do some trivial performance monitoring...
548 */
549 r128_cce_performance_boxes( dev_priv );
550#endif
551
552 BEGIN_RING( 4 );
553
554 R128_WAIT_UNTIL_PAGE_FLIPPED();
555 OUT_RING( CCE_PACKET0( R128_CRTC_OFFSET, 0 ) );
556
557 if ( dev_priv->current_page == 0 ) {
558 OUT_RING( dev_priv->back_offset );
548 dev_priv->current_page = 1;
549 } else {
550 OUT_RING( dev_priv->front_offset );
559 } else {
560 OUT_RING( dev_priv->front_offset );
551 dev_priv->current_page = 0;
552 }
553
554 ADVANCE_RING();
555
556 /* Increment the frame counter. The client-side 3D driver must
557 * throttle the framerate by waiting for this value before
558 * performing the swapbuffer ioctl.
559 */
560 dev_priv->sarea_priv->last_frame++;
561 }
562
563 ADVANCE_RING();
564
565 /* Increment the frame counter. The client-side 3D driver must
566 * throttle the framerate by waiting for this value before
567 * performing the swapbuffer ioctl.
568 */
569 dev_priv->sarea_priv->last_frame++;
570 dev_priv->sarea_priv->pfCurrentPage = dev_priv->current_page =
571 1 - dev_priv->current_page;
561
562 BEGIN_RING( 2 );
563
564 OUT_RING( CCE_PACKET0( R128_LAST_FRAME_REG, 0 ) );
565 OUT_RING( dev_priv->sarea_priv->last_frame );
566
567 ADVANCE_RING();
568}

--- 230 unchanged lines hidden (view full) ---

799 */
800 switch ( blit->format ) {
801 case R128_DATATYPE_ARGB8888:
802 dword_shift = 0;
803 break;
804 case R128_DATATYPE_ARGB1555:
805 case R128_DATATYPE_RGB565:
806 case R128_DATATYPE_ARGB4444:
572
573 BEGIN_RING( 2 );
574
575 OUT_RING( CCE_PACKET0( R128_LAST_FRAME_REG, 0 ) );
576 OUT_RING( dev_priv->sarea_priv->last_frame );
577
578 ADVANCE_RING();
579}

--- 230 unchanged lines hidden (view full) ---

810 */
811 switch ( blit->format ) {
812 case R128_DATATYPE_ARGB8888:
813 dword_shift = 0;
814 break;
815 case R128_DATATYPE_ARGB1555:
816 case R128_DATATYPE_RGB565:
817 case R128_DATATYPE_ARGB4444:
818 case R128_DATATYPE_YVYU422:
819 case R128_DATATYPE_VYUY422:
807 dword_shift = 1;
808 break;
809 case R128_DATATYPE_CI8:
810 case R128_DATATYPE_RGB8:
811 dword_shift = 2;
812 break;
813 default:
814 DRM_ERROR( "invalid blit format %d\n", blit->format );

--- 446 unchanged lines hidden (view full) ---

1261
1262 /* Make sure we restore the 3D state next time.
1263 */
1264 dev_priv->sarea_priv->dirty |= R128_UPLOAD_CONTEXT | R128_UPLOAD_MASKS;
1265
1266 return 0;
1267}
1268
820 dword_shift = 1;
821 break;
822 case R128_DATATYPE_CI8:
823 case R128_DATATYPE_RGB8:
824 dword_shift = 2;
825 break;
826 default:
827 DRM_ERROR( "invalid blit format %d\n", blit->format );

--- 446 unchanged lines hidden (view full) ---

1274
1275 /* Make sure we restore the 3D state next time.
1276 */
1277 dev_priv->sarea_priv->dirty |= R128_UPLOAD_CONTEXT | R128_UPLOAD_MASKS;
1278
1279 return 0;
1280}
1281
1282static int r128_do_init_pageflip( drm_device_t *dev )
1283{
1284 drm_r128_private_t *dev_priv = dev->dev_private;
1285 DRM_DEBUG( "\n" );
1286
1287 dev_priv->crtc_offset = R128_READ( R128_CRTC_OFFSET );
1288 dev_priv->crtc_offset_cntl = R128_READ( R128_CRTC_OFFSET_CNTL );
1289
1290 R128_WRITE( R128_CRTC_OFFSET, dev_priv->front_offset );
1291 R128_WRITE( R128_CRTC_OFFSET_CNTL,
1292 dev_priv->crtc_offset_cntl | R128_CRTC_OFFSET_FLIP_CNTL );
1293
1294 dev_priv->page_flipping = 1;
1295 dev_priv->current_page = 0;
1296 dev_priv->sarea_priv->pfCurrentPage = dev_priv->current_page;
1297
1298 return 0;
1299}
1300
1301int r128_do_cleanup_pageflip( drm_device_t *dev )
1302{
1303 drm_r128_private_t *dev_priv = dev->dev_private;
1304 DRM_DEBUG( "\n" );
1305
1306 R128_WRITE( R128_CRTC_OFFSET, dev_priv->crtc_offset );
1307 R128_WRITE( R128_CRTC_OFFSET_CNTL, dev_priv->crtc_offset_cntl );
1308
1309 if (dev_priv->current_page != 0)
1310 r128_cce_dispatch_flip( dev );
1311
1312 dev_priv->page_flipping = 0;
1313 return 0;
1314}
1315
1316/* Swapping and flipping are different operations, need different ioctls.
1317 * They can & should be intermixed to support multiple 3d windows.
1318 */
1319
1320int r128_cce_flip( DRM_IOCTL_ARGS )
1321{
1322 DRM_DEVICE;
1323 drm_r128_private_t *dev_priv = dev->dev_private;
1324 DRM_DEBUG( "%s\n", __FUNCTION__ );
1325
1326 LOCK_TEST_WITH_RETURN( dev, filp );
1327
1328 RING_SPACE_TEST_WITH_RETURN( dev_priv );
1329
1330 if (!dev_priv->page_flipping)
1331 r128_do_init_pageflip( dev );
1332
1333 r128_cce_dispatch_flip( dev );
1334
1335 return 0;
1336}
1337
1269int r128_cce_swap( DRM_IOCTL_ARGS )
1270{
1271 DRM_DEVICE;
1272 drm_r128_private_t *dev_priv = dev->dev_private;
1273 drm_r128_sarea_t *sarea_priv = dev_priv->sarea_priv;
1274 DRM_DEBUG( "%s\n", __FUNCTION__ );
1275
1276 LOCK_TEST_WITH_RETURN( dev, filp );
1277
1278 RING_SPACE_TEST_WITH_RETURN( dev_priv );
1279
1280 if ( sarea_priv->nbox > R128_NR_SAREA_CLIPRECTS )
1281 sarea_priv->nbox = R128_NR_SAREA_CLIPRECTS;
1282
1338int r128_cce_swap( DRM_IOCTL_ARGS )
1339{
1340 DRM_DEVICE;
1341 drm_r128_private_t *dev_priv = dev->dev_private;
1342 drm_r128_sarea_t *sarea_priv = dev_priv->sarea_priv;
1343 DRM_DEBUG( "%s\n", __FUNCTION__ );
1344
1345 LOCK_TEST_WITH_RETURN( dev, filp );
1346
1347 RING_SPACE_TEST_WITH_RETURN( dev_priv );
1348
1349 if ( sarea_priv->nbox > R128_NR_SAREA_CLIPRECTS )
1350 sarea_priv->nbox = R128_NR_SAREA_CLIPRECTS;
1351
1283 if ( !dev_priv->page_flipping ) {
1284 r128_cce_dispatch_swap( dev );
1285 dev_priv->sarea_priv->dirty |= (R128_UPLOAD_CONTEXT |
1286 R128_UPLOAD_MASKS);
1287 } else {
1288 r128_cce_dispatch_flip( dev );
1289 }
1352 r128_cce_dispatch_swap( dev );
1353 dev_priv->sarea_priv->dirty |= (R128_UPLOAD_CONTEXT |
1354 R128_UPLOAD_MASKS);
1290
1291 return 0;
1292}
1293
1294int r128_cce_vertex( DRM_IOCTL_ARGS )
1295{
1296 DRM_DEVICE;
1297 drm_r128_private_t *dev_priv = dev->dev_private;

--- 309 unchanged lines hidden ---
1355
1356 return 0;
1357}
1358
1359int r128_cce_vertex( DRM_IOCTL_ARGS )
1360{
1361 DRM_DEVICE;
1362 drm_r128_private_t *dev_priv = dev->dev_private;

--- 309 unchanged lines hidden ---