DirectX. Единая модель программ-шейдеров. Доступ к кадровому буферу в пиксельных программах, страница 6

Ещё одним способом уменьшения избыточной информации является внедрение копирования сетки (mesh instancing) в графическом процессоре. Копирование сетки подразумевает взятие одной сетки и создания нескольких различных вариантов сетки с различными трансформациями, текстурами или даже с иными картами смещения. На самом деле, учитывая общую модель ввода/вывода, можно поместить все видимые текстуры и матрицы трансформации в массив, к которому будут иметь доступ программы-шейдеры, и принять всю геометрию, общую для одних и тех же программ-шейдеров, как одну большую группу, а уже сама программа будет определять, какую текстуру и матрицу трансформации использовать с каким набором геометрии. Подобный подход существенно снизит объём работ центрального процессора по рендерингу, переведя большинство операций по управлению состоянием на графический процессор.

Доступ к кадровому буферу в пиксельных программах

Часто существуют ситуации, когда вам нужно добавить некоторые вычисления к картинке, скажем, для цифровой сортировки, цветовой коррекции и/или привязки тонов. Впрочем, с интерфейсом DirectX 9 вы можете не получить текущее значение пикселя, с которым вы желаете работать, поскольку в большинстве систем рендеринга немедленного режима нет способа гарантировать, что это значение уже было записано. На практике, однако, большинство графических процессоров и драйверов прекрасно работают, если вы считываете с той же текстуры, рендеринг которой вы осуществляете. Но это поведение не документировано, и оно может нарушиться в любой момент, и поэтому разработчикам не рекомендуется использовать подобную функциональность. Альтернативой является использование двух отдельных текстур и переключение между ними, что потребляет в два раза больший объём памяти. С выходом следующего DirectX Next разработчики наконец-то получать функциональность, которую они ждут уже несколько лет – прямой доступ к кадровому буферу (только текущий пиксель) из пиксельной программы – возможно. Просто наличие этой функции в картах DirectX Next не подразумевает, что она будет реализована без проблем для систем рендеринга немедленного режима, так что производители оборудования могут попросить Microsoft опустить эту функцию из спецификаций. Вполне вероятно, эта функция останется опциональной, что, к сожалению, наверняка приведёт к её игнорированию большинством разработчиков – им придётся делать всё по старинке.

Но если бы эта функция стала обязательной, вы бы смогли делать практически всё, что умеют осуществлять нынешние блендеры фиксированных функций (типа аккумулирования освещения от нескольких источников в кадровом буфере) полностью внутри пиксельной программы, без добавления дополнительной избыточной цели рендеринга. Фактически, вполне возможно, что некоторые производители графических процессоров уберут блендеры фиксированных функций и вместо этого станут эмулировать их функциональность через пиксельные программы таким же способом, каким ATI опустила фиксированный функции по обработке вершин и стала эмулировать ту же функциональность через вершинные программы. Это означает, что в бюджете транзисторов станет больше места для улучшения блоков программ-шейдеров и ускорения всего процесса. Следует отметить, что системы рендеринга тайлового отложенного режима не имеют тех проблем, что системы немедленного режима в этом отношении.

Вывод:

Фактически, многие важные изменения DirectX Next кажутся прекрасно подходящими для систем рендеринга тайлового отложенного режима. Новая модель использования памяти, которая обеспечивает практически безграничные ресурсы, также позволяет реализовать практически безграничное хранилище геометрии, которое всегда было проблемой для систем рендеринга отложенного режима. Доступ к данным текущего кадрового буфера тоже легче осуществляется на системе рендеринга тайлового отложенного режима, поскольку все данные уже находятся в тайловом буфере на чипе. Так что забудем о "дорогом" доступе во внешнюю память или "дорогих" сбросах конвейера и внутреннего кэша. Внешние изменения вершинных/геометрических программ не зависят от тайлового отложенного принципа рендеринга, поэтому никаких проблем с поддержкой на этой архитектуре у них не возникнет.