Metal IOS Swift 예제에서 제안하는 3 중 버퍼링 연습을 이해하려고합니다. 이것은 균일 한 애니메이션의 데모 안에 표시됩니다.이 코드는 구조체의 메모리 정렬 크기를 신속하게 어떻게 찾습니까? 바이너리 연산이 필요한 이유는 무엇입니까?
필자는 정렬 된 메모리가 단순히 장치가 실제로 좋아하는 바이트 수의 배수 인 증가량으로 시작한다는 것을 이해합니다. 내 혼란들은 유니폼 구조체의 크기와 바이트를 찾기 위해 사용 코드
// The 256 byte aligned size of our uniform structure
let alignedUniformsSize = (MemoryLayout<Uniforms>.size & ~0xFF) + 0x100
의 라인입니다. 나는 이진 연산이 왜 여기에 있는지 혼란 스럽다. 나는 그들이 무엇을하는지에 대해 정말로 확신하지 못한다.
이렇게 정렬 된 크기가 이와 같은 버퍼를 만드는 데 도움이되는 경우. 버퍼가 자동으로 바이트 정렬 메모리를 할당하고 이후 유니폼의 메모리 저장 위치로 사용된다는 것은 확실합니다.
let buffer = self.device.makeBuffer(length:alignedUniformsSize * 3, options:[MTLResourceOptions.storageModeShared])
본질적으로 바이트 정렬 메모리를 할당하는 문제를 해결하기보다는 금속이 처리하도록합니다.
let allignedUniformsSize =
을했을 때 사용한 전략이 Int
또는 Float
등의 다른 유형에서는 작동하지 않는 이유가 있을까요?
정상적인 산술 버전은 훨씬 더 읽기 쉽습니다. – zsero