Вопрос по opengl – Что такое чтение зависимой текстуры?

21

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

Ваш Ответ

3   ответа
25

«Зависимое чтение текстуры» - это когда возвращаемые значения из одного поиска текстуры (или других вычислений в шейдере) используются для определения, ГДЕ искать из второй текстуры. что координаты текстуры (откуда вы смотрите вверх) не определяются до середины выполнения шейдера ... нет никакого статического анализа, который вы можете сделать на шейдере (даже зная значения всех параметров) это скажет вам, что координаты будут заранее. Это такжестрог упорядочивает чтение двух текстур и ограничивает степень, в которой порядок выполнения может быть изменен оптимизацией в драйвере и т. д.

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

В последнем поколении карт не стоит беспокоиться об этом. Но вы можете читать книги или статьи пару лет назад, когда вам действительно приходилось обращать пристальное внимание на такие вещи.

На самом деле, согласно PowerVR, вам нужно обратить внимание на довольно новое оборудование :-) Bit.ly / yvSnM Justicle
На моем GTX 570 поиск зависимых текстур в фрагментном шейдере на порядок медленнее, чем поиск независимых текстур. (Это подтолкнуло двигатель, на котором я работал, с нуля / удушения FPS до 20 FPS.) Я испытал чуть менее значительное ускорение, удалив зависимый «поиск с постоянным массивом» в геометрическом шейдере. (Число примитивов зависело от этого значения.) Контекст - это все! Philip
Это неверно, см. Мой ответ. benthehutt
23

что ниже) неправильно ограничивает чтение зависимых текстур, используя выходные данные другого чтения текстуры. Это неверно.

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

Это взято прямо из Руководство по программированию Apple OpenGL ES.

Спасибо, @benthehutt, я уточнил в своем ответе. Larry Gritz
@ benthehutt что такое мошенничество? duhaime
@ Larry Gritz Я, по крайней мере, не вижу никаких разъяснений. Ваш ответ все еще вводит в заблуждение. Можно было прочитать его и подумать: «О, поскольку я не использую вторую текстуру для создания своих UV, я могу чертовски из них разбираться и делать всякие сумасшедшие вещи», а затем BOOM ... Poniros
В этом ответе есть еще одно уточнение: «это не точные координаты, переданные вфрагмен шейдер из program ". Вы можете свободно делать все что угодно с вашими UV в Vertex Shader, прежде чем выводить их как вариации, не вызывая чтение зависимой текстуры. Poniros
10

переданные в шейдер. Зависимое чтение текстуры осуществляется с помощью координат текстуры, которые были частично рассчитаны с использованием значений, извлеченных из другой текстуры, ранее доступной в шейдере. Таким образом, второй доступ к текстуре «зависит» от значения, полученного из первого.

Похожие вопросы