raedon/r200/r300: mega-FBO commits.
[mesa.git] / src / mesa / drivers / dri / radeon / radeon_cs_legacy.c
index aa95d86cd48c0e82d91676d4eb45fa3aa2d3496a..b47b095cf203991650a46241b62c4708a841416d 100644 (file)
@@ -216,12 +216,15 @@ static int cs_process_relocs(struct radeon_cs *cs)
 
     csm = (struct cs_manager_legacy*)cs->csm;
     relocs = (struct cs_reloc_legacy *)cs->relocs;
+ restart:
     for (i = 0; i < cs->crelocs; i++) {
         for (j = 0; j < relocs[i].cindices; j++) {
             uint32_t soffset, eoffset;
 
             r = radeon_bo_legacy_validate(relocs[i].base.bo,
                                            &soffset, &eoffset);
+           if (r == -EAGAIN)
+             goto restart;
             if (r) {
                 fprintf(stderr, "validated %p [0x%08X, 0x%08X]\n",
                         relocs[i].base.bo, soffset, eoffset);
@@ -276,7 +279,6 @@ static int cs_emit(struct radeon_cs *cs)
 
     csm->ctx->vtbl.emit_cs_header(cs, csm->ctx);
 
-
     /* append buffer age */
     if (IS_R300_CLASS(csm->ctx->radeonScreen)) {
       age.scratch.cmd_type = R300_CMD_SCRATCH;
@@ -362,8 +364,9 @@ static int cs_erase(struct radeon_cs *cs)
 
 static int cs_need_flush(struct radeon_cs *cs)
 {
-    /* FIXME: we should get the texture heap size */
-    return (cs->relocs_total_size > (7*1024*1024));
+    /* this function used to flush when the BO usage got to
+     * a certain size, now the higher levels handle this better */
+    return 0;
 }
 
 static void cs_print(struct radeon_cs *cs, FILE *file)