xf86-video-ati: Branch 'master'

Dave Airlie airlied at kemper.freedesktop.org
Thu Mar 12 20:01:46 PDT 2009


 src/r600_exa.c      |   20 ++++++++++++++++----
 src/radeon.h        |    1 +
 src/radeon_driver.c |    2 ++
 3 files changed, 19 insertions(+), 4 deletions(-)

New commits:
commit f70d7a0fd9ac3659d93511ab362eb80a7ff49777
Author: Dave Airlie <airlied at redhat.com>
Date:   Fri Mar 13 12:56:29 2009 +1000

    r600: reload shaders into VRAM on resume
    
    As VRAM gets zeroed out over s/r, we need to reload the
    shaders.

diff --git a/src/r600_exa.c b/src/r600_exa.c
index 3a4dc8d..f16e040 100644
--- a/src/r600_exa.c
+++ b/src/r600_exa.c
@@ -1963,12 +1963,11 @@ R600Sync(ScreenPtr pScreen, int marker)
 }
 
 static Bool
-R600LoadShaders(ScrnInfoPtr pScrn, ScreenPtr pScreen)
+R600AllocShaders(ScrnInfoPtr pScrn, ScreenPtr pScreen)
 {
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
-    RADEONChipFamily ChipSet = info->ChipFamily;
-    uint32_t *shader;
+
     /* 512 bytes per shader for now */
     int size = 512 * 9;
 
@@ -1979,6 +1978,16 @@ R600LoadShaders(ScrnInfoPtr pScrn, ScreenPtr pScreen)
 
     if (accel_state->shaders == NULL)
 	return FALSE;
+    return TRUE;
+}
+
+Bool
+R600LoadShaders(ScrnInfoPtr pScrn)
+{
+    RADEONInfoPtr info = RADEONPTR(pScrn);
+    struct radeon_accel_state *accel_state = info->accel_state;
+    RADEONChipFamily ChipSet = info->ChipFamily;
+    uint32_t *shader;
 
     shader = (pointer)((char *)info->FB + accel_state->shaders->offset);
 
@@ -2117,7 +2126,10 @@ R600DrawInit(ScreenPtr pScreen)
     info->accel_state->XInited3D = FALSE;
     info->accel_state->copy_area = NULL;
 
-    if (!R600LoadShaders(pScrn, pScreen))
+    if (!R600AllocShaders(pScrn, pScreen))
+	return FALSE;
+
+    if (!R600LoadShaders(pScrn))
 	return FALSE;
 
     exaMarkSync(pScreen);
diff --git a/src/radeon.h b/src/radeon.h
index 4c966ec..7bb720a 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -1084,6 +1084,7 @@ extern void RADEONDoPrepareCopyMMIO(ScrnInfoPtr pScrn,
 				    uint32_t datatype, int rop,
 				    Pixel planemask);
 extern Bool R600DrawInit(ScreenPtr pScreen);
+extern Bool R600LoadShaders(ScrnInfoPtr pScrn);
 #endif
 
 #if defined(XF86DRI) && defined(USE_EXA)
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 2456dc5..c0f5e7b 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -5663,6 +5663,8 @@ Bool RADEONEnterVT(int scrnIndex, int flags)
 
 #ifdef XF86DRI
     if (info->directRenderingEnabled) {
+        if (info->ChipFamily >= CHIP_FAMILY_R600)
+		R600LoadShaders(pScrn);
 	RADEONCP_START(pScrn, info);
 	DRIUnlock(pScrn->pScreen);
     }


More information about the xorg-commit mailing list