Removing nested command buffers and adding indirect execution. (#17724)
The compiler is unlikely to need nested execution and the concept of
nested command buffers makes HAL driver implementation trickier. Instead
now all command buffers have a single type which may optionally include
indirect bindings. HAL devices now optionally take a binding table per
command buffer to use when scheduling it. The compiler now has a
`hal.device.queue.execute.indirect` available that takes a single
command buffer and a binding table for it because having nested variadic
imports is not possible.
This is a non-breaking binary change as the compiler has never emitted
the removed execute call or nested command buffers.
Future changes will add command buffer recording and validation of
indirect bindings. Today they're ignored as there's no way to record
command buffers with indirect bindings.
diff --git a/tools/iree-benchmark-executable-main.c b/tools/iree-benchmark-executable-main.c
index 60f5395..2fd1066 100644
--- a/tools/iree-benchmark-executable-main.c
+++ b/tools/iree-benchmark-executable-main.c
@@ -290,7 +290,7 @@
++fence_value;
IREE_RETURN_IF_ERROR(iree_hal_device_queue_execute(
args->device, IREE_HAL_QUEUE_AFFINITY_ANY, wait_semaphore_list,
- signal_semaphore_list, 1, &command_buffer));
+ signal_semaphore_list, 1, &command_buffer, /*binding_tables=*/NULL));
// Block and wait for the submission to complete.
// Note that this will include round-trip overhead and if the dispatch or