anchor.diff:           (structurally-unchanged-p (and (every #'identity current-stage-tags)
                                           (every #'identity new-stage-tags)
                                           (equal current-stage-tags new-stage-tags)))
  +         (state-tag (mod (reduce #'+ new-stage-tags)
  +                         (expt 2 16)))
            ;; we generate the func that compiles & uploads the pipeline
            ;; and also populates the pipeline's local-vars
            (primitive (varjo.internals:primitive-name-to-instance
  
positive.code:                            aggregate-public-uniforms
                             static
                             state-var
                             compute)
    (let* ((uniform-names (mapcar #'first aggregate-public-uniforms))
           (typed-uniforms (loop :for name :in uniform-names :collect
  
negative.code:          (handler-bind ((warning #'muffle-warning))
             (multiple-value-bind (src structurally-unchanged-p)
                 (%defpipeline-gfuncs ',name ',gpipe-args ',context)
               (unless structurally-unchanged-p
                 (eval src))))))))
  
  (defun+ gen-update-spec (name stage-pairs context)
    `(eval-when (:compile-toplevel :load-toplevel :execute)
  