Minor fixed to render bundle indirect draw test

Simplifies the indirect buffer usage and fixes some minor issues
that were revealed when working on a fix for the behavior under
test in Dawn.

Bug: 495489174
Change-Id: I0dd4ce6eb70eb0cc5ada1ad9b62f1267062c3339
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/305696
Auto-Submit: Brandon Jones <bajones@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Brandon Jones <bajones@chromium.org>
diff --git a/src/dawn/tests/end2end/RenderBundleTests.cpp b/src/dawn/tests/end2end/RenderBundleTests.cpp
index 37e79ea..a954888 100644
--- a/src/dawn/tests/end2end/RenderBundleTests.cpp
+++ b/src/dawn/tests/end2end/RenderBundleTests.cpp
@@ -357,10 +357,8 @@
     bufferDesc.usage = wgpu::BufferUsage::Index;
     wgpu::Buffer bigIdx = device.CreateBuffer(&bufferDesc);
 
-    // Indirect buffers
-    wgpu::Buffer indirect[2];
-    indirect[0] = CreateIndirectBuffer({3, 1, 100, 0, 0});
-    indirect[1] = CreateIndirectBuffer({3, 1, 0, 0, 0, OOB_COUNT, 1, 0, 0, 0});
+    // Indirect buffer
+    wgpu::Buffer indirect = CreateIndirectBuffer({3, 1, 0, 0, 0, OOB_COUNT, 1, 0, 0, 0});
 
     // Buffers to use for simple fragment counter
     uint32_t data[] = {0};
@@ -404,7 +402,7 @@
     renderBundleEncoder.SetPipeline(pipeline);
     renderBundleEncoder.SetBindGroup(0, bindGroup);
     renderBundleEncoder.SetIndexBuffer(smallIdx, wgpu::IndexFormat::Uint32);
-    renderBundleEncoder.DrawIndexedIndirect(indirect[0], 0);
+    renderBundleEncoder.DrawIndexedIndirect(indirect, 0);
     wgpu::RenderBundle renderBundle = renderBundleEncoder.Finish();
 
     //
@@ -418,14 +416,21 @@
         pass.SetPipeline(pipeline);
         pass.SetBindGroup(0, bindGroup);
         pass.SetIndexBuffer(bigIdx, wgpu::IndexFormat::Uint32);
-        pass.DrawIndexedIndirect(indirect[1], 0);
-        pass.DrawIndexedIndirect(indirect[1], 20);
+        pass.DrawIndexedIndirect(indirect, 0);
+        pass.DrawIndexedIndirect(indirect, 20);
         pass.End();
+
+        // Copy the fragment counter results to the readback buffer.
+        encoder.CopyBufferToBuffer(counterBuffer, 0, counterRead, 0, 4);
+
         wgpu::CommandBuffer commands = encoder.Finish();
         queue.Submit(1, &commands);
         queue.WriteBuffer(counterBuffer, 0, data, sizeof(uint32_t));
     }
 
+    // The warm up pass should always produce OOB_COUNT + 3 fragments from the two indirect draws.
+    EXPECT_BUFFER_U32_EQ(OOB_COUNT + 3, counterRead, 0);
+
     //
     // Bug - Same bundle executed in two render passes of one encoder.
     // Pass 1: Bundle only. Validation rewrites the bundle's persistent
@@ -455,7 +460,7 @@
             pass.SetPipeline(pipeline);
             pass.SetBindGroup(0, bindGroup);
             pass.SetIndexBuffer(smallIdx, wgpu::IndexFormat::Uint32);
-            pass.DrawIndexedIndirect(indirect[0], 0);
+            pass.DrawIndexedIndirect(indirect, 0);
             pass.ExecuteBundles(1, &renderBundle);
             pass.End();
         }