Правильный способ использования металла - PullRequest
1 голос
/ 31 мая 2019

У меня есть разные типы рисунков, которые я делаю в своем приложении. Например, я рисую фигуры и сетки.

Для каждого типа рисования у меня есть собственный вершинный и фрагментный шейдер и класс, который наследуется от MTKViewDelegate. Каждый из этих классов имеет дело с обработкой, необходимой для вычисления входных данных, и с методом, который выглядит следующим образом и вызывается при init:

private func loadMetal(_ mtkView: MTKView) {
    mtkView.colorPixelFormat = .bgra8Unorm_srgb

    let defaultLibrary = device.makeDefaultLibrary()!
    let vertexProgram = defaultLibrary.makeFunction(name: "grid_vertex")
    let fragmentProgram = defaultLibrary.makeFunction(name: "grid_fragment")

    let pipelineStateDescriptor = MTLRenderPipelineDescriptor()
    pipelineStateDescriptor.vertexFunction = vertexProgram
    pipelineStateDescriptor.fragmentFunction = fragmentProgram
    pipelineStateDescriptor.colorAttachments[0].pixelFormat = mtkView.colorPixelFormat

    pipelineState = try! device.makeRenderPipelineState(descriptor: pipelineStateDescriptor)

    commandQueue = device.makeCommandQueue()

    vertexBuffer = device.makeBuffer(length: bufferCapacity * MemoryLayout<GridVertex>.stride, options: [])

    vertexIndices = device.makeBuffer(length: bufferCapacity * MemoryLayout<UInt16>.size,
                                      options: [])
}

Итак, для каждой пары вершинных / фрагментных шейдеров я создаю pipeDescriptor и команду Queue. Это работает нормально, но мне было интересно, если это нормально, или я должен повторно использовать командуQueue / pipe?

1 Ответ

2 голосов
/ 31 мая 2019

Вы должны повторно использовать очередь команд.За исключением особых случаев, для каждого устройства обычно имеется одна очередь команд.

Нет необходимости повторно использовать объект дескриптора конвейера.Они дешевы в создании и предназначены для того, чтобы быть временными.(Трубопровод состояние объекты дороги в создании и должны быть созданы один раз и использованы повторно, как вы, кажется, делаете.)

См. Временные и непереходные объекты в металле Руководства по программированию металлов.

...