Can we piggyback the mspos changes on the bump? I have discovered a legit
non-AA use for them so I would like them to be usable.

Posting from a mobile, pardon my terseness. ~ C.

On Feb 4, 2010 8:07 AM, "Alex Deucher" <alexdeuc...@gmail.com> wrote:

>From 8ea32b7974dbcf819545f555ca078f709da5ff4e Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexdeuc...@gmail.com>
Date: Thu, 4 Feb 2010 11:01:52 -0500
Subject: [PATCH] drm/radeon/kms/r600: reduce gpu cache flushing

Only flush the gpu caches before we submit a fence.
This leads to a small performance boost when we take
the extra gpu cache flushes out of the ddx and mesa.
Once this patch is in and the drm version is bumped,
we can remove the flushes from the ddx and drm.

Also, remove the extra cache flushes from the blit
routine.

Signed-off-by: Alex Deucher <alexdeuc...@gmail.com>
---
 drivers/gpu/drm/radeon/r600.c              |    7 +++++++
 drivers/gpu/drm/radeon/r600_blit_kms.c     |   13 ++-----------
 drivers/gpu/drm/radeon/r600_blit_shaders.c |   10 ----------
 3 files changed, 9 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index b833b4b..95a3261 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -1777,6 +1777,13 @@ void r600_fence_ring_emit(struct radeon_device *rdev,
                         struct radeon_fence *fence)
 {
       /* Also consider EVENT_WRITE_EOP.  it handles the interrupts +
timestamps + events */
+
+       radeon_ring_write(rdev, PACKET3(PACKET3_EVENT_WRITE, 0));
+       radeon_ring_write(rdev, CACHE_FLUSH_AND_INV_EVENT);
+       /* wait for 3D idle clean */
+       radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 1));
+       radeon_ring_write(rdev, (WAIT_UNTIL - PACKET3_SET_CONFIG_REG_OFFSET)
>> 2);
+       radeon_ring_write(rdev, WAIT_3D_IDLE_bit | WAIT_3D_IDLECLEAN_bit);
       /* Emit fence sequence & fire IRQ */
       radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 1));
       radeon_ring_write(rdev, ((rdev->fence_drv.scratch_reg -
PACKET3_SET_CONFIG_REG_OFFSET) >> 2));
diff --git a/drivers/gpu/drm/radeon/r600_blit_kms.c
b/drivers/gpu/drm/radeon/r600_blit_kms.c
index af1c3ca..2d7d16e 100644
--- a/drivers/gpu/drm/radeon/r600_blit_kms.c
+++ b/drivers/gpu/drm/radeon/r600_blit_kms.c
@@ -403,8 +403,6 @@ set_default_state(struct radeon_device *rdev)
       radeon_ring_write(rdev, upper_32_bits(gpu_addr) & 0xFF);
       radeon_ring_write(rdev, dwords);

-       radeon_ring_write(rdev, PACKET3(PACKET3_EVENT_WRITE, 0));
-       radeon_ring_write(rdev, CACHE_FLUSH_AND_INV_EVENT);
       /* SQ config */
       radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 6));
       radeon_ring_write(rdev, (SQ_CONFIG - PACKET3_SET_CONFIG_REG_OFFSET)
>> 2);
@@ -581,9 +579,9 @@ int r600_blit_prepare_copy(struct radeon_device
*rdev, int size_bytes)
       ring_size = num_loops * dwords_per_loop;
       /* set default  + shaders */
       ring_size += 40; /* shaders + def state */
-       ring_size += 7; /* fence emit for VB IB */
+       ring_size += 12; /* fence emit for VB IB */
       ring_size += 5; /* done copy */
-       ring_size += 7; /* fence emit for done copy */
+       ring_size += 12; /* fence emit for done copy */
       r = radeon_ring_lock(rdev, ring_size);
       if (r)
               return r;
@@ -597,13 +595,6 @@ void r600_blit_done_copy(struct radeon_device
*rdev, struct radeon_fence *fence)
 {
       int r;

-       radeon_ring_write(rdev, PACKET3(PACKET3_EVENT_WRITE, 0));
-       radeon_ring_write(rdev, CACHE_FLUSH_AND_INV_EVENT);
-       /* wait for 3D idle clean */
-       radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 1));
-       radeon_ring_write(rdev, (WAIT_UNTIL - PACKET3_SET_CONFIG_REG_OFFSET)
>> 2);
-       radeon_ring_write(rdev, WAIT_3D_IDLE_bit | WAIT_3D_IDLECLEAN_bit);
-
       if (rdev->r600_blit.vb_ib)
               r600_vb_ib_put(rdev);

diff --git a/drivers/gpu/drm/radeon/r600_blit_shaders.c
b/drivers/gpu/drm/radeon/r600_blit_shaders.c
index d745e81..a112c59 100644
--- a/drivers/gpu/drm/radeon/r600_blit_shaders.c
+++ b/drivers/gpu/drm/radeon/r600_blit_shaders.c
@@ -9,11 +9,6 @@ const u32 r6xx_default_state[] =
       0xc0012800,
       0x80000000,
       0x80000000,
-       0xc0004600,
-       0x00000016,
-       0xc0016800,
-       0x00000010,
-       0x00028000,
       0xc0016800,
       0x00000010,
       0x00008000,
@@ -531,11 +526,6 @@ const u32 r7xx_default_state[] =
       0xc0012800,
       0x80000000,
       0x80000000,
-       0xc0004600,
-       0x00000016,
-       0xc0016800,
-       0x00000010,
-       0x00028000,
       0xc0016800,
       0x00000010,
       0x00008000,
--
1.5.6.3

------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the
business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel
------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to