Reland "Adds ETC2 and ASTC types to enable testing when relevant." (#835)

diff --git a/src/webgpu/examples.spec.ts b/src/webgpu/examples.spec.ts
index 63d83fb..d8774df 100644
--- a/src/webgpu/examples.spec.ts
+++ b/src/webgpu/examples.spec.ts
@@ -249,19 +249,29 @@
     );
   });
 
-g.test('gpu,with_texture_compression,etc')
+g.test('gpu,with_texture_compression,etc2')
   .desc(
     `Example of a test using a device descriptor.
-
-TODO: Test that an ETC format passes validation iff the feature is enabled.`
+Tests that an ETC2 format passes validation iff the feature is enabled.`
   )
-  .params(u => u.combine('textureCompressionETC', [false, true]))
+  .params(u => u.combine('textureCompressionETC2', [false, true]))
   .fn(async t => {
-    const { textureCompressionETC } = t.params;
+    const { textureCompressionETC2 } = t.params;
 
-    if (textureCompressionETC) {
-      await t.selectDeviceOrSkipTestCase('texture-compression-etc' as GPUFeatureName);
+    if (textureCompressionETC2) {
+      await t.selectDeviceOrSkipTestCase('texture-compression-etc2' as GPUFeatureName);
     }
 
-    // TODO: Should actually test createTexture with an ETC format here.
+    const shouldError = !textureCompressionETC2;
+    t.expectGPUError(
+      'validation',
+      () => {
+        t.device.createTexture({
+          format: 'etc2-rgb8unorm',
+          size: [4, 4, 1],
+          usage: GPUTextureUsage.TEXTURE_BINDING,
+        });
+      },
+      shouldError
+    );
   });