Почему мы все еще используем операции смешивания фиксированных функций в D3D11 и т. Д.?

Я пытался понять, почему мы все еще используем фиксированные режимы наложения функций в новых 3D API (например, D3D11). В D3D10 фиксированная функция Alpha Clipping была удалена в пользу использования шейдеров. Почему, потому что это гораздо более мощный подход практически к любой ситуации.

Так почему же тогда мы не можем вычислять или владеть операциями смешивания (также известными как образец текстуры из RenderTarget, в который мы в данный момент рендерим)?? Есть ли какие-то аппаратные проблемы в конвейерах видеокарт, которые затрудняют выполнение этой задачи?

Причина, по которой это было бы полезно, заключается в том, что вы можете делать такие вещи, как заставить шейдеры преломления работать намного быстрее, поскольку вам не придется переключаться между двумя renderTargets для каждого наложения преломляющего объекта. Например, преломляющая оконная система для ОС или игрового пользовательского интерфейса.

Где может быть лучшее место, чтобы предложить подобную идею, поскольку это не дискуссионный форум, и я хотел бы увидеть это в D3D12? Или это уже возможно в D3D11?


person zezba9000    schedule 21.05.2012    source источник
comment
Где лучше всего предложить подобную идею Всем это нужно. Все хотят много вещей. Вам не нужно предлагать такие вещи производителям оборудования; они знают, что люди хотят их. Желание вещей не означает, что они произойдут. Предложить их не означает получить их быстрее.   -  person Nicol Bolas    schedule 22.05.2012
comment
они знают, что они нужны людям... И их предложение не означает, что их можно получить быстрее - И как это? Из-за какой-то случайной неподтвержденной догадки? Или, может быть, потому, что такие люди, как я (даже если я не в курсе этой проблемы), задают и говорят об этом, на самом деле указывают «другим», что «другие» пришли к подобным мыслям и / или потребностям?? Мне жаль, что я задела за живое твое большое эго... но общение - это первый шаг к материализации любой действительной идеи.   -  person zezba9000    schedule 22.05.2012
comment
Аппаратчики не слушают парней на форуме. Они слушают Джона Кармака. Они слушают Тима Суини. Они слушают ребят из Blizzard, EA, Activision и так далее. Они не слушают случайные голоса ни с того ни с сего. Почему? Потому что ребята, которые на самом деле занимаются этим профессионально, уже делают правильные предложения. И если вам нужны доказательства этого, есть тот факт, что у нас эта функциональность уже (в нетривиальной степени) в произвольном доступе для чтения/записи к изображениям. Производители оборудования добавили эту функциональность, потому что этого хотели большие ребята, а не из-за парней на форуме.   -  person Nicol Bolas    schedule 22.05.2012
comment
Чувак? Зачем вы вообще комментируете здесь, если все, что вы собираетесь делать, это высмеивать других, потому что вы «чувствуете», что они должны содержать знания, которые вам так дороги?? Пришло время заглянуть за пределы эго с помощью психологических ассоциаций, существует множество обоснованных идей и вопросов, которые не исходят напрямую от «больших» парней, независимо от того, аппаратное обеспечение, которое люди слышат или слушают, не имеет отношения к их достоверности. И это в любом случае даже не имеет отношения к вопросу, так что забудь об этом, нам всем есть чему поучиться, даже Джону Кармаку.   -  person zezba9000    schedule 24.05.2012


Ответы (2)


Так почему же тогда мы не можем вычислять или владеть операциями смешивания?

Кто сказал, что ты не можешь? С помощью shaper_image_load_store (и эквивалента D3D11) вы можете делать с изображениями практически все, что захотите. При условии соблюдения правил. Эта последняя часть обычно сбивает людей с толку. Выполнение полного чтения/изменения/записи в шейдере таким образом, чтобы последующие вызовы фрагментного шейдера не считывали неправильное значение, в большинстве случаев практически невозможно. Вы должны ограничить его, сказав, что каждый отображаемый объект не будет перекрываться сам с собой, и вы должны вставить барьер памяти между визуализируемыми объектами (который может перекрываться с другими визуализируемыми объектами). Или вы используете подход связанного списка.

Но дело вот в чем: с помощью этих механизмов люди не только реализовали смешивание в шейдерах, но и реализовали независимую от порядка прозрачность (через связанные списки). Ничто не мешает вам делать то, что вы хотите прямо сейчас.

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

Механизм чтения/изменения/записи в аппаратном обеспечении смешивания разработан специально для смешивания, в то время как image_load_store является более общим механизмом. И хотя универсальное может превзойти конкретное в долгосрочной перспективе аппаратного развития, в ближайшем и ближайшем будущем вы можете ожидать, что смешивание с фиксированными функциями каждый раз будет превосходить смешивание image_load_store с точки зрения производительности.

Вы должны использовать его только тогда, когда вы должны. И даже решите, действительно вам это нужно.

person Nicol Bolas    schedule 21.05.2012
comment
Спасибо за подсказку о shaper_image_load_store. Есть что вспомнить. - person zezba9000; 22.05.2012

Есть ли какие-то аппаратные проблемы в конвейерах видеокарт, которые затрудняют выполнение этой задачи?

Да, это действительно так. Если бы можно было выполнять смешивание во фрагментном шейдере, это привело бы к возможным петлям обратной связи, а это действительно все усложняет. Смешивание выполняется на отдельной жестко запрограммированной стадии по соображениям производительности и распараллеливания.

person datenwolf    schedule 21.05.2012
comment
Да, после написания этого я понял, что преломление не может быть сделано, как я предложил, иначе вам придется буферизовать последний кадр для выборки. - person zezba9000; 22.05.2012