blorp: Add blorp_get_surface_address to the driver interface.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 9 Jan 2019 21:31:18 +0000 (13:31 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 11 Jan 2019 04:51:53 +0000 (20:51 -0800)
commit084a1cdbb7f7e5cf8f8cee42d2edd3bfb58867ab
treef0d7bd92a5784b4b29281401adab40171b1dceb1
parent2165636e9cf24b7904e8af362a40ce69aeb83f66
blorp: Add blorp_get_surface_address to the driver interface.

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.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/blorp/blorp_genX_exec.h
src/intel/vulkan/genX_blorp_exec.c
src/mesa/drivers/dri/i965/genX_blorp_exec.c