Skip to content

anv: Rework AUX memory handling on TGL-LP

Faith Ekstrand requested to merge gfxstrand/mesa:wip/tgl-aux-tt-alias into master

The previous way we were attempting to handle AUX tables on TGL-LP was very GL-like. We used the same aux table management code that's shared with iris and we updated the table on image create/destroy. The problem with this is that Vulkan allows multiple VkImage objects to be bound to the same memory location simultaneously and the app can ping-pong back and forth between them in the same command buffer. Because the AUX table contains format-specific data, we cannot support this ping-pong behaviour with only CPU updates of the AUX table.

There are a few different ways of handling this. The ideal way would be if we had sparse binding support in the kernel. Then we would just make all compressed images sparse-bound and each VkImage would have its own VA range. In this scenario, since the AUX table is a VA -> VA mapping, each VkImage would have its own AUX table entries and we would have no format conflict issues. Unfortunately, we don't have sparse binding support in the kernel yet so we have to go about thins in a more round-about fassion.

The new mechanism proposed in this MR switches things around a bit and instead makes the aux data part of the BO. At BO creation time, a bit of space is appended to the end of the BO for AUX data and the AUX table is updated in bulk for the entire BO. The problem here, of course, is that we can't insert the format-specific data into the AUX table at BO create time.

Fortunately, Vulkan has a requirement that every TILING_OPTIMAL image must be initialized prior to use by transitioning the image from VK_IMAGE_LAYOUT_UNDEFINED to something else. When doing the above described ping-pong behavior, the app has to do such an initialization transition every time it corrupts the underlying memory of the VkImage by using it as something else. We can hook into this initialization and use it to update the AUX-TT entries from the command streamer. This way the AUX table gets its format information, apps get aliasing support, and everyone is happy.

Edited by Faith Ekstrand

Merge request reports