Change `preferred_antialiasing_method` setting to a struct

Instead of passing in a single optional mode to enable, the caller can
now specify which set of AA methods to compile.
diff --git a/examples/headless/src/main.rs b/examples/headless/src/main.rs
index 01fd6ce..a48d41c 100644
--- a/examples/headless/src/main.rs
+++ b/examples/headless/src/main.rs
@@ -91,7 +91,7 @@
             surface_format: None,
             timestamp_period: queue.get_timestamp_period(),
             use_cpu: false,
-            preferred_antialiasing_method: Some(vello::AaConfig::Area),
+            antialiasing_support: vello::AaSupport::area_only(),
         },
     )
     .or_else(|_| bail!("Got non-Send/Sync error from creating renderer"))?;
diff --git a/examples/with_bevy/src/main.rs b/examples/with_bevy/src/main.rs
index 0c3d694..9ddf875 100644
--- a/examples/with_bevy/src/main.rs
+++ b/examples/with_bevy/src/main.rs
@@ -30,7 +30,7 @@
                 &RendererOptions {
                     surface_format: None,
                     timestamp_period: queue.0.get_timestamp_period(),
-                    preferred_antialiasing_method: Some(vello::AaConfig::Area),
+                    antialiasing_support: vello::AaSupport::area_only(),
                 },
             )
             .unwrap(),
diff --git a/examples/with_winit/src/lib.rs b/examples/with_winit/src/lib.rs
index 646f74e..49f5610 100644
--- a/examples/with_winit/src/lib.rs
+++ b/examples/with_winit/src/lib.rs
@@ -89,7 +89,7 @@
                     surface_format: Some(render_state.surface.format),
                     timestamp_period: render_cx.devices[id].queue.get_timestamp_period(),
                     use_cpu: use_cpu,
-                    preferred_antialiasing_method: None,
+                    antialiasing_support: vello::AaSupport::all(),
                 },
             )
             .expect("Could create renderer"),
@@ -518,7 +518,7 @@
                                     .queue
                                     .get_timestamp_period(),
                                 use_cpu,
-                                preferred_antialiasing_method: None,
+                                antialiasing_support: vello::AaSupport::all(),
                             },
                         )
                         .expect("Could create renderer")
diff --git a/src/lib.rs b/src/lib.rs
index 6013575..af016f6 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -62,7 +62,7 @@
 /// Specialization of `Result` for our catch-all error type.
 pub type Result<T> = std::result::Result<T, Error>;
 
-/// Possible configurations for antialiasing.
+/// Represents the antialiasing method to use during a render pass.
 #[derive(Copy, Clone, PartialEq, Eq)]
 pub enum AaConfig {
     Area,
@@ -70,6 +70,31 @@
     Msaa16,
 }
 
+/// Represents the set of antialiasing configurations to enable during pipeline creation.
+pub struct AaSupport {
+    pub area: bool,
+    pub msaa8: bool,
+    pub msaa16: bool,
+}
+
+impl AaSupport {
+    pub fn all() -> Self {
+        Self {
+            area: true,
+            msaa8: true,
+            msaa16: true,
+        }
+    }
+
+    pub fn area_only() -> Self {
+        Self {
+            area: true,
+            msaa8: false,
+            msaa16: false,
+        }
+    }
+}
+
 /// Renders a scene into a texture or surface.
 #[cfg(feature = "wgpu")]
 pub struct Renderer {
@@ -114,9 +139,9 @@
     // `RenderParams`.
     pub use_cpu: bool,
 
-    /// The anti-aliasing specialization that should be used when creating the pipelines. `None`
-    /// initializes all variants.
-    pub preferred_antialiasing_method: Option<AaConfig>,
+    /// Represents the enabled set of AA configurations. This will be used to determine which
+    /// pipeline permutations should be compiled at startup.
+    pub antialiasing_support: AaSupport,
 }
 
 #[cfg(feature = "wgpu")]
diff --git a/src/shaders.rs b/src/shaders.rs
index 5423686..26060ad 100644
--- a/src/shaders.rs
+++ b/src/shaders.rs
@@ -26,7 +26,6 @@
 use crate::{
     cpu_shader,
     engine::{BindType, Error, ImageFormat, ShaderId},
-    AaConfig,
 };
 
 #[cfg(feature = "wgpu")]
@@ -312,17 +311,15 @@
         BindType::BufReadOnly,
     ];
     let [fine_area, fine_msaa8, fine_msaa16] = {
-        const AA_MODES: [(AaConfig, Option<(&str, &str)>); 3] = [
-            (AaConfig::Area, None),
-            (AaConfig::Msaa8, Some(("fine_msaa8", "msaa8"))),
-            (AaConfig::Msaa16, Some(("fine_msaa16", "msaa16"))),
+        let aa_support = &options.antialiasing_support;
+        let aa_modes = [
+            (aa_support.area, None),
+            (aa_support.msaa8, Some(("fine_msaa8", "msaa8"))),
+            (aa_support.msaa16, Some(("fine_msaa16", "msaa16"))),
         ];
         let mut pipelines = [None, None, None];
-        for (i, (aa_mode, msaa_info)) in AA_MODES.iter().enumerate() {
-            if options
-                .preferred_antialiasing_method
-                .map_or(false, |m| m != *aa_mode)
-            {
+        for (i, (enabled, msaa_info)) in aa_modes.iter().enumerate() {
+            if !enabled {
                 continue;
             }
             let (range_end_offset, label, aa_config) = match *msaa_info {