diff --git a/gfxapi/gles/replay.go b/gfxapi/gles/replay.go
index b93d934..5fe239e 100644
--- a/gfxapi/gles/replay.go
+++ b/gfxapi/gles/replay.go
@@ -17,6 +17,7 @@
 import (
 	"android.googlesource.com/platform/tools/gpu/atom"
 	"android.googlesource.com/platform/tools/gpu/atom/transform"
+	"android.googlesource.com/platform/tools/gpu/config"
 	"android.googlesource.com/platform/tools/gpu/database"
 	"android.googlesource.com/platform/tools/gpu/gfxapi"
 	"android.googlesource.com/platform/tools/gpu/log"
@@ -65,13 +66,15 @@
 	flags service.TimingFlags
 }
 
-func (a api) ReplayTransforms(
+func (a api) Replay(
 	ctx replay.Context,
-	config replay.Config,
+	cfg replay.Config,
 	requests []replay.Request,
 	device *service.Device,
+	atoms atom.List,
+	out atom.Writer,
 	db database.Database,
-	logger log.Logger) atom.Transforms {
+	logger log.Logger) error {
 
 	transforms := atom.Transforms{}
 
@@ -119,7 +122,7 @@
 		precisionStrip(device, db, logger),
 		halfFloatOESToHalfFloatARB(device))
 
-	if c, ok := config.(drawConfig); ok && c.wireframe {
+	if c, ok := cfg.(drawConfig); ok && c.wireframe {
 		transforms.Add(wireframe(db, logger))
 	}
 
@@ -130,7 +133,16 @@
 		logger: logger,
 	})
 
-	return transforms
+	if config.DebugReplay {
+		log.Infof(logger, "Replaying %d atoms using transform chain:", len(atoms.Atoms))
+		for i, t := range transforms {
+			log.Infof(logger, "(%d) %#v", i, t)
+		}
+	}
+
+	transforms.Transform(atoms, out)
+
+	return nil
 }
 
 func (a api) QueryColorBuffer(ctx *replay.Context, mgr *replay.Manager, after atom.ID, width, height uint32, wireframe bool) <-chan replay.Image {
diff --git a/replay/batcher.go b/replay/batcher.go
index d9fbf57..0f2d24e 100644
--- a/replay/batcher.go
+++ b/replay/batcher.go
@@ -79,22 +79,7 @@
 		return fmt.Errorf("Failed to load atom stream (%s): %v", c.Atoms, err)
 	}
 
-	td := b.device.Info()
-
-	transforms := b.context.Generator.ReplayTransforms(
-		b.context.Context,
-		b.context.Config,
-		requests,
-		td,
-		b.database,
-		b.logger)
-
-	if config.DebugReplay {
-		log.Infof(b.logger, "Replaying %d atoms using transform chain:", len(list.Atoms))
-		for i, t := range transforms {
-			log.Infof(b.logger, "(%d) %#v", i, t)
-		}
-	}
+	device := b.device.Info()
 
 	architecture := b.device.Info().Architecture()
 
@@ -102,18 +87,28 @@
 
 	if err := func() (err interface{}) {
 		// Prevent panics from causing GAPIS to fall over.
-		// This is temporary, as atoms should return errors instead of causing
-		// runtime panics.
+		// This is temporary, as state mutators should return errors instead of
+		// causing runtime panics.
 		defer func() { err = recover() }()
-		transforms.Transform(*list, &adapter{
+
+		out := &adapter{
 			state:   gfxapi.NewState(),
 			db:      b.database,
 			logger:  b.logger,
 			builder: builder,
-		})
-		return
+		}
+
+		return b.context.Generator.Replay(
+			b.context.Context,
+			b.context.Config,
+			requests,
+			device,
+			*list,
+			out,
+			b.database,
+			b.logger)
 	}(); err != nil {
-		log.Errorf(b.logger, "Panic raised while transforming atoms for replay: %v", err)
+		log.Errorf(b.logger, "Panic raised while writing atoms for replay: %v", err)
 		return fmt.Errorf("%v", err)
 	}
 
@@ -148,12 +143,12 @@
 
 	connection, err := b.device.Connect()
 	if err != nil {
-		return fmt.Errorf("Failed to connect to device %v: %v", td.Name, err)
+		return fmt.Errorf("Failed to connect to device %v: %v", device.Name, err)
 	}
 	defer connection.Close()
 
 	if config.DebugReplay {
-		log.Infof(b.logger, "Sending payload to %v.", td.Name)
+		log.Infof(b.logger, "Sending payload to %v.", device.Name)
 	}
 
 	return executor.Execute(
diff --git a/replay/replay.go b/replay/replay.go
index f535f6d..b68ccaa 100644
--- a/replay/replay.go
+++ b/replay/replay.go
@@ -25,18 +25,19 @@
 
 // Generator is the interface for types that support replay generation.
 type Generator interface {
-	// ReplayTransforms is called when a replay pass is ready to be sent to the
-	// replay device. ReplayTransforms returns an atom transform list that
-	// transforms the original, unaltered atom stream into a stream configured for
-	// the replay pass. The transforms should satisfy all the specified requests
-	// and config.
-	ReplayTransforms(
+	// Replay is called when a replay pass is ready to be sent to the replay
+	// device. Replay may filter or transform the list of atoms, satisfying all
+	// the specified requests and config, before outputting the final atom stream
+	// to out.
+	Replay(
 		ctx Context,
 		cfg Config,
 		requests []Request,
 		device *service.Device,
+		atoms atom.List,
+		out atom.Writer,
 		db database.Database,
-		logger log.Logger) atom.Transforms
+		logger log.Logger) error
 }
 
 // Context describes the source capture and replay target information used for
