drm/radeon/kms/r600: fix blit dword count for non r6xx
authorAlex Deucher <alexdeucher@gmail.com>
Fri, 11 Sep 2009 16:02:03 +0000 (12:02 -0400)
committerDave Airlie <airlied@linux.ie>
Fri, 11 Sep 2009 22:05:05 +0000 (08:05 +1000)
rv6xx emits two extra dwords in the render target setup.

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@linux.ie>
drivers/gpu/drm/radeon/r600_blit_kms.c

index bbb0d615ac1c273e989c42880e7d86247ba7d33b..1ebfd5a6dfecfa524df258bb1be80eca221db18d 100644 (file)
@@ -550,6 +550,12 @@ int r600_blit_prepare_copy(struct radeon_device *rdev, int size_bytes)
        int r;
        int ring_size;
        int max_size;
+       /* loops of emits 64 + fence emit possible */
+       int dwords_per_loop = 76;
+
+       /* set_render_target emits 2 extra dwords on rv6xx */
+       if (rdev->family > CHIP_R600 && rdev->family < CHIP_RV770)
+               dwords_per_loop += 2;
 
        /* 8 bpp vs 32 bpp for xfer unit */
        if (size_bytes & 3)
@@ -560,8 +566,7 @@ int r600_blit_prepare_copy(struct radeon_device *rdev, int size_bytes)
        r = r600_vb_ib_get(rdev);
        WARN_ON(r);
 
-       /* loops of emits 64 + fence emit possible */
-       ring_size = ((size_bytes + max_size) / max_size) * 78;
+       ring_size = ((size_bytes + max_size) / max_size) * dwords_per_loop;
        /* set default  + shaders */
        ring_size += 40; /* shaders + def state */
        ring_size += 3; /* fence emit for VB IB */