diff -ur a/src/gallium/drivers/nouveau/nouveau_screen.c b/src/gallium/drivers/nouveau/nouveau_screen.c --- a/src/gallium/drivers/nouveau/nouveau_screen.c 2010-10-02 00:51:28.000000000 +0200 +++ b/src/gallium/drivers/nouveau/nouveau_screen.c 2010-12-11 18:18:20.527000045 +0100 @@ -236,7 +236,7 @@ int ret; ret = nouveau_channel_alloc(dev, 0xbeef0201, 0xbeef0202, - &screen->channel); + 512*1024, &screen->channel); if (ret) return ret; screen->device = dev; diff -ur a/src/mesa/drivers/dri/nouveau/nouveau_context.c b/src/mesa/drivers/dri/nouveau/nouveau_context.c --- a/src/mesa/drivers/dri/nouveau/nouveau_context.c 2010-10-05 03:58:00.000000000 +0200 +++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c 2010-12-11 18:18:20.528000045 +0100 @@ -129,7 +129,7 @@ /* Allocate a hardware channel. */ ret = nouveau_channel_alloc(context_dev(ctx), 0xbeef0201, 0xbeef0202, - &nctx->hw.chan); + 512*1024, &nctx->hw.chan); if (ret) { nouveau_error("Error initializing the FIFO.\n"); return GL_FALSE; Nur in b/src/mesa/drivers/dri/nouveau: nouveau_context.c.orig. diff -ur a/src/mesa/drivers/dri/nouveau/nouveau_surface.c b/src/mesa/drivers/dri/nouveau/nouveau_surface.c --- a/src/mesa/drivers/dri/nouveau/nouveau_surface.c 2010-04-27 23:41:21.000000000 +0200 +++ b/src/mesa/drivers/dri/nouveau/nouveau_surface.c 2010-12-11 18:09:19.750000046 +0100 @@ -34,8 +34,8 @@ unsigned flags, unsigned format, unsigned width, unsigned height) { - unsigned tile_mode, cpp = _mesa_get_format_bytes(format); - int ret; + unsigned tile_mode = 0, tile_flags = 0; + int ret, cpp = _mesa_get_format_bytes(format); nouveau_bo_ref(NULL, &s->bo); @@ -51,13 +51,21 @@ if (layout == TILED) { s->pitch = align(s->pitch, 256); tile_mode = s->pitch; + + if (cpp == 4) + tile_flags = NOUVEAU_BO_TILE_32BPP; + else if (cpp == 2) + tile_flags = NOUVEAU_BO_TILE_16BPP; + + if (_mesa_get_format_bits(format, GL_DEPTH_BITS)) + tile_flags |= NOUVEAU_BO_TILE_ZETA; + } else { s->pitch = align(s->pitch, 64); - tile_mode = 0; } ret = nouveau_bo_new_tile(context_dev(ctx), flags, 0, s->pitch * height, - tile_mode, 0, &s->bo); + tile_mode, tile_flags, &s->bo); assert(!ret); } diff -ur a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c --- a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c 2010-10-05 03:58:00.000000000 +0200 +++ b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c 2010-12-11 18:18:20.528000045 +0100 @@ -32,7 +32,7 @@ /* Arbitrary pushbuf length we can assume we can get with a single * WAIT_RING. */ -#define PUSHBUF_DWORDS 2048 +#define PUSHBUF_DWORDS 65536 /* Functions to set up struct nouveau_array_state from something like * a GL array or index buffer. */ diff -ur a/src/mesa/drivers/dri/nouveau/nv10_state_fb.c b/src/mesa/drivers/dri/nouveau/nv10_state_fb.c --- a/src/mesa/drivers/dri/nouveau/nv10_state_fb.c 2010-10-05 03:58:00.000000000 +0200 +++ b/src/mesa/drivers/dri/nouveau/nv10_state_fb.c 2010-12-11 18:15:17.756000046 +0100 @@ -64,8 +64,8 @@ if (!nfb->lma_bo || nfb->lma_bo->size != size) { nouveau_bo_ref(NULL, &nfb->lma_bo); - nouveau_bo_new(context_dev(ctx), NOUVEAU_BO_VRAM, 0, size, - &nfb->lma_bo); + nouveau_bo_new_tile(context_dev(ctx), NOUVEAU_BO_VRAM, 0, size, + 0, NOUVEAU_BO_TILE_ZETA, &nfb->lma_bo); } nouveau_bo_markl(bctx, celsius, NV17TCL_LMA_DEPTH_BUFFER_OFFSET,