vulkan: Add VK_GOOGLE_display_timing extension (x11+display, anv+radv) [v10]

This adds support for the VK_GOOGLE_display timing extension, which
provides two things:

 1) Detailed information about when frames are displayed, including
    slack time between GPU execution and display frame.

 2) Absolute time control over swapchain queue processing. This allows
    the application to request frames be displayed at specific
    absolute times, using the same timebase as that provided in vblank
    events.

Support for this extension has been implemented for the x11 and
display backends; adding support to other backends should be
reasonable straightforward for one familiar with those systems and
should not require any additional device-specific code.

v2:
	Adjust GOOGLE_display_timing earliest value.  The
	earliestPresentTime for an image cannot be before the previous
	image was displayed, or even a frame later (in FIFO mode).

	Make GOOGLE_display_timing use render completed time.  Switch
	from VK_PIPELINE_TOP_OF_PIPE_BIT to
	VK_PIPELINE_STAGE_ALL_COMMANDS_BIT so that the time reported
	to applications as the end of rendering reflects the latest
	possible value to ensure that applications don't underestimate
	the amount of work done in the frame.

v3:
	Adopt Jason Ekstrand's coding conventions.  Declare variables
	at first use, eliminate extra whitespace between types and
	names. Wrap lines to 80 columns.

        Suggested-by: Jason Ekstrand <jason.ekstrand@intel.com>

v4:
	Adapt to changes in MESA_query_timestamp extension

v5:
	Squash core bits and anv/radv wrappers into a single patch

        Suggested-by: Jason Ekstrand <jason.ekstrand@intel.com>

v6:
	Switch from MESA_query_timestamp to EXT_calibrated_timestamps

v7:
	Ensure we target frame no earlier than desired. This means
	rounding the target frame up, rather than selecting the
	nearest one.

	Suggested-by: Michel Dänzer <michel@daenzer.net>

v8:
	Re-order display_timing in anv_extensions.py. That code
	now requires extensions in alphabetical order.

	Rename wsi_mark_time to wsi_present_complete to make
	the functionality clearer.

v9:
	Adopt to upstream changes to anv and radv extensions.

v10:
	Remove GetPhysicalDevicePropertie usage.

	Suggested-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>

Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
36 jobs for !9016 with vk_google_display_timing in 17 seconds (queued for 3 seconds)
detached
Status Job ID Name Coverage
  Sanity
passed #7446876
sanity

00:00:17

 
  Container
manual #7446881
aarch64 manual
arm_build
manual #7446883
manual
arm_test-base
manual #7446885
windows shell 1809 mesa manual
windows_build_vs2019
manual #7446878
manual
x86_build-base
manual #7446880
manual
x86_test-base
 
  Container 2
created #7446900
android_build
created #7446905
arm64_test
created #7446907
armhf_test
created #7446895
i386_build
created #7446888
kernel+rootfs_amd64
created #7446889
aarch64
kernel+rootfs_arm64
created #7446891
aarch64
kernel+rootfs_armhf
created #7446897
ppc64el_build
created #7446898
s390x_build
created #7446893
x86_build
created #7446902
x86_test-gl
created #7446904
x86_test-vk
 
  Meson X86 64
created #7446918
meson-clang
created #7446919
meson-clover
created #7446912
meson-clover-testing
created #7446914
gstreamer
meson-gallium
created #7446916
meson-release
created #7446909
meson-testing
created #7446910
meson-testing-asan
created #7446921
meson-vulkan
 
  Build Misc
created #7446923
meson-android
created #7446926
aarch64
meson-arm64
created #7446928
aarch64
meson-arm64-asan
created #7446930
aarch64
meson-arm64-build-test
created #7446924
aarch64
meson-armhf
created #7446932
meson-i386
created #7446938
meson-mingw32-x86_64
created #7446936
kvm
meson-ppc64el
created #7446934
kvm
meson-s390x
 
  Amd
created #7446940
radv-fossils