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

Direct3D 12 (10 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 19 10 11 1216 Следующая »
#135
23:31, 31 авг. 2015

d.m.k
> Да ты руками распараллеливаешь путём посылки команд в разные очереди, которые
> выполняются параллельно.
Это ясно. Меня больше волнует как там с ресурсами. Потому что пока что я вижу только применение: делает одновременной DIP1 в RT1 и DIP2 в RT2.


#136
10:16, 1 сен. 2015

Bishop

А с какими данными работают эти асинхронные шейдеры? Или они должны с разными наборами работать, или я чего-то не понимаю.

За каждым командбуфером закреплен свой Graphics pipeline (в нем может быть Vertex shader, Pixel shader, Geometry shader, Hull и Domain Shader) , а так же свои 3д сетки и буфера и текстуры.
Так вот в GPU как раз хранится этот суповый набор каждого командбуфера. Благодаря этому мы создали на GPU кучу состояний в виде командбуферов и потом просто любезно просим видеокарту включить нужный командбуфер ! А раньше в Directx 11 все эти состояния включал\синхронизировал драйвер. Что как раз и понижало в Directx 11  скорость DrawCall почти в 9 раз.
Вот можно почитать об этом http://www.ferra.ru/ru/system/review/microsoft-api-directx-12-is-… #.VeVTRkAQPQd

Таким образом например CommandBuffer1 будет рендерить сферу с её текстурой в текстуруХ, CommandBuffer2 будет рендерить кубик со своей текстурой в текстуруХ и CommandBuffer3 будет делать постпроцессинг текстурыХ.
Так вот при Asynchronous Shading будут работать параллельно CommandBuffer1,CommandBuffer2 и CommandBuffer3 !!!

#137
11:48, 1 сен. 2015

ronniko
> Так вот при Asynchronous Shading будут работать параллельно
> CommandBuffer1,CommandBuffer2 и CommandBuffer3 !!!
Не совсем. Возможно только когда в системе стоит два ГПУ и каждый CommandQueue привязан к своему ГПУ. Но это не асинхронные шейдеры.

Штука в том, что сейчас одно ГПУ может только одновременно:
1. Выполнять Draw call (Draw Engine)
2. Копировать данные  (Copy Engine)
3. Вычислять через Compute Shaders (Compute Engine)

Итого асинхронные шейдеры - это всего-лишь одновременная работа Draw Engine и Compute Engine. Compute Engine может заниматься постобработкой кадра.

#138
14:38, 1 сен. 2015

Che@ter
Т. е. начинаем в compute shader в отдельном потоке делать постэффекты на отрисованный кадр, и одновременно в главном потоке начинаем рисовать следующий кадр?

#139
14:41, 1 сен. 2015

Или вот для примера если мы делаем даунсамплинг текстуры то на мелких мипах GPU сильно недозагружен, в это время можно запустить параллельные command buffers для загрузки GPU другой работой.

#140
14:53, 1 сен. 2015

Che@ter

Не совсем. Возможно только когда в системе стоит два ГПУ и каждый CommandQueue привязан к своему ГПУ. Но это не асинхронные шейдеры.

Вот посмотри видео.

#141
16:11, 1 сен. 2015

ronniko
Видел, там про какие-то паровозики. Похоже, что там речь идет не о асинхронных шейдерах, а о списках комманд.
В любом случае гугл говорит, что еще нет видеокарт, поддерживающих более чем 1 графический список комманд.

#142
16:22, 1 сен. 2015

Pumka
> Т. е. начинаем в compute shader в отдельном потоке делать постэффекты на
> отрисованный кадр, и одновременно в главном потоке начинаем рисовать следующий
> кадр?
Да, типа того.

#143
16:47, 1 сен. 2015

Che@ter
> Видел, там про какие-то паровозики. Похоже, что там речь идет не о асинхронных
> шейдерах, а о списках комманд.
Надо было до конца смотреть, там о асинхронных шейдерах идёт речь.

#144
17:18, 1 сен. 2015

Anders333
АМД говорит о вычислительных асинхронных шейдерах.

#145
18:15, 1 сен. 2015
Изображение
#146
20:22, 1 сен. 2015

ronniko
> Так вот при Asynchronous Shading будут работать параллельно
> CommandBuffer1,CommandBuffer2 и CommandBuffer3 !!!
А как достигается синхронизация? Только через z-buffer?

Che@ter
> Штука в том, что сейчас одно ГПУ может только одновременно:
> 1. Выполнять Draw call (Draw Engine)
> 2. Копировать данные (Copy Engine)
> 3. Вычислять через Compute Shaders (Compute Engine)
Ну это мне как раз было совершенно понятно как и почему работает, но вот картинка из поста 128 смутила. Просто потому что для постпроцессинга нужна уже отрендериная сцена. А если её ещё нет, то непонятно как оно считает постпроцесс.

Pumka
> Т. е. начинаем в compute shader в отдельном потоке делать постэффекты на
> отрисованный кадр, и одновременно в главном потоке начинаем рисовать следующий
> кадр?
Ну разве что так...

ronniko
Ох, понятно. Короче всё просто, это просто подобие Job-engine для однопоточной системы. Т.е. в рамках именно DIP никакой асинхронности нет и в помине. Идея хорошая и верная, просто название ввело меня в заблуждение :(

Che@ter
> АМД говорит о вычислительных асинхронных шейдерах.
Ну тогда всё вообще упрощается до предела :)

#147
22:27, 1 сен. 2015

Bishop
Я отвечал на это:
>[b]ronniko[/b]
> Таким образом например CommandBuffer1 будет рендерить сферу с её текстурой в
> текстуруХ, CommandBuffer2 будет рендерить кубик со своей текстурой в текстуруХ
> и CommandBuffer3 будет делать постпроцессинг текстурыХ.
> Так вот при Asynchronous Shading будут работать параллельно
> CommandBuffer1,CommandBuffer2 и CommandBuffer3 !!!
Тоесть рисовать одновременно пока не получится.

Вообще не знаю таких деталей, но походу в GCN просто за вычислительные шейдера отвечают одни блоки, а за рендер - другие. Когда у Maxwell одни и те же блоки отвечают за все шейдеры. Собственно у AMD часть мощностей простаивает и они решили прорекламировать этот момент, что в DX12 у них все будет одновременно заюзано, когда к Maxwell это просто неприменимо.

#148
22:29, 1 сен. 2015

Bishop
> А если её ещё нет, то непонятно как оно считает постпроцесс.
Можно делать постпроцесс кадра паралельно рисуя интерфейс в текстуру. Можно уже начать рисовать следующий кадр.

#149
0:59, 2 сен. 2015

Che@ter
> вычислительные шейдера отвечают одни блоки, а за рендер - другие
Да ну, ерунда. А если движок вообще вычислительные шейдеры не использует?

Страницы: 19 10 11 1216 Следующая »
ПрограммированиеФорумГрафика