i915g: Optimize batchbuffer sizes
authorStéphane Marchesin <marcheu@chromium.org>
Sun, 5 May 2013 01:59:35 +0000 (18:59 -0700)
committerStéphane Marchesin <marcheu@chromium.org>
Wed, 8 May 2013 09:06:56 +0000 (02:06 -0700)
Now that we don't throttle at every batchbuffer, we can shrink
the size of batchbuffers to achieve early flushing. This gives
a significant speed boost in a lot of games (on the order of
20%).

src/gallium/drivers/i915/i915_prim_vbuf.c
src/gallium/winsys/i915/drm/i915_drm_winsys.c

index 4e57eeadea7324e846d6cb722442e1a274ba14ee..f9cd71be457f7a397b8d93bdc420c07d0780afa6 100644 (file)
@@ -704,12 +704,14 @@ i915_vbuf_render_create(struct i915_context *i915)
 
    i915_render->i915 = i915;
 
-   i915_render->base.max_vertex_buffer_bytes = 16*4096;
+   i915_render->base.max_vertex_buffer_bytes = 4*4096;
 
    /* NOTE: it must be such that state and vertices indices fit in a single 
-    * batch buffer.
+    * batch buffer. 4096 is one batch buffer and 430 is the max amount of 
+    * state in dwords. The result is the number of 16-bit indices which can
+    * fit in a single batch buffer.
     */
-   i915_render->base.max_indices = 16*1024;
+   i915_render->base.max_indices = (4096 - 430 * 4) / 2;
 
    i915_render->base.get_vertex_info = i915_vbuf_render_get_vertex_info;
    i915_render->base.allocate_vertices = i915_vbuf_render_allocate_vertices;
index 6c8a10d800f68bc94cb17e10a5f2ed09c2a8dde6..9e16f409ceab1184bbc00a96704b07dfb11f63b0 100644 (file)
@@ -56,7 +56,7 @@ i915_drm_winsys_create(int drmFD)
 
    idws->fd = drmFD;
    idws->base.pci_id = deviceID;
-   idws->max_batch_size = 16 * 4096;
+   idws->max_batch_size = 1 * 4096;
 
    idws->base.destroy = i915_drm_winsys_destroy;