From ba38ac062c5b8c80e4d33ee680b86cabbfa19095 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Tue, 9 Apr 2013 11:11:19 -0700 Subject: [PATCH] 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 Reviewed-by: Chad Versace Reviewed-by: Eric Anholt --- src/mesa/drivers/dri/intel/intel_context.c | 17 +++++++++++++++++ src/mesa/drivers/dri/intel/intel_context.h | 2 ++ .../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 { -- 2.30.2