turnip: Implement VK_KHR_buffer_device_address
We don't advertise
bufferDeviceAddressCaptureReplay capability (used for debugging tools) and
neither does blob, because at the moment there is no way to allocate
bo with predefined iova.
There is no support of any arithmetic with addresses since
is not enabled. However, NIR produces 64bit arithmetic to access
struct members and array elements in referenced memory, thus we still
have to use 64bit math internally. Which means we must handle:
nir_op_pack_64_2x32_split nir_op_unpack_64_2x32_split_x nir_op_unpack_64_2x32_split_y
shaderInt64 we would need to support load/store of 64bit vec3 and vec4; as far as I understand we could load only 4 registers at once, meaning we would need to do two loads/stores. For now in order to not balloon the scope of this MR I decided to stop at implementing the passing of single 64bit reference around.
Note, that CTS does not cover all ways to pass memory reference, e.g. shared memory, varyings, patch varyings, big local arrays - are not tested in CTS.
On CI there is a failure which I cannot reproduce locally:
A few traces of blob as a reference: