Итак, я делаю приложение Metal Compute.И в соответствии с передовой практикой по металлу, MTLComputePipelineState
следует инициализировать в начале программы, потому что это дорого.Чтобы сделать MTLComputePipelineState
, я должен использовать MTLFunction
, который является моей функцией ядра.Примерно так:
id<MTLFunction> myKernel = [_defaultLibrary newFunctionWithName:@"myKernel"];
_myPipelineState = [_device newComputePipelineStateWithFunction:myKernel error:&error];
В этих ядрах я использую MTLArgumentEncoders
для кодирования значений в моем буфере аргумента, который также использует функцию ядра.Примерно так:
id<MTLArgumentEncoder> argInEncoder =
[myFunction newArgumentEncoderWithBufferIndex:ComputeBufferIn1];
Просто случайный вопрос, так как я кеширую свои MTLComputePipelineStates
Должен ли я также кэшировать свои MTLArgumentEncoder
с, если они влияют на производительность?
Спасибо