r300g: do not use immediate mode if there is a VBO in VRAM
authorMarek Olšák <maraeo@gmail.com>
Mon, 12 Jul 2010 04:52:06 +0000 (06:52 +0200)
committerMarek Olšák <maraeo@gmail.com>
Mon, 12 Jul 2010 04:52:06 +0000 (06:52 +0200)
And other minor fixups.

src/gallium/drivers/r300/r300_context.c
src/gallium/drivers/r300/r300_render.c

index 7f43281af4abb15dfa481b9cdf1062f0198960e1..b09acb7f2b62b33b551c4c62d2e04e8c89276328 100644 (file)
@@ -378,7 +378,6 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
     r300_init_resource_functions(r300);
 
     rws->set_flush_cb(r300->rws, r300_flush_cb, r300);
-    r300->dirty_hw++;
 
     r300->blitter = util_blitter_create(&r300->context);
 
index 53728431a635d59d98dc3c1d7ea59854b8378afd..55c7758b7519b08a7ebc4e89b421c645ca27e857 100644 (file)
@@ -278,7 +278,6 @@ static boolean immd_is_good_idea(struct r300_context *r300,
 
     /* We shouldn't map buffers referenced by CS, busy buffers,
      * and ones placed in VRAM. */
-    /* XXX Check for VRAM buffers. */
     for (i = 0; i < vertex_element_count; i++) {
         velem = &r300->velems->velem[i];
         vbi = velem->vertex_buffer_index;
@@ -286,6 +285,10 @@ static boolean immd_is_good_idea(struct r300_context *r300,
         if (!checked[vbi]) {
             vbuf = &r300->vertex_buffer[vbi];
 
+            if (!(r300_buffer(vbuf->buffer)->domain & R300_DOMAIN_GTT)) {
+                return FALSE;
+            }
+
             if (r300_buffer_is_referenced(&r300->context,
                                           vbuf->buffer,
                                           R300_REF_CS | R300_REF_HW)) {
@@ -299,8 +302,7 @@ static boolean immd_is_good_idea(struct r300_context *r300,
 }
 
 /*****************************************************************************
- * The emission of draw packets for r500. Older GPUs may use these functions *
- * after resolving fallback issues (e.g. stencil ref two-sided).             *
+ * The HWTCL draw functions.                                                 *
  ****************************************************************************/
 
 static void r300_emit_draw_arrays_immediate(struct r300_context *r300,