aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/r600_cs.c
diff options
context:
space:
mode:
authorMarek Olšák <maraeo@gmail.com>2012-03-07 18:56:00 -0500
committerDave Airlie <airlied@redhat.com>2012-03-20 04:44:12 -0400
commit779923bc40e123976bb0bee07b1c6a47d2858137 (patch)
tree9e4118055cc0baf8ef04c1bc6381cafcc6fa3cc1 /drivers/gpu/drm/radeon/r600_cs.c
parent9c1dfc5574a7f7115c0fe5bd8f838a8b7a52ee6d (diff)
drm/radeon/kms: skip cb/db checking if SX_MISC is 1 on r600+
Signed-off-by: Marek Olšák <maraeo@gmail.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/r600_cs.c')
-rw-r--r--drivers/gpu/drm/radeon/r600_cs.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c
index 2e465a7089bd..b3c40e0fe7e2 100644
--- a/drivers/gpu/drm/radeon/r600_cs.c
+++ b/drivers/gpu/drm/radeon/r600_cs.c
@@ -74,6 +74,7 @@ struct r600_cs_track {
74 u32 db_offset; 74 u32 db_offset;
75 struct radeon_bo *db_bo; 75 struct radeon_bo *db_bo;
76 u64 db_bo_mc; 76 u64 db_bo_mc;
77 bool sx_misc_kill_all_prims;
77}; 78};
78 79
79#define FMT_8_BIT(fmt, vc) [fmt] = { 1, 1, 1, vc, CHIP_R600 } 80#define FMT_8_BIT(fmt, vc) [fmt] = { 1, 1, 1, vc, CHIP_R600 }
@@ -322,6 +323,7 @@ static void r600_cs_track_init(struct r600_cs_track *track)
322 track->vgt_strmout_bo_offset[i] = 0xFFFFFFFF; 323 track->vgt_strmout_bo_offset[i] = 0xFFFFFFFF;
323 track->vgt_strmout_bo_mc[i] = 0xFFFFFFFF; 324 track->vgt_strmout_bo_mc[i] = 0xFFFFFFFF;
324 } 325 }
326 track->sx_misc_kill_all_prims = false;
325} 327}
326 328
327static int r600_cs_track_validate_cb(struct radeon_cs_parser *p, int i) 329static int r600_cs_track_validate_cb(struct radeon_cs_parser *p, int i)
@@ -479,6 +481,9 @@ static int r600_cs_track_check(struct radeon_cs_parser *p)
479 } 481 }
480 } 482 }
481 483
484 if (track->sx_misc_kill_all_prims)
485 return 0;
486
482 /* check that we have a cb for each enabled target, we don't check 487 /* check that we have a cb for each enabled target, we don't check
483 * shader_mask because it seems mesa isn't always setting it :( 488 * shader_mask because it seems mesa isn't always setting it :(
484 */ 489 */
@@ -1279,6 +1284,9 @@ static int r600_cs_check_reg(struct radeon_cs_parser *p, u32 reg, u32 idx)
1279 } 1284 }
1280 ib[idx] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff); 1285 ib[idx] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
1281 break; 1286 break;
1287 case SX_MISC:
1288 track->sx_misc_kill_all_prims = (radeon_get_ib_value(p, idx) & 0x1) != 0;
1289 break;
1282 default: 1290 default:
1283 dev_warn(p->dev, "forbidden register 0x%08x at %d\n", reg, idx); 1291 dev_warn(p->dev, "forbidden register 0x%08x at %d\n", reg, idx);
1284 return -EINVAL; 1292 return -EINVAL;