Currently, BLORP expects drivers to provide two functions for dealing with buffers: blorp_emit_reloc and blorp_surface_reloc. Both record a relocation and combine the BO address and offset into a full 64-bit address. Traditionally, blorp_surface_reloc has written that combined address to an implicitly-known buffer where surface states are stored. (In contrast, blorp_emit_reloc returns the value.)
The upcoming Iris driver stores surface states in multiple buffers, which makes it impossible for blorp_surface_reloc to write the combined address - it only takes an offset, not the actual buffer to write to.
This commit adds a third function, blorp_get_surface_address, which combines and returns an address, which is then passed to ISL's surface state fill functions. Softpin-only drivers can return a real address here and skip writing it in blorp_surface_reloc. Relocation-based drivers are have options. They can simply return 0 from the new function, and continue writing the address from blorp_surface_reloc. Or, they can return a presumed address from blorp_get_surface_address, and have other relocation processing write the real value later.
For now, i965 and anv simply return 0.
084a1cdbb7 blorp: Add blorp_get_surface_address to the driver interface.
src/intel/blorp/blorp_genX_exec.h | 11 +++++++++++
src/intel/vulkan/genX_blorp_exec.c | 8 ++++++++
src/mesa/drivers/dri/i965/genX_blorp_exec.c | 8 ++++++++
3 files changed, 27 insertions(+)