[Mesa-dev] RFC: Haswell resource streamer/hw-generated binding tables (v2)

Abdiel Janulgue abdiel.janulgue at linux.intel.com
Mon Oct 14 09:16:45 PDT 2013


On Friday, October 11, 2013 11:39:53 AM Eric Anholt wrote:
> As a general rule, we don't land code whose purpose is performance
> improvement if it doesn't actually improve performance.  If more work is
> needed to make it actually improve performance, then we wait until then.
> 
> As I understand it, the thing that you think will make this eventually
> actually improve performance is state flagging that indicates which
> individual surfaces need updating.  Since that should improve
> performance even in the non-resource-streamer case, it can be pursued
> independently.


One optimization idea that I had in mind a few months ago was to find a way to 
reduce emission of surface state objects. Currently, we rebuild surface states 
every time we generate binding tables. The idea is to basically relocate the 
surface state indirect state objects on a separate buffer object from the 
command batch. Using the resource streamer, we can then publish the deltas 
when indices referring to them needs to be changed.

So whenever a surface needs to be used, instead of rebuilding the whole 
binding table structure the driver can essentially say on a per-slot basis 
"hey a surface got activated but it it was previously bound to index 10, lets 
rebind it to index 12".

This potentially reduces the CPU overhead of generating and uploading binding 
tables. I did a previous experiment and found out that it reduced generation 
of surfaces states to as much as 99% with this approach. What do you think?

Abdiel


More information about the mesa-dev mailing list