Removing double tracing from command buffers with validation enabled. (#7864)

diff --git a/iree/hal/command_buffer_validation.c b/iree/hal/command_buffer_validation.c
index f8dffa9..3150844 100644
--- a/iree/hal/command_buffer_validation.c
+++ b/iree/hal/command_buffer_validation.c
@@ -15,12 +15,18 @@
 #include "iree/hal/buffer.h"
 #include "iree/hal/command_buffer.h"
 #include "iree/hal/descriptor_set.h"
+#include "iree/hal/detail.h"
 #include "iree/hal/device.h"
 #include "iree/hal/event.h"
 #include "iree/hal/executable.h"
 #include "iree/hal/executable_layout.h"
 #include "iree/hal/resource.h"
 
+// We directly call into the underlying command buffer as we don't need to
+// double-verify arguments and double-trace each method.
+#define BASE_VTABLE_DISPATCH(command_buffer, method_name) \
+  IREE_HAL_VTABLE_DISPATCH(command_buffer, iree_hal_command_buffer, method_name)
+
 typedef struct iree_hal_validating_command_buffer_t {
   iree_hal_resource_t resource;
   iree_hal_device_t* device;
@@ -197,7 +203,8 @@
   }
   command_buffer->is_recording = true;
 
-  return iree_hal_command_buffer_begin(command_buffer->target_command_buffer);
+  return BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer,
+                              begin)(command_buffer->target_command_buffer);
 }
 
 static iree_status_t iree_hal_validating_command_buffer_end(
@@ -216,7 +223,8 @@
   }
   command_buffer->is_recording = false;
 
-  return iree_hal_command_buffer_end(command_buffer->target_command_buffer);
+  return BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer,
+                              end)(command_buffer->target_command_buffer);
 }
 
 static void iree_hal_validating_command_buffer_begin_debug_group(
@@ -225,8 +233,8 @@
     const iree_hal_label_location_t* location) {
   iree_hal_validating_command_buffer_t* command_buffer =
       iree_hal_validating_command_buffer_cast(base_command_buffer);
-  iree_hal_command_buffer_begin_debug_group(
-      command_buffer->target_command_buffer, label, label_color, location);
+  BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer, begin_debug_group)
+  (command_buffer->target_command_buffer, label, label_color, location);
 }
 
 static void iree_hal_validating_command_buffer_end_debug_group(
@@ -234,8 +242,8 @@
   iree_hal_validating_command_buffer_t* command_buffer =
       iree_hal_validating_command_buffer_cast(base_command_buffer);
   --command_buffer->debug_group_depth;
-  iree_hal_command_buffer_end_debug_group(
-      command_buffer->target_command_buffer);
+  BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer, end_debug_group)
+  (command_buffer->target_command_buffer);
 }
 
 static iree_status_t iree_hal_validating_command_buffer_execution_barrier(
@@ -254,7 +262,8 @@
 
   // TODO(benvanik): additional synchronization validation.
 
-  return iree_hal_command_buffer_execution_barrier(
+  return BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer,
+                              execution_barrier)(
       command_buffer->target_command_buffer, source_stage_mask,
       target_stage_mask, flags, memory_barrier_count, memory_barriers,
       buffer_barrier_count, buffer_barriers);
@@ -271,7 +280,8 @@
 
   // TODO(benvanik): additional synchronization validation.
 
-  return iree_hal_command_buffer_signal_event(
+  return BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer,
+                              signal_event)(
       command_buffer->target_command_buffer, event, source_stage_mask);
 }
 
@@ -286,7 +296,8 @@
 
   // TODO(benvanik): additional synchronization validation.
 
-  return iree_hal_command_buffer_reset_event(
+  return BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer,
+                              reset_event)(
       command_buffer->target_command_buffer, event, source_stage_mask);
 }
 
@@ -307,7 +318,8 @@
 
   // TODO(benvanik): additional synchronization validation.
 
