iOS Metal: порядок выполнения командного буфера - PullRequest
1 голос
/ 07 марта 2019

Предположим, я фиксирую две команды-буферы, модифицирующие одну и ту же текстуру, сгенерированные из одной и той же очереди:

var a: MTLCommandBuffer
var b: MTLCommandBuffer
...
a.commit()
b.commit()

Затем, предположим, что я дождусь завершения второго:

b.waitUntilCompleted()

Возможно ли, что b будет завершено до a? Согласно документации на commit(),

Буфер команд выполняется после того, как любые буферы команд помещены в очередь перед ним в той же очереди команд

Означает ли это, что b завершит выполнение после завершения a или что он просто начнет выполняться после того, как a начнет выполняться?

1 Ответ

1 голос
/ 07 марта 2019

Из документации commit при условии, что здесь буферы находятся в одной очереди:

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

Это логично, поскольку один MTLCommandQueue будет одновременно выполнять только один буфер. Таким образом, b начнет выполняться после того, как a выполнится, и ожидание этого означает, что оба будут завершены после его завершения.

...