anchor.diff:                      let fname = Path.Combine(baseDir, (sprintf "%s_Transforms.txt" sbasename))
                       File.WriteAllText(fname, s.ToString())
   
  -            // TODO: vertex shader & constants
  -
  -            // TODO: pixel shader constants
  -            let mutable psDat = InteropTypes.NativeMemoryBuffer()
  -
  -            let getPS = false
  -
  -            if getPS && getPixelShader(NativeInterop.NativePtr.toNativeInt &&psDat) && psDat.Size > 0 then
  -                let pixName = sprintf "%s_pixelshader.dat" sbasename
  -                let pixPath = Path.Combine(baseDir, pixName)
  -
  -                let data:byte[] = Array.zeroCreate psDat.Size
  -                Marshal.Copy(psDat.Data, data, 0, psDat.Size)
  -                let crc = CRC32.single_step data |> CRC32.toU32
  -                File.WriteAllBytes(pixPath, data)
  -                let crcPath = Path.Combine(baseDir, sprintf "%s_pixelshader_crc32.txt" sbasename )
  -                File.WriteAllText(crcPath, sprintf "%d" crc)
  -                log.Info "Wrote pixel shader of size %A with crc %d to %s" psDat.Size crc crcPath
  -
               log.Info "Wrote snapshot %d to %s" snapshotNum.Value baseDir
   
  -            ib.Unlock()
  -            vb.Unlock()
  -
  +            unlock()
               0
           with
               e ->
                   log.Error "%A" e
  +                // Note, don't do this, it crashes.
  +                //unlock()
                   InteropTypes.GenericFailureCode
  
positive.code: 
              // lock vb and ib
              let vbDS = vb.Lock(0, vb.Description.SizeInBytes, LockFlags.ReadOnly)
              if not vbDS.CanRead then failwith "Failed to lock vertex buffer for reading"
              use vbReader = new BinaryReader(vbDS) // disposable
  
              let ibDS = ib.Lock(0, ib.Description.Size, LockFlags.ReadOnly)
              if not ibDS.CanRead then failwith "Failed to lock index buffer for reading"
              use ibReader = new BinaryReader(ibDS) // disposable
  
  
negative.code: 
              // get active stream information for stream 0.  currently we ignore other streams (will log a warning below if the declaration
              // uses data from non-stream 0).
              let mutable offsetBytes = 0
              let mutable strideBytes = 0
  
  