-  return iree_hal_command_buffer_wait_events(
+  return BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer,
+                              wait_events)(
       command_buffer->target_command_buffer, event_count, events,
       source_stage_mask, target_stage_mask, memory_barrier_count,
       memory_barriers, buffer_barrier_count, buffer_barriers);
@@ -325,7 +337,8 @@
       iree_hal_buffer_memory_type(buffer),
       IREE_HAL_MEMORY_TYPE_DEVICE_VISIBLE));
 
-  return iree_hal_command_buffer_discard_buffer(
+  return BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer,
+                              discard_buffer)(
       command_buffer->target_command_buffer, buffer);
 }
 
@@ -374,7 +387,8 @@
         target_offset, length, pattern_length);
   }
 
-  return iree_hal_command_buffer_fill_buffer(
+  return BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer,
+                              fill_buffer)(
       command_buffer->target_command_buffer, target_buffer, target_offset,
       length, pattern, pattern_length);
 }
@@ -405,7 +419,8 @@
   IREE_RETURN_IF_ERROR(
       iree_hal_buffer_validate_range(target_buffer, target_offset, length));
 
-  return iree_hal_command_buffer_update_buffer(
+  return BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer,
+                              update_buffer)(
       command_buffer->target_command_buffer, source_buffer, source_offset,
       target_buffer, target_offset, length);
 }
@@ -478,7 +493,8 @@
         "source and target ranges overlap within the same buffer");
   }
 
-  return iree_hal_command_buffer_copy_buffer(
+  return BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer,
+                              copy_buffer)(
       command_buffer->target_command_buffer, source_buffer, source_offset,
       target_buffer, target_offset, length);
 }
@@ -501,7 +517,8 @@
 
   // TODO(benvanik): validate offset and value count with layout.
 
-  return iree_hal_command_buffer_push_constants(
+  return BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer,
+                              push_constants)(
       command_buffer->target_command_buffer, executable_layout, offset, values,
       values_length);
 }
@@ -521,7 +538,8 @@
   // TODO(benvanik): validate binding_offset.
   // TODO(benvanik): validate bindings.
 
-  return iree_hal_command_buffer_push_descriptor_set(
+  return BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer,
+                              push_descriptor_set)(
       command_buffer->target_command_buffer, executable_layout, set,
       binding_count, bindings);
 }
@@ -541,7 +559,8 @@
   // TODO(benvanik): validate set index.
   // TODO(benvanik): validate dynamic offsets (both count and offsets).
 
-  return iree_hal_command_buffer_bind_descriptor_set(
+  return BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer,
+                              bind_descriptor_set)(
       command_buffer->target_command_buffer, executable_layout, set,
       descriptor_set, dynamic_offset_count, dynamic_offsets);
 }
@@ -558,9 +577,9 @@
   IREE_RETURN_IF_ERROR(iree_hal_command_buffer_validate_dispatch_bindings(
       command_buffer, executable, entry_point));
 
-  return iree_hal_command_buffer_dispatch(command_buffer->target_command_buffer,
-                                          executable, entry_point, workgroup_x,
-                                          workgroup_y, workgroup_z);
+  return BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer, dispatch)(
+      command_buffer->target_command_buffer, executable, entry_point,
+      workgroup_x, workgroup_y, workgroup_z);
 }
 
 static iree_status_t iree_hal_validating_command_buffer_dispatch_indirect(
@@ -593,7 +612,8 @@
   IREE_RETURN_IF_ERROR(iree_hal_command_buffer_validate_dispatch_bindings(
       command_buffer, executable, entry_point));
 
-  return iree_hal_command_buffer_dispatch_indirect(
+  return BASE_VTABLE_DISPATCH(command_buffer->target_command_buffer,
+                              dispatch_indirect)(
       command_buffer->target_command_buffer, executable, entry_point,
       workgroups_buffer, workgroups_offset);
 }