iris: Implement fine-grained fences with semaphores

If we emit a fence part-way through a batch (using PIPE_FLUSH_DEFERRED),
we can start a dependent job as soon as that fence is signaled. However,
the syncobj we pass the kernel to use for scheduling are only defined
between batches, to have sub-batch precision we need to use a semaphore
and rely on preemption and scheduling timeslices to start our task as
early as possible.

For correct PI, we depend on kernel's dma-fence-proxy and WAIT_SUBMIT

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
57 jobs for !4855 with iris-async
latest detached
Status Job ID Name Coverage
  Container
manual arm_build #2889457
aarch64 manual
manual arm_test #2889459
manual
manual windows_build_vs2019 #2889461
windows shell 1809 mesa manual
manual x86_build #2889452
manual
manual x86_build_old #2889456
manual
manual x86_test-base #2889454
manual
 
  Container 2
created x86_test-gl #2889464
created x86_test-vk #2889465
 
  Meson X86 64
created meson-clang #2889472
created meson-classic #2889471
created meson-clover #2889473
created meson-clover-old-llvm #2889475
created meson-gallium #2889469
created meson-testing #2889467
created meson-vulkan #2889477
 
  Scons
created scons-win64 #2889478
allowed to fail
 
  Meson Misc
created meson-arm64 #2889482
aarch64
created meson-arm64-build-test #2889483
aarch64
created meson-armhf #2889480
aarch64
created meson-i386 #2889487
created meson-mingw32-x86_64 #2889493
created meson-ppc64el #2889491
kvm
created meson-s390x #2889489
kvm
created meson-windows-vs2019 #2889485
windows docker 1809 mesa
 
  Llvmpipe
created llvmpipe-gles2 #2889500
created llvmpipe-traces #2889502
created piglit-glslparser #2889496
created piglit-quick_gl #2889494
created piglit-quick_shader #2889498
 
  Softpipe
created softpipe-gles2 #2889504
created softpipe-gles31 1/4 #2889509
created softpipe-gles3 1/2 #2889506
created softpipe-gles31 2/4 #2889511
created softpipe-gles31 3/4 #2889513
created softpipe-gles31 4/4 #2889516
created softpipe-gles3 2/2 #2889508
 
  Freedreno
created arm64_a306_gles2 #2889525
google-freedreno-db410c
created arm64_a306_gles3 #2889526
google-freedreno-db410c
created arm64_a306_gles3_options #2889527
google-freedreno-db410c
created arm64_a530_gles2 #2889528
google-freedreno-db820c
created arm64_a530_gles3 #2889529
google-freedreno-db820c
created arm64_a530_gles31 #2889530
google-freedreno-db820c
created arm64_a630_bypass #2889523
google-freedreno-cheza
created arm64_a630_gles2 #2889518
google-freedreno-cheza
created arm64_a630_gles3 #2889521
google-freedreno-cheza
created arm64_a630_gles31 #2889520
google-freedreno-cheza
created arm64_a630_gmem #2889524
google-freedreno-cheza
created arm64_a630_noubo #2889522
google-freedreno-cheza
 
  Panfrost
created panfrost-t720-gles2:arm64 #2889531
mesa-ci-aarch64-lava-collabora
created panfrost-t760-gles2:armhf #2889532
mesa-ci-aarch64-lava-collabora
created panfrost-t860-gles2:arm64 #2889533
mesa-ci-aarch64-lava-collabora
created panfrost-t860-gles3:arm64 #2889534
mesa-ci-aarch64-lava-collabora
 
  Radv
created radv-fossils #2889535
 
  Virgl
created virgl-gles2 #2889536
created virgl-gles3 #2889537
created virgl-gles31 #2889538
created virgl-traces #2889539