Я знаю, как создать MTLBuffer и MTLTexture, но как мне освободить память GPU для этих ресурсов, когда они больше не нужны?Как освободить MTLBuffer и MTLTexture
0
A
ответ
4
MTLBuffer
и MTLTexture
Объекты Objective-C и, следовательно, подсчет ссылок. Если вы используете автоматический подсчет ссылок в проекте Objective-C или используете Metal via Swift, просто убедитесь, что вы больше не держите ссылки на буфер или текстуру, выпустите любые связанные с ними аппаратные ресурсы.
let texture: MTLTexture? = device.newTexture(with: descriptor)
texture = nil // <- resources will be released
можно подтвердить это с помощью пошагового связанного узла при назначении nil
к texture
, который первым приводит нас к [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
.