intel: Don't allocate more relocation entries than the BO could support.
authorEric Anholt <eric@anholt.net>
Mon, 5 Oct 2009 23:35:32 +0000 (16:35 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 6 Oct 2009 20:30:07 +0000 (13:30 -0700)
This saves 32k of relocation entry storage for many 965 state buffers.  No
noticeable impact on performance for cairo-gl firefox.

libdrm/intel/intel_bufmgr_gem.c

index 235ec61..cf35c81 100644 (file)
@@ -304,10 +304,14 @@ drm_intel_setup_reloc_list(drm_intel_bo *bo)
 {
     drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *)bo;
     drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *)bo->bufmgr;
+    unsigned int max_relocs = bufmgr_gem->max_relocs;
 
-    bo_gem->relocs = malloc(bufmgr_gem->max_relocs *
+    if (bo->size / 4 < max_relocs)
+           max_relocs = bo->size / 4;
+
+    bo_gem->relocs = malloc(max_relocs *
                            sizeof(struct drm_i915_gem_relocation_entry));
-    bo_gem->reloc_target_bo = malloc(bufmgr_gem->max_relocs *
+    bo_gem->reloc_target_bo = malloc(max_relocs *
                                     sizeof(drm_intel_bo *));
 
     return 0;