anchor.diff:                  | CMatrixElement(t, e, r, c) ->
                       let! e = ofExprSafe e
                       return CLMatrixElement(t, e, r, c)
  -
  +                    
  +                | CReadInput(k,t,n,i) -> 
  +                    return CLInput(k,t,n,i)
   
                   | _ -> 
                       return! None
  
positive.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)
              | _ -> failwithf "[FShade] cannot convert CExpr toCLExpr (%A)" e
              
      let rec ofExprSafe (e : CExpr) =
  
negative.code:             | 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
  