winsys/radeon: print error if CS is overflowed
authorMarek Olšák <maraeo@gmail.com>
Sat, 4 Aug 2012 18:02:30 +0000 (20:02 +0200)
committerMarek Olšák <maraeo@gmail.com>
Wed, 15 Aug 2012 17:20:57 +0000 (19:20 +0200)
and don't submit the CS to the kernel.

src/gallium/winsys/radeon/drm/radeon_drm_cs.c

index 186c5bce9ca787979a7024344c0613ee54ade4b2..7e0f2f98a3bf475d4d01e29f18ca6c973264c2b8 100644 (file)
@@ -438,6 +438,10 @@ static void radeon_drm_cs_flush(struct radeon_winsys_cs *rcs, unsigned flags)
     struct radeon_drm_cs *cs = radeon_drm_cs(rcs);
     struct radeon_cs_context *tmp;
 
+    if (rcs->cdw > RADEON_MAX_CMDBUF_DWORDS) {
+       fprintf(stderr, "radeon: command stream overflowed\n");
+    }
+
     radeon_drm_cs_sync_flush(cs);
 
     /* Flip command streams. */
@@ -445,8 +449,8 @@ static void radeon_drm_cs_flush(struct radeon_winsys_cs *rcs, unsigned flags)
     cs->csc = cs->cst;
     cs->cst = tmp;
 
-    /* If the CS is not empty, emit it in a separate thread. */
-    if (cs->base.cdw) {
+    /* If the CS is not empty or overflowed, emit it in a separate thread. */
+    if (cs->base.cdw && cs->base.cdw <= RADEON_MAX_CMDBUF_DWORDS) {
         unsigned i, crelocs = cs->cst->crelocs;
 
         cs->cst->chunks[0].length_dw = cs->base.cdw;