diff --git a/report-fossil.py b/report-fossil.py
index 7572ef15a9e0dc19a6eb26bca2e2e9b9d2189e00..4a2016bf8fa6502c7324b991626f75593619763d 100755
--- a/report-fossil.py
+++ b/report-fossil.py
@@ -74,6 +74,7 @@ class Statistic(typing.Generic[T]):
     display_name : str = attr.ib()
     more_is_better : bool = attr.ib(False)
     is_hash : bool = attr.ib(False)
+    change_discard_others : bool = attr.ib(False)
 
 
 statistics = [
@@ -126,7 +127,7 @@ statistics = [
     Statistic(internal_name='read_stalls', csv_names=['Read Stalls'], display_name='Read Stalls'),
 
     # Anv statistics
-    Statistic(internal_name='subgroup_size', csv_names=['Subgroup size'], display_name='Subgroup size', more_is_better=True),
+    Statistic(internal_name='subgroup_size', csv_names=['Subgroup size'], display_name='Subgroup size', more_is_better=True, change_discard_others=True),
     Statistic(internal_name='send_count', csv_names=['SEND Count'], display_name='Send messages'),
     Statistic(internal_name='loop_count', csv_names=['Loop Count'], display_name='Loop count'),
     Statistic(internal_name='cycle_count', csv_names=['Cycle Count'], display_name='Cycle count'),
@@ -311,10 +312,31 @@ class Report(ReportProtocol):
     def include(self, name: str, d0: Result, d1: Result) -> None:
         self.num_shaders += 1
 
+        # Figure out whether a given statistic change means we need to
+        # ignore all others.
+        discard_all_but = None
+        for stat in statistics:
+            m = stat.internal_name
+            d0_m: typing.Optional[int] = getattr(d0, m)
+            if d0_m is None:
+                continue
+            d1_m: typing.Optional[int] = getattr(d1, m)
+            if d1_m is None:
+                continue
+
+            if d0_m != d1_m and stat.change_discard_others:
+                discard_all_but = stat.internal_name
+                break
+
         affected = False
         stats: typing.List[typing.Tuple[Diff, int, int]] = []
         for stat in statistics:
             m = stat.internal_name
+
+            # Should this statistic be ignored?
+            if discard_all_but is not None and m != discard_all_but:
+                continue
+
             d0_m: typing.Optional[int] = getattr(d0, m)
             if d0_m is None:
                 continue