Выборка из текстуры, которая также является целью рендеринга - PullRequest
4 голосов
/ 01 ноября 2010

Я знаю, что это технически не поддерживается (и, насколько я могу судить, это неопределенное поведение), но действительно ли это смертельно ужасная вещь для выборки из текстуры, которая также записывается?

Я спрашиваю, потому что мне нужно читать из текстуры глубины, в которую мне также нужно писать, если я не могу этого сделать, это означает, что мне придется копировать текстуру глубины, и если это не так уж сложно Я не вижу вреда в простом копировании?

Спасибо за любую помощь!

Ответы [ 2 ]

3 голосов
/ 01 ноября 2010

Да, это смертельно и вызывает неопределенное поведение. Просто сделайте копию и прочитайте ее.

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

2 голосов
/ 02 ноября 2010

Матиас и Гоз охватили самые важные биты.Позвольте мне добавить пару интересных фактов:

  • Среда выполнения Direct3D активно связывает текстуры, когда вы связываете их базовый ресурс как цель рендеринга (поэтому вы не можете создать цикл там).БПЛА 1005 * в Direct3D 11 фактически позволяют операции чтения-изменения-записи в подмножестве форматов (тех, которые не требуют преобразования типов).Тем не менее, они не гарантируют порядок работы.Это то, что используется рядом алгоритмов, которые делают прозрачность, не зависящую от порядка, в частности (где переупорядочение выполняется вручную).
...