[Mesa-dev] [PATCH 10/15] intel: Support mapping multisample miptrees (v2)

Chad Versace chad.versace at linux.intel.com
Tue Aug 7 08:30:26 PDT 2012


On 08/06/2012 07:32 PM, Eric Anholt wrote:
> Chad Versace <chad.versace at linux.intel.com> writes:
> 
>> Add two new functions: intel_miptree_{map,unmap}_multisample, to which
>> intel_miptree_{map,unmap} dispatch. Only mapping flat, renderbuffer-like
>> miptrees are supported.
>>
>> v2:
>>     - Move the introduction of
>>       intel_mipmap_tree::singlesample_{width0,height0} to this patch, per
>>       Anholt.
>>     - Replace relations `mt->num_samples == 0` and `mt->num_samples > 0`
>>       with `<= 1` and `> 0`, per Anholt.
>>     - Don't downsample unnecessarily, found by Anholt.
>>
>> CC: Eric Anholt <eric at anholt.net>
>> CC: Paul Berry <stereotype441 at gmail.com>
>> Signed-off-by: Chad Versace <chad.versace at linux.intel.com>
>> ---
>>  src/mesa/drivers/dri/intel/intel_mipmap_tree.c | 115 +++++++++++++++++++++++--
>>  src/mesa/drivers/dri/intel/intel_mipmap_tree.h |  18 ++++
>>  2 files changed, 127 insertions(+), 6 deletions(-)
>>
>> diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
>> index 23d84c0..6ecb48f 100644
>> --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
>> +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
>> +   if (!mt->singlesample_mt) {
>> +      map->singlesample_mt_is_tmp = true;
>> +      mt->need_downsample = true;
> 
> Move this mt->need_downsample flag setup to after you've successfully
> alloced?

Done. That's a sensible change, and removes the need for unsetting
mt->need_downsample in the failure path.

> 
>> +      mt->singlesample_mt =
>> +         intel_miptree_create_for_renderbuffer(intel,
>> +                                               mt->format,
>> +                                               mt->singlesample_width0,
>> +                                               mt->singlesample_height0,
>> +                                               0 /*num_samples*/);
>> +      if (!mt->singlesample_mt) {
>> +         mt->need_downsample = false;
>> +         goto fail;
>> +      }
>> +   }
>> +
>> +   if (mode & GL_MAP_INVALIDATE_RANGE_BIT)
>> +      mt->need_downsample = false;
>> +
>> +   intel_miptree_downsample(intel, mt);
> 
> I don't think you can clear need_downsample for
> GL_MAP_INVALIDATE_RANGE_BIT, because the GL_MAP_WRITE_BIT case in the
> unmap (implied by INVALIDATE_RANGE) will upsample the whole singlesample
> buffer back, not just the mapped subset.  Dropping the INVALIDATE_RANGE
> gets the series up to this patch my r-b.
> 

Ah, your're right. Thanks for catching that subtle error.


More information about the mesa-dev mailing list