Металлическая операция на месте для `MTLComputeCommandEncoder` на iOS - PullRequest
0 голосов
/ 08 апреля 2020

Возможно ли иметь функцию вычисления металла, которая обрабатывает текстуру на месте на iOS? Я заметил, что некоторые MPS фильтры изображений поддерживают обработку на месте, и мне было интересно, есть ли способ выполнить sh это с помощью пользовательских ядер.

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

1 Ответ

2 голосов
/ 08 апреля 2020

Да, вы можете взять параметр текстуры с атрибутом access::read_write, прочитать и записать его в рамках одного и того же вызова функции ядра. Вам нужно убедиться, что текстура создана с флагами использования .read и .write. Кроме того, обратите внимание, что записи не гарантируются для любых последующих чтений в том же потоке, если только вы не вызовете функцию flush() после записи.

Кстати, ядра MetalPerformanceShaders, которые могут работать "в -place "не обязательно использовать read_write текстуры; часто бывает так, что они используют вспомогательные текстуры и буферы и выполняют свою работу через несколько проходов. Согласно документации , любое ядро ​​может не работать на месте по ряду причин, поэтому вы всегда должны предоставлять резервный распределитель для обработки таких случаев.

...