anchor.diff:              | CLPtr(t, e) -> CAddressOf(t, e)
               | CLVecSwizzle(t, e, c) -> CVecSwizzle(t, toExpr e, c)
               | CLMatrixElement(t, e, r, c) -> CMatrixElement(t, toExpr e, r, c)
  +            | CLInput(k,t,n,i) -> CReadInput(k,t,n,i)
   
       let rec internal visit (used : Used) (e : CLExpr) =
           match e with
  
positive.code:     | CLPtr of CType * CExpr
      | CLVecSwizzle of CType * CLExpr * list<CVecComponent>
      | CLMatrixElement of t : CType * m : CLExpr * r : int * c : int
  
      member x.ctype =
          match x with
  
negative.code:             | CAddressOf(t, e) -> CLPtr(t, e)
              | CVecSwizzle(t, e, c) -> CLVecSwizzle(t, ofExpr e, c)
              | CMatrixElement(t, e, r, c) -> CLMatrixElement(t, ofExpr e, r, c)
              | CReadInput(k,t,n,i) -> CLInput(k,t,n,i)
              | _ -> failwithf "[FShade] cannot convert CExpr toCLExpr (%A)" e
              
      let rec ofExprSafe (e : CExpr) =
  