因此,我正在制作一个金属计算应用程序。根据Metal的良好做法,MTLComputePipelineState
应该在程序开始时进行初始化,因为它很昂贵。要制作一个MTLComputePipelineState
,我必须使用MTLFunction
这是我的内核功能。像这样:
id<MTLFunction> myKernel = [_defaultLibrary newFunctionWithName:@"myKernel"];
_myPipelineState = [_device newComputePipelineStateWithFunction:myKernel error:&error];
在这些内核中,我使用MTLArgumentEncoders
将值编码到我的参数缓冲区中,该参数缓冲区也使用内核函数。
像这样:
id<MTLArgumentEncoder> argInEncoder =
[myFunction newArgumentEncoderWithBufferIndex:ComputeBufferIn1];
这只是一个随机的问题,因为我正在缓存MTLComputePipelineStates
,如果它们对性能有影响,是否也应该缓存我的MTLArgumentEncoder
?
谢谢