anchor.diff:                            multisample : MultisampleState,
                             depthStencil : INativeResourceLocation<VkPipelineDepthStencilStateCreateInfo>
                            ) =
  -        inherit AbstractResourceLocation<VkPipeline>(owner, key)
  -
  -        let mutable pipe : nativeptr<VkPipeline> = 
  -            let ptr = NativePtr.alloc 1
  -            NativePtr.write ptr VkPipeline.Null
  -            ptr
  +        inherit AbstractPointerResource<VkPipeline>(owner, key)
   
           static let check str err =
               if err <> VkResult.VkSuccess then failwithf "[Vulkan] %s" str
   
           override x.Create() =
  +            base.Create()
               program.Acquire()
               inputState.Acquire()
               inputAssembly.Acquire()
  
positive.code:                             prog.PipelineLayout.Handle,
                              renderPass.Handle,
                              0u,
                              !!pipe,
                              0
                          )
  
                      VkRaw.vkCreateGraphicsPipelines(device.Handle, VkPipelineCache.Null, 1u, pDesc, NativePtr.zero, pHandle)
                          |> check "could not create pipeline"
  
                      NativePtr.write pipe !!pHandle
                      return Pipeline(device, !!pHandle, Unchecked.defaultof<_>)
                  }
  
              { handle = pipeline.Handle; version = 666 }
  
          interface INativeResourceLocation<VkPipeline> with
              member x.Pointer = pipe
  
      type IndirectDrawCallResource(owner : IResourceCache, key : list<obj>, indexed : bool, calls : IResourceLocation<IndirectBuffer>) =
          inherit AbstractPointerResourceWithEquality<DrawCall>(owner, key)
  
negative.code:     default x.Free _ = ()
  
      member x.Pointer = ptr
  
      member x.HasHandle = hasHandle
  
      member x.NoChange() =
          dec &version
  