0
私はMTLBufferやMTLTextureの作成方法を知っていますが、これらのリソースが不要になったときにGPUメモリを解放するにはどうすればよいですか?MTLBufferとMTLTextureの割り当てを解除する方法
私はMTLBufferやMTLTextureの作成方法を知っていますが、これらのリソースが不要になったときにGPUメモリを解放するにはどうすればよいですか?MTLBufferとMTLTextureの割り当てを解除する方法
MTLBuffer
およびMTLTexture
はObjective-Cオブジェクトであり、したがって参照カウントされます。 Objective-Cプロジェクトで自動参照カウントを使用している場合や、Swiftを使用してMetalを使用している場合は、バッファまたはテクスチャへの参照を保持しないようにするだけで、関連するハードウェアリソースが解放されます。
let texture: MTLTexture? = device.newTexture(with: descriptor)
texture = nil // <- resources will be released
一つは、texture
にnil
を割り当てるときに関連するアセンブリを介してステッピングすることによって、これを確認する最初の[MTLDebugTexture dealloc]
MetalTools`-[MTLDebugTexture dealloc]:
...
-> 0x100af569e <+34>: call 0x100af87ee ; symbol stub for: objc_msgSendSuper2
0x100af56a3 <+39>: add rsp, 0x10
0x100af56a7 <+43>: pop rbp
0x100af56a8 <+44>: ret
に私たちをリードしている...と[MTLToolsObject dealloc]
MetalTools`-[MTLToolsObject dealloc]:
0x100ac6c7a <+0>: push rbp
0x100ac6c7b <+1>: mov rbp, rsp
0x100ac6c7e <+4>: push r14
...
経由することができます。 ..とGeForceMTLDriverを通じて
GeForceMTLDriver`___lldb_unnamed_symbol1095$$GeForceMTLDriver:
-> 0x7fffd2e57b14 <+0>: push rbp
0x7fffd2e57b15 <+1>: mov rbp, rsp
すべての方法で、さまざまなdealloc
の方法でリソースを解放します。