summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2010-04-11 20:30:26 +0200
committerDaniel Vetter <daniel.vetter@ffwll.ch>2010-04-12 09:55:16 +0200
commit5ce93ad1feb8c4172d051fa6be97d58a2c5a3a1c (patch)
treecd45ed666701d4a93f0b5830c9aab74979761644
parent3506173ba7e726a9d0a17ec42734a925a885b01e (diff)
intel: allow fence register tracking to be disableno_fence_accounting
libdrm just doesn't know enough to do this precisely. Therefore allow this to be disabled and put the burden on the client where enough information is available. Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--intel/intel_bufmgr.h1
-rw-r--r--intel/intel_bufmgr_gem.c19
2 files changed, 19 insertions, 1 deletions
diff --git a/intel/intel_bufmgr.h b/intel/intel_bufmgr.h
index 0984ab08..0873a99a 100644
--- a/intel/intel_bufmgr.h
+++ b/intel/intel_bufmgr.h
@@ -135,6 +135,7 @@ drm_intel_bo *drm_intel_bo_gem_create_from_name(drm_intel_bufmgr *bufmgr,
unsigned int handle);
void drm_intel_bufmgr_gem_enable_reuse(drm_intel_bufmgr *bufmgr);
void drm_intel_bufmgr_gem_enable_fenced_relocs(drm_intel_bufmgr *bufmgr);
+void drm_intel_bufmgr_gem_disable_fence_accounting(drm_intel_bufmgr *bufmgr);
int drm_intel_gem_bo_map_gtt(drm_intel_bo *bo);
int drm_intel_gem_bo_unmap_gtt(drm_intel_bo *bo);
void drm_intel_gem_bo_start_gtt_access(drm_intel_bo *bo, int write_enable);
diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c
index a2cf6e6a..2f082d61 100644
--- a/intel/intel_bufmgr_gem.c
+++ b/intel/intel_bufmgr_gem.c
@@ -101,6 +101,7 @@ typedef struct _drm_intel_bufmgr_gem {
int gen;
char bo_reuse;
char fenced_relocs;
+ char no_fence_accounting;
} drm_intel_bufmgr_gem;
#define DRM_INTEL_RELOC_FENCE (1<<0)
@@ -1737,6 +1738,22 @@ drm_intel_bufmgr_gem_enable_fenced_relocs(drm_intel_bufmgr *bufmgr)
}
/**
+ * Disable the fence checking in drm_intel_gem_bo_get_aperture_space
+ *
+ * The gem buffer manager doesn't know which tiled buffers need fence registers
+ * and which do not. The checking done in get_aperture_space is therfore
+ * necessarly much to pessimistic. Enabling this option allows the client to
+ * check fence register usage on its own.
+ */
+void drm_intel_bufmgr_gem_disable_fence_accounting(drm_intel_bufmgr *bufmgr)
+{
+ drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *)bufmgr;
+
+ if (bufmgr_gem->fenced_relocs)
+ bufmgr_gem->no_fence_accounting = 1;
+}
+
+/**
* Return the additional aperture space required by the tree of buffer objects
* rooted at bo.
*/
@@ -1884,7 +1901,7 @@ drm_intel_gem_check_aperture_space(drm_intel_bo **bo_array, int count)
int total_fences;
/* Check for fence reg constraints if necessary */
- if (bufmgr_gem->available_fences) {
+ if (bufmgr_gem->available_fences && !bufmgr_gem->no_fence_accounting) {
total_fences = drm_intel_gem_total_fences(bo_array, count);
if (total_fences > bufmgr_gem->available_fences)
return -ENOSPC;