nvfx: allocate a bigger block for queries
authorLuca Barbieri <luca@luca-barbieri.com>
Mon, 18 Jan 2010 00:13:40 +0000 (01:13 +0100)
committerLuca Barbieri <luca@luca-barbieri.com>
Mon, 12 Apr 2010 21:36:21 +0000 (23:36 +0200)
This patch allocates a bigger chunk of memory to store queries in,
increasing the (hidden) outstanding query limit.

src/gallium/drivers/nvfx/nvfx_screen.c
src/gallium/drivers/nvfx/nvfx_screen.h

index 651e6ee64b6cdaf58dd0f47a08564769dc1e9866..6742759490819229d44473a96fc0ea86e448eae9 100644 (file)
@@ -324,7 +324,7 @@ nvfx_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
        struct nouveau_channel *chan;
        struct pipe_screen *pscreen;
        unsigned eng3d_class = 0;
-       int ret;
+       int ret, i;
 
        if (!screen)
                return NULL;
@@ -397,14 +397,21 @@ nvfx_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
        }
 
        /* Query objects */
-       ret = nouveau_notifier_alloc(chan, 0xbeef0302, 32, &screen->query);
+       unsigned query_sizes[] = {(4096 - 4 * 32) / 32, 3 * 1024 / 32, 2 * 1024 / 32, 1024 / 32};
+       for(i = 0; i < sizeof(query_sizes) / sizeof(query_sizes[0]); ++i)
+       {
+               ret = nouveau_notifier_alloc(chan, 0xbeef0302, query_sizes[i], &screen->query);
+               if(!ret)
+                       break;
+       }
+
        if (ret) {
                NOUVEAU_ERR("Error initialising query objects: %d\n", ret);
                nvfx_screen_destroy(pscreen);
                return NULL;
        }
 
-       ret = nouveau_resource_init(&screen->query_heap, 0, 32);
+       ret = nouveau_resource_init(&screen->query_heap, 0, query_sizes[i]);
        if (ret) {
                NOUVEAU_ERR("Error initialising query object heap: %d\n", ret);
                nvfx_screen_destroy(pscreen);
index 678ee406016a9434eb82d43b31ede7afb261ca60..aa1b0e1108580ddac904e7db98f4962fe313db56 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef __NVFX_SCREEN_H__
 #define __NVFX_SCREEN_H__
 
-#include <util/u_double_list.h>
+#include "util/u_double_list.h"
 #include "nouveau/nouveau_screen.h"
 #include "nv04_surface_2d.h"
 #include "nvfx_context.h"