iOS上的金属:`newCommandQueueWithMaxCommandBufferCount`无法正常工作

时间:2016-12-18 08:22:02

标签: ios gpu metal

我有一个复杂的Metal渲染器,它使用了许多MTLCommandBuffer个对象,所以我开始使用newCommandQueueWithMaxCommandBufferCount来允许我的MTLCommandQueue支持超过默认的64个活动命令缓冲区,但据我所知,它不起作用。 无论我传递给MaxCommandBufferCount的值是什么,我只能创建多达64个并发命令缓冲区。

这是我打电话来创建命令队列:

    commandQueue = [_device newCommandQueueWithMaxCommandBufferCount: 128];

这是我用来测试它的代码:

- (id <MTLCommandBuffer>) makeCommandBuffer
{
    id <MTLCommandBuffer> commandBuffer = [commandQueue commandBuffer];
    commandBufferCounter ++;
    NSLog(@"command buffer created. Total count = %d", commandBufferCounter);
    [commandBuffer addCompletedHandler:^(id<MTLCommandBuffer> _Nonnull buffer) {
        commandBufferCounter--;
        NSLog(@"command buffer completed. Total count = %d", commandBufferCounter);
    }];

    return commandBuffer;
}

这个函数是我程序中命令缓冲区的唯一创建者,所以我总能看到我有多少个活动的,未完成的缓冲区的精确计数。一旦我达到64,对[commandQueue commandBuffer]的呼叫就会挂起,这导致我怀疑newCommandQueueWithMaxCommandBufferCount中的错误。

我已经在iOS 9和10上证实了这种行为,所以我倾向于怀疑这样一个明显的错误会持续这么久。

0 个答案:

没有答案