Reland "Simplify device selection" with fix (#1386)

REVERT AGAIN IF THIS CAUSES BREAKAGE

* Revert "Revert "Simplify device selection" and dependent commits (#1384)"

This reverts commit 0a1288f5e8262e900169795d742082bbc9d6ee22.

* Free DeviceHolder even on TestFailedButDeviceReusable
diff --git a/src/webgpu/examples.spec.ts b/src/webgpu/examples.spec.ts
index 7b506c8..fb3bb6f 100644
--- a/src/webgpu/examples.spec.ts
+++ b/src/webgpu/examples.spec.ts
@@ -228,11 +228,11 @@
 Tests that a BC format passes validation iff the feature is enabled.`
   )
   .params(u => u.combine('textureCompressionBC', [false, true]))
-  .beforeAllSubcases(async t => {
+  .beforeAllSubcases(t => {
     const { textureCompressionBC } = t.params;
 
     if (textureCompressionBC) {
-      await t.selectDeviceOrSkipTestCase('texture-compression-bc');
+      t.selectDeviceOrSkipTestCase('texture-compression-bc');
     }
   })
   .fn(async t => {
@@ -257,11 +257,11 @@
 Tests that an ETC2 format passes validation iff the feature is enabled.`
   )
   .params(u => u.combine('textureCompressionETC2', [false, true]))
-  .beforeAllSubcases(async t => {
+  .beforeAllSubcases(t => {
     const { textureCompressionETC2 } = t.params;
 
     if (textureCompressionETC2) {
-      await t.selectDeviceOrSkipTestCase('texture-compression-etc2' as GPUFeatureName);
+      t.selectDeviceOrSkipTestCase('texture-compression-etc2' as GPUFeatureName);
     }
   })
   .fn(async t => {