Войти
ПрограммированиеФорумГрафика

Передача массива в шейдер. (3 стр)

Страницы: 1 2 3 4 Следующая »
#30
22:27, 20 мая 2021

b]san[/b]
> Работает все аналогично. Шейдера собрались, не понял что у тебя было.
Если запускать Release не из под VS то вот:
https://gamedev.ru/code/forum/?id=260823&page=2 | Передача массива в шейдер.
Если запускать Debug не из под VS то завершаетcя работа без всяких сообщений.
Поэтому RenderDoc не смог, хотел скинуть capture, где можно увидеть на любой из моих AMD все ок. Но не получилось. Что-то у тебя не так, если проект запускается только под VS


#31
(Правка: 23:17) 23:05, 20 мая 2021

Andrey
Так ты его откуда запускал то? Экзешник должен лежать в фолдере "~\AMD_test\Alchemist" (там где data).
Он там ищет фолдер data и все остальное. Не находит, тогда лезет в Документы. Там тоже не находит. Ну и дохнет разумеется.

Я проверил скопировав Alchemist.exe из AMD_test\x64\Release\ в AMD_test\Alchemis\ и все запустилось.
Другое дело что у меня программа не снимается при закрытии окна, ее нужно убивать из Такс менеджера. Это я пропустил. Поправлю.
А пока просто вставь в 444 строчку Main.cpp:
  case WM_DESTROY:
    p->Running = false;
    exit(0);  // вот это.
Кривовато, но работает будет.

Так у тебя AMD показывает радужный флаг? Интересно. А на каких картах проверял?

#32
23:40, 20 мая 2021

san
> Так ты его откуда запускал то?
x64\Release и x64\Debug
потом пробовал из корня проекта
san
> Я проверил скопировав Alchemist.exe из AMD_test\x64\Release\ в
> AMD_test\Alchemis\ и все запустилось.
а так работает, но RenderDoc не снимает
san
> Так у тебя AMD показывает радужный флаг? Интересно. А на каких картах проверял?
писал же тут
https://gamedev.ru/code/forum/?id=260823&page=2&m=5391301#m25

#33
0:34, 21 мая 2021

Andrey
За RenderDoc ничего сказать не могу, никогда с ним дела не имел.
Т.е. у тебя RX 560 работает нормально. Интересно. У меня R9 Nano показывает флаг СССР. Хотя скорее всего ты просто последний апдейт не поймал, у меня раньше тоже работало. Это началось где-то неделю назад. Ладно, отправлю информацию по инстанциям. Спасибо.

#34
5:24, 21 мая 2021

Ха! Однако пофиксали. После установки последнего обновления драйвера (21.5.2 Optional) бага пропала. Однако оперативно. ))

#35
8:17, 21 мая 2021

Фига они шустрые.

#36
11:35, 21 мая 2021

san
> За RenderDoc ничего сказать не могу, никогда с ним дела не имел.
зря

#37
17:00, 21 мая 2021

HolyDel
Я думаю я не первый об этом сообщил. Но да, быстро. В одном апдейте багу пропустили, в следующем исправили. Молодцы.
Так что вопрос закрыт.

#38
(Правка: 6:33) 5:25, 26 мая 2021

Что бы поставить точку.
Сегодня посидели с Геннадием. В процессе дегустации пенных напитков выяснилось, что данная проблема возникла из-за передачи массива в шейдер через root signature. Это с одной стороны не приветствуется Микрософтом, но с другой стороны все вендеры это разрешают. В данном случае кто-то проявил ненужную инициативу, которую быстро исправили.

На всякий случай - избегайте массивов в рут-сигнатуре. Это в 99% случаев работает, но всегда может попасться инициативный дурак.

#39
7:59, 26 мая 2021

san
Я через таблицу дескрипторов всегда делаю, это рекомендация AMD. https://gpuopen.com/performance/
Навидия рекомендует через root signature
https://developer.nvidia.com/dx12-dos-and-donts#roots

#40
(Правка: 11:52) 11:47, 26 мая 2021

san
> Сегодня посидели с Геннадием.

+ Показать

san
> Это с одной стороны не приветствуется Микрософтом, но с другой стороны все
> вендеры это разрешают

не ясно - MS указывает жёсткий стандарт же

#41
12:29, 26 мая 2021

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

>Я через таблицу дескрипторов всегда делаю
Через таблицу дескрипторов не всегда удобно если переменная имеет разное значение для разных обьектов. Копирование дескрипторов идет на CPU ассинхронно с выполнением шейдера на GPU. В результате все шейдера получат одно значение переменной - последнее. Если пихать значение в root signature, то переменная попадает непосредственно в шейдер (до его выполнения) и все работает корректно.

>не ясно - MS указывает жёсткий стандарт же
MS говорит низя, но вендоры говорят можно. Чем MS обосновывал запрет не совсем ясно, но реализация у вендоров а не у MS. Собственно это работает - можешь убедиться.

#42
12:50, 26 мая 2021

san
> Через таблицу дескрипторов не всегда удобно если переменная имеет разное
> значение для разных обьектов.
Это как это? Приведи пример. Я в таблицу загоняю разные дескрипторы ссылающиеся на разные ресурсы, с учётом видимости для шейдеров ставлю за 1 вызов

#43
(Правка: 13:55) 13:22, 26 мая 2021

Andrey
> Я в таблицу загоняю разные дескрипторы ссылающиеся на разные ресурсы
Если РАЗНЫЕ (т.е. имеющие разные адреса) то все нормально. Но если ты в один константный буфер передаешь переменную для отрисовки некого обьекта, потом меняешь ее значение и рисуешь его второй раз (рендер в два прохода), то оба прохода получат то же самое значение переменной - последнее. Это происходит поскольку операция Map() на CPU работает независимо от отрисовки на GPU. Т.е. ДО отрисовки пройдет два копирования переменной в одно и то же место. Что бы это избежать нужно или делать разные константные буфера для каждого прохода (они будут иметь разные адреса) или копировать в рут. В этом случае значение переменной записывается в конвеер команд для GPU (Command List) и уже не зависит от текущего значения в момент рендера.

#44
16:13, 26 мая 2021

san
Теперь понял. Но мне кажется это странное решение. Лучше Каждому свой контантый буфер, слать дескрипторы пачкой с разлением на видимость.

Страницы: 1 2 3 4 Следующая »
ПрограммированиеФорумГрафика