summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/intel/intel_screen.c
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2010-02-11 17:18:01 -0500
committerKristian Høgsberg <krh@bitplanet.net>2010-02-12 16:30:39 -0500
commit2d99588b3556928a0879b4160210ac771dbf1f0b (patch)
treee78735fe170596d4c932c9188c4bba6bc0a799d2 /src/mesa/drivers/dri/intel/intel_screen.c
parent93931d9e684cd5a5659c3f28f8da7294ac174542 (diff)
intel: Track named regions and make sure we only have one region per named bo
Diffstat (limited to 'src/mesa/drivers/dri/intel/intel_screen.c')
-rw-r--r--src/mesa/drivers/dri/intel/intel_screen.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c
index 6dc20d0fef..f7ce87e063 100644
--- a/src/mesa/drivers/dri/intel/intel_screen.c
+++ b/src/mesa/drivers/dri/intel/intel_screen.c
@@ -29,6 +29,7 @@
#include "main/context.h"
#include "main/framebuffer.h"
#include "main/renderbuffer.h"
+#include "main/hash.h"
#include "utils.h"
#include "xmlpool.h"
@@ -167,6 +168,11 @@ intel_get_param(__DRIscreen *psp, int param, int *value)
}
static void
+nop_callback(GLuint key, void *data, void *userData)
+{
+}
+
+static void
intelDestroyScreen(__DRIscreen * sPriv)
{
struct intel_screen *intelScreen = sPriv->private;
@@ -174,6 +180,12 @@ intelDestroyScreen(__DRIscreen * sPriv)
dri_bufmgr_destroy(intelScreen->bufmgr);
driDestroyOptionInfo(&intelScreen->optionCache);
+ /* Some regions may still have references to them at this point, so
+ * flush the hash table to prevent _mesa_DeleteHashTable() from
+ * complaining about the hash not being empty; */
+ _mesa_HashDeleteAll(intelScreen->named_regions, nop_callback, NULL);
+ _mesa_DeleteHashTable(intelScreen->named_regions);
+
FREE(intelScreen);
sPriv->private = NULL;
}
@@ -324,6 +336,8 @@ intel_init_bufmgr(struct intel_screen *intelScreen)
else
intelScreen->kernel_exec_fencing = GL_FALSE;
+ intelScreen->named_regions = _mesa_NewHashTable();
+
return GL_TRUE;
}