diff options
author | Kenneth Graunke <[email protected]> | 2013-04-09 11:11:19 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2013-04-10 16:54:31 -0700 |
commit | ba38ac062c5b8c80e4d33ee680b86cabbfa19095 (patch) | |
tree | 3c3ccd593700b812a3941529ad595093ed04c0f2 /src/mesa | |
parent | fb69dbb0d164fc617941943472cfa390510ec63b (diff) |
intel: Move the max_gtt_map_object_size estimation to intel_context.
We need know this in order to decide what tiling mode to use.
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Chad Versace <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/drivers/dri/intel/intel_context.c | 17 | ||||
-rw-r--r-- | src/mesa/drivers/dri/intel/intel_context.h | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/intel/intel_mipmap_tree.c | 19 |
3 files changed, 20 insertions, 18 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c index 797a4c80a37..a21bc78b2d4 100644 --- a/src/mesa/drivers/dri/intel/intel_context.c +++ b/src/mesa/drivers/dri/intel/intel_context.c @@ -708,6 +708,23 @@ intelInitContext(struct intel_context *intel, else intel->maxBatchSize = BATCH_SZ; + /* Estimate the size of the mappable aperture into the GTT. There's an + * ioctl to get the whole GTT size, but not one to get the mappable subset. + * It turns out it's basically always 256MB, though some ancient hardware + * was smaller. + */ + uint32_t gtt_size = 256 * 1024 * 1024; + if (intel->gen == 2) + gtt_size = 128 * 1024 * 1024; + + /* We don't want to map two objects such that a memcpy between them would + * just fault one mapping in and then the other over and over forever. So + * we would need to divide the GTT size by 2. Additionally, some GTT is + * taken up by things like the framebuffer and the ringbuffer and such, so + * be more conservative. + */ + intel->max_gtt_map_object_size = gtt_size / 4; + intel->bufmgr = intelScreen->bufmgr; bo_reuse_mode = driQueryOptioni(&intel->optionCache, "bo_reuse"); diff --git a/src/mesa/drivers/dri/intel/intel_context.h b/src/mesa/drivers/dri/intel/intel_context.h index c519de9adc8..4591ab73c0c 100644 --- a/src/mesa/drivers/dri/intel/intel_context.h +++ b/src/mesa/drivers/dri/intel/intel_context.h @@ -283,6 +283,8 @@ struct intel_context char buffer[4096]; } upload; + uint32_t max_gtt_map_object_size; + GLuint stats_wm; /* Offsets of fields within the current vertex: diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c index bd313689be0..df70ccab2bc 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c @@ -1785,23 +1785,6 @@ intel_miptree_map_singlesample(struct intel_context *intel, { struct intel_miptree_map *map; - /* Estimate the size of the mappable aperture into the GTT. There's an - * ioctl to get the whole GTT size, but not one to get the mappable subset. - * It turns out it's basically always 256MB, though some ancient hardware - * was smaller. - */ - uint32_t gtt_size = 256 * 1024 * 1024; - if (intel->gen == 2) - gtt_size = 128 * 1024 * 1024; - - /* We don't want to map two objects such that a memcpy between them would - * just fault one mapping in and then the other over and over forever. So - * we would need to divide the GTT size by 2. Additionally, some GTT is - * taken up by things like the framebuffer and the ringbuffer and such, so - * be more conservative. - */ - uint32_t max_gtt_map_object_size = gtt_size / 4; - assert(mt->num_samples <= 1); map = intel_miptree_attach_map(mt, level, slice, x, y, w, h, mode); @@ -1849,7 +1832,7 @@ intel_miptree_map_singlesample(struct intel_context *intel, mt->region->pitch < 32768) { intel_miptree_map_blit(intel, mt, map, level, slice); } else if (mt->region->tiling != I915_TILING_NONE && - mt->region->bo->size >= max_gtt_map_object_size) { + mt->region->bo->size >= intel->max_gtt_map_object_size) { assert(mt->region->pitch < 32768); intel_miptree_map_blit(intel, mt, map, level, slice); } else { |