Центральная проблема
У меня есть два конвейера рендеринга в одном кодере команд рендеринга. Первый конвейер записывает данные в буфер, который используется во втором конвейере. Это не похоже на работу, и я ожидаю, что это проблема синхронизации. Когда я использую один отдельный кодировщик команд рендеринга для каждого конвейера рендеринга, я получаю желаемый результат. Можно ли решить эту проблему с помощью одного кодировщика команд рендеринга или мне нужно два отдельных кодировщика для синхронизации буфера?
Вот более конкретный c case:
Первый конвейер является не растеризованным конвейером, в котором работает только вершинный шейдер для вывода в MTLBuffer
с сохранением MTLDrawPrimitivesIndirectArguments
для использования для вызова drawPrimitives
для второго конвейера, который выглядит следующим образом:
// renderCommandEncoder is MTLRenderCommandEncoder
// firstPipelineState and secondPipelineState are two different MTLRenderPipelineState
// indirectArgumentsBuffer is a MTLBuffer containing MTLDrawPrimitivesIndirectArguments
// numberOfVertices is number of vertices suited for first pipeline
// first pipeline
renderCommandEncoder.setRenderPipelineState(firstPipelineState)
renderCommandEncoder.setVertexBuffer(indirectArgumentsBuffer, offset: 0, index: 0)
renderCommandEncoder.drawPrimitives(type: .point, vertexStart: 0, vertexCount: numberOfVertices)
// second pipeline
renderCommandEncoder.setRenderPipelineState(secondPipelineState)
renderCommandEncoder.setVertexBuffer(secondPipelineBuffer, offset: 0, index: 0)
renderCommandEncoder.drawPrimitives(type: .point, indirectBuffer: indirectArgumentsBuffer, indirectBufferOffset: 0)
renderCommandEncoder.endEncoding()
Как могу ли я убедиться, что indirectArgumentsBuffer
был записан первым конвейером при вызове drawPrimitives
для второго конвейера, который использует и нуждается в содержимом indirectArgumentsBuffer
?