anchor.diff:             (optimize (speed 3) (safety 0) (debug 0)))
     (values))
   
  -(defun+ gen-recompile-func (name stage-pairs post context state-var)
  +(defun+ gen-recompile-func (name stage-pairs post context)
     (let* ((stages (mapcat λ(list (car _) (func-spec->name (cdr _)))
                            stage-pairs))
            (gpipe-args (append stages (list :post post))))
  
positive.code:                               stage-pairs
                                post
                                aggregate-public-uniforms
                                uniform-assigners))
          ;;
          ;; generate the code that actually renders
          ,(def-dispatch-func ctx name init-func-name
                              primitive uniform-assigners
                              aggregate-public-uniforms
                              (find :static context)
                              state-var is-compute)
          ;;
          ;; generate the function that recompiles this pipeline
          ,(gen-recompile-func name stage-pairs post context state-var)
          ;;
          ;; off to the races! Note that we upload the spec at compile
          ;; time (using eval-when)
  
negative.code:                            stage-pairs
                             post
                             aggregate-public-uniforms
                             uniform-assigners
                             state-tag)
    (let ((uniform-names (mapcar #'first aggregate-public-uniforms)))
      (multiple-value-bind (upload-forms int-arr-size uint-arr-size)
          (generate-uniform-upload-forms uniform-assigners)
  