[iOS]Metal에서 GPU 컴퓨팅(5) MTLLibrary
4918 단어 iOSObjective-C금속XcodeGPU
지금까지 Metal의 GPU 컴퓨팅에 대해 해설 기사를 써 왔습니다.
[iOS] Metal에서 GPU 컴퓨팅 (1) 최소한의 코드 작성 및 특성 파악
[iOS] Metal에서 GPU 컴퓨팅 (2) 군지능
[iOS] Metal에서 GPU 컴퓨팅 (3) MTLDevice
[iOS] Metal에서 GPU 컴퓨팅 (4) MTKView
이 기사에서는 지난 번에 계속해서 Apple이 제공하는 샘플 코드에 대해 설명합니다.
취급하는 샘플 코드는, 전회와 같은 라이프게임의 앱, MetalGameOfLife입니다.
MetalGameOfLife
(실행 화면)
이번은, 샘플 코드내의 MTLLibrary 에 대해서 해설을 실시합니다.
MTLLibrary를 이용함으로써 GPU측의 언어 Metal shading language의 함수를 CPU측의 언어 Objective-C나 Swift로 취급하는 것이 가능하게 됩니다.
MTLLibrary는 클래스가 아닌 프로토콜입니다.
MTLLibrary를 따르는 객체는 Metal shading languange의 소스 코드를 포함합니다. 셰이더 파일에 있는 소스 코드는 빌드 시 컴파일되고 문자열로 작성된 MSL 코드는 런타임에 컴파일됩니다.
MTLLibrary의 객체를 생성하기 위해서는, MTLDevice의 메소드를 이용합니다.
컴파일된 바이너리에서 라이브러리를 만드는 경우 다음 메서드 중 하나를 사용합니다.
또, 런타임으로 텍스트로부터 컴파일해 라이브러리를 만드는 경우는, 이하의 메소드의 어떤 것인가를 이용합니다.
다시 말하지만, 이 샘플 코드는 주로 다음 파일로 구성되어 있습니다.
AAPLRender.h
AAPLRender.m
AAPLViewController.h
AAPLViewController.m
Sharder.metal
이 중 AAPLRender.m에는 병렬 컴퓨팅 및 드로잉의 CPU측의 로직이 Shader.metal에는 정점 셰이더, 프래그먼트 셰이더, GPU 컴퓨팅용 셰이더가 쓰여져 있습니다.
여기에서는 샘플 코드 내에서 MTLLibrary의 사용 부분을 설명합니다.
AAPLRender.m에는 다음 설명이 있습니다.
Objective-C: AAPLRender.m
@property (nonatomic, strong) id<MTLLibrary> library;
...
_library = [_device newDefaultLibrary];
MTLDevice의 newDefaultLibrary 메소드는 라이브러리를 생성합니다.
이 샘플 코드에서는, 컴파일 끝난 바이너리로부터 라이브러리의 생성을 행하고 있는 번역입니다.
다음의 코드에서는, 정점 셰이더 및 프래그먼트 셰이더의 컴파일 끝난 함수를, MTLFunction 에 따르는 오브젝트에 포함하고 있습니다.
AAPLRender.m
id<MTLFunction> vertexProgram = [_library newFunctionWithName:@"lighting_vertex"];
id<MTLFunction> fragmentProgram = [_library newFunctionWithName:@"lighting_fragment"];
@"lighting_vertex"및 @"lighting_fragment"는 Shader.metal에 설명된 함수 이름입니다.
또한 다음 코드에서는 컴퓨팅용으로 컴파일된 함수를 MTLComputePipelineDescriptor 클래스의 개체 속성으로 설정합니다.
AAPLRender.m
descriptor.computeFunction = [_library newFunctionWithName:@"game_of_life"];
...
descriptor.computeFunction = [_library newFunctionWithName:@"activate_random_neighbors"];
@"game_of_life"및 @"activate_random_neighbors"는 Shader.metal에 설명된 함수 이름입니다.
이처럼 MTLLibrary는 Metal shading language의 함수를 다루는 인터페이스의 역할을 하고 있습니다.
이번에는 라이프 게임의 샘플 코드 내에서 MTLLibrary의 해설을 실시했습니다.
다음 번 이후, 또 다른 개소에 대한 해설을 실시해 갑니다.
Reference
이 문제에 관하여([iOS]Metal에서 GPU 컴퓨팅(5) MTLLibrary), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuky_az/items/fd777dfde0bdef85861e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)