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>
53 jobs for !4854 with iris-semaphore-wait
latest detached
Status Job ID Name Coverage
  Container
manual arm_build #2534454
aarch64 manual
manual arm_test #2534455
aarch64 manual
manual windows_build_vs2019 #2534456
windows shell 1809 mesa manual
manual x86_build #2534450
manual
manual x86_build_old #2534453
manual
manual x86_test-gl #2534451
manual
manual x86_test-vk #2534452
manual
 
  Meson X86 64
created meson-clang #2534460
created meson-classic #2534459
created meson-clover #2534461
created meson-clover-old-llvm #2534462
created meson-gallium #2534458
created meson-testing #2534457
created meson-vulkan #2534463
 
  Scons
created scons-win64 #2534464
allowed to fail
 
  Meson Misc
created meson-arm64 #2534466
aarch64
created meson-arm64-build-test #2534467
aarch64
created meson-armhf #2534465
aarch64
created meson-i386 #2534469
created meson-mingw32-x86_64 #2534472
created meson-ppc64el #2534471
kvm
created meson-s390x #2534470
kvm
created meson-windows-vs2019 #2534468
windows docker 1809 mesa
 
  Llvmpipe
created llvmpipe-gles2 #2534476
created llvmpipe-traces #2534477
created piglit-glslparser #2534474
created piglit-quick_gl #2534473
created piglit-quick_shader #2534475
 
  Softpipe
created softpipe-gles2 #2534478
created softpipe-gles31 1/4 #2534481
created softpipe-gles3 1/2 #2534479
created softpipe-gles31 2/4 #2534482
created softpipe-gles31 3/4 #2534483
created softpipe-gles31 4/4 #2534484
created softpipe-gles3 2/2 #2534480
 
  Freedreno
created arm64_a306_gles2 #2534489
google-freedreno-db410c
created arm64_a306_gles3 #2534490
google-freedreno-db410c
created arm64_a530_gles2 #2534491
google-freedreno-db820c
created arm64_a530_gles3 #2534492
google-freedreno-db820c
created arm64_a530_gles31 #2534493
google-freedreno-db820c
created arm64_a630_gles2 #2534485
mesa-cheza
created arm64_a630_gles3 #2534487
mesa-cheza
created arm64_a630_gles31 #2534486
mesa-cheza
created arm64_a630_gles31_options #2534488
mesa-cheza
 
  Panfrost
created panfrost-t720-gles2:arm64 #2534494
mesa-ci-aarch64-lava-collabora
created panfrost-t760-gles2:armhf #2534495
mesa-ci-aarch64-lava-collabora
created panfrost-t860-gles2:arm64 #2534496
mesa-ci-aarch64-lava-collabora
created panfrost-t860-gles3:arm64 #2534497
mesa-ci-aarch64-lava-collabora
 
  Radv
created radv-fossils #2534498
 
  Virgl
created virgl-gles2 #2534499
created virgl-gles3 #2534500
created virgl-gles31 #2534501
created virgl-traces #2534502