[Mesa-dev] [PATCH] intel: Assert that no batch is emitted if a region is mapped

Ian Romanick idr at freedesktop.org
Mon Oct 10 11:25:41 PDT 2011


On 10/10/2011 11:17 AM, Eric Anholt wrote:
> On Thu,  6 Oct 2011 14:18:35 -0700, Chad Versace<chad at chad-versace.us>  wrote:
>> What I would prefer to assert is that, for each region that is currently
>> mapped, no batch is emitted that uses that region's bo. However, it's much
>> easier to implement this big hammer.
>
>> diff --git a/src/mesa/drivers/dri/intel/intel_regions.c b/src/mesa/drivers/dri/intel/intel_regions.c
>> index 7faf4ca..d46c470 100644
>> --- a/src/mesa/drivers/dri/intel/intel_regions.c
>> +++ b/src/mesa/drivers/dri/intel/intel_regions.c
>> @@ -111,15 +111,17 @@ debug_backtrace(void)
>>   GLubyte *
>>   intel_region_map(struct intel_context *intel, struct intel_region *region)
>>   {
>> -   intel_flush(&intel->ctx);
>> -
>>      _DBG("%s %p\n", __FUNCTION__, region);
>>      if (!region->map_refcount++) {
>> +      intel_flush(&intel->ctx);
>> +
>>         if (region->tiling != I915_TILING_NONE)
>>   	 drm_intel_gem_bo_map_gtt(region->bo);
>>         else
>>   	 drm_intel_bo_map(region->bo, GL_TRUE);
>> +
>>         region->map = region->bo->virtual;
>> +      ++intel->num_mapped_regions;
>>      }
>
> There's a more interesting change in here, which is the move of the
> flush inside of the if statement.
>
> We agreed that moving it in was correct, but it would be nice to record
> why we thought it was correct.  The thinking I recall was:
>
> "We have the region->map_refcount controlling mapping of the BO because
> in software fallbacks we may end up mapping the same buffer multiple
> times on Mesa's behalf, so we refcount our mappings to make sure that
> the pointer stays valid until the end of the unmap chain.  However, we
> must not emit any batchbuffers between the start of mapping and the end
> of unmapping, or further use of the map will be incoherent with the GPU
> rendering done by that batchbuffer.  Thus we should assert that that
> doesn't happen, which means that the flush is only needed on first map
> of the buffer."

I was going to comment that the first patch change behavior.  Having the 
above text as a comment in the code is a good idea.


More information about the mesa-dev mailing list