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

Directx 12 вопросы. (12 стр)

Страницы: 18 9 10 11 12 13 Следующая »
#165
8:49, 26 дек. 2019

nes
тоже мнение


#166
9:28, 26 дек. 2019

san
> Просто обидно наблюдать как придурок с комплексами засирает ресурс своими
> бессмысленными сообщениями

и часто ты будешь использовать барицентрики в PS?

#167
(Правка: 9:50) 9:49, 26 дек. 2019

Инуендо ты не понял.
Я говорю что можно расширения вендора юзать в DX12.
Потому что DX12 еще лет пять проживет.

Мало ли что завтра выкатят из расширений еще АМД.

https://wccftech.com/amd-rdna2-support-for-raytracing-variable-rate-shading/


Variable Rate Shading - Dynamic Approach to Shading
Variable Rate Shading, or VRS, is another feature to be included within AMD's RDNA2 GPUs. VRS enables the GPU to dynamically alter the focus of shading within certain areas of a scene. Microsoft has already developed two variations of VRS, one for NVIDIA's Turing GPUs, and the other for Intel's Gen11 GPUs, but no option for AMD's existing GCN or RDNA GPUs, for DirectX 12. With RDNA2's implementation of VRS, gamers may expect to achieve increased playability at 4K resolutions and beyond.

#168
9:52, 26 дек. 2019

https://docs.microsoft.com/en-us/windows/win32/direct3d12/vrs

#169
(Правка: 14:30) 14:16, 14 янв. 2020

Начал делать анимацию
И стал вопрос.

Юзать много constant buffers и pushconstants32bit.

Допустим у меня 20 разных персонажей и каждый вид рисую instance 10 раз(беру данные из constant buffer-a с нужным номером , который даю через pushconstants32bit ).

То есть выходит 20 штук constant buffers и pushconstants32bit.

Как бы не очень удобно выходит.

Либо делать один аля SSBO буфер и через pushconstants32bit давать смещение по SSBO.
Тогда 20 штук pushconstants32bit выйдет и надо еще заливать новые данные в SSBO для смены поз анимации и скорости движения персонажей.

Или каждого персонажа рисовать только через pushconstants32bit(передаю номер текстуру, позу, world position,scale).
Тогда выходит 200 штук pushconstants32bit.

#170
14:44, 14 янв. 2020

ronniko
делай большой констант буфер, делай смещениями в буфере при установке таблицы дескрипторов меняя значение в D3D12_GPU_DeSCRIPTOR_HANDLE. Я скоро уже это тоже буду делать, в Vulkan версии сделано.

#171
23:34, 16 янв. 2020

В общем сделал я менеджер константных буферов.
Выделяю пул больших буферов размеров 65536 байт. Каждый констант буфер будет размещен по смещениям(адресам) внутри большого буфера.

При создании для ConstantBufferView  для очередного ConstantBuffer через ID3D12Device::CreateConstantBufferView

в D3D12_CONSTANT_BUFFER_VIEW_DESC пишу адрес который считается как смещение относительно стартового GPU адреса:

D3D12_CONSTANT_BUFFER_VIEW_DESC::BufferLocation += bufferOffset;
При Вызов ID3D12Device::CreateConstantBufferView вижу ошибку:

D3D12 ERROR: ID3D12Device::CreateConstantBufferView: pDesc->BufferLocation + SizeInBytes - 1 (0x00000003096a0bff) exceeds end of the virtual address range of Resource (0x000001D1CD9FBB40:'Unnamed ID3D12Resource Object', GPU VA Range: 0x0000000309690000 - 0x000000030969ffff). This is OK as out of bounds access is guarded by the GPU (writes are discarded and reads return 0). However the developer probably did not intend to make use of this behavior.  [ STATE_CREATION ERROR #649: CREATE_CONSTANT_BUFFER_VIEW_INVALID_RESOURCE]

Далее при отрисовке никаких ошибок нету, все выглядит корректно. Как быть с этим сообщением?

#172
0:06, 17 янв. 2020

Andrey
> Далее при отрисовке никаких ошибок нету, все выглядит корректно. Как быть с
> этим сообщением?
Чинить, оно говорит тебе, что ты свой View создал за пределами буфера. Проверяй что ты передаешь в BufferLocation и SizeInBytes.

#173
1:10, 17 янв. 2020

Andrey
> В общем сделал я менеджер константных буферов.
на каждый кадр свой буфер?

#174
5:20, 17 янв. 2020

Andrey
> D3D12_CONSTANT_BUFFER_VIEW_DESC::BufferLocation += bufferOffset;
Мне кажется, или вместо bufferOffset должно быть BufferSize?
Или, тогда уж
D3D12_CONSTANT_BUFFER_VIEW_DESC::BufferLocation = bufferOffset;

#175
6:21, 17 янв. 2020

MrShoor
> Проверяй что ты передаешь в BufferLocation и SizeInBytes
SizeInBytes ВСЕГДА 65536. Больше нельзя, зафейлится CreateConstantBufferView, а меньше бессмысленно. BufferLocation это
ID3D12Resource::GetGPUVirtualAddress + смещение равное размеру предыдущего буфера.
prowkan
>Мне кажется, или вместо bufferOffset >должно быть BufferSize?
Выше обьяснил, bufferOffset  и есть  BufferSize предыдущего буфера.

приведу пример.Имеем свободный буфер на 65536 байт. Он выделен физически на GPU. Для размещения констант для допустим 5 разных вершинных шейдеров, у которых  только WorldViewProj матрица, нужно создать 5 ConstanBufferView. Тогда достаточно передавать смещения адреса равного 256 в D3D12_CONSTANT_BUFFER_VIEW_DESC::BufferLocation ;
Первый буфер в списке будет без смещения.

У меня складывается ощущение что Direct3D12 Runtime думает что я указываю смещение буду читать весь буфер, поэтому и  выдает ошибку.

Так, может нужно SizeInBytes сказать не размер всего буфера, а его кусочка. Точно, сегодня попробую, наверное я тупанул малтца ;)

Кстати, тут более низкий уровень работы с дескрипторами, по сравнению с Vulkan, в последнем работам через функции, тут манипуляция адресами. Для Vulkan смещения нужно передавать в vkCmdBindDescriptorSets, в Direct3D12 на этапе создания ConstantBufferView.

Но! установку дескрипторов в Vulkan можно делать за 1 вызов для всех шейдеров, тут для оптимизации может лучше раздельно с указанием видимости.

с Sampler отдельная,песня, для них нужно следить за диапазаном, что бы ставить пачкой. т е нужен некий менеджер раздающий таблицу дескриптовов для различных комбинаций, с учетом ограничения 2048, все чуток сложее, хотя наверное не бывает больше 16 различных sampler. Сейчас, увы ставлю по одному, потом нужно  подумать как улучшить.

#176
6:55, 17 янв. 2020

Andrey
> что бы ставить пачкой
Andrey
> установку дескрипторов в Vulkan можно делать за 1 вызов для всех шейдеров
Andrey
> Сейчас, увы ставлю по одному, потом нужно  подумать как улучшить.

#177
8:03, 17 янв. 2020

Andrey
> Так, может нужно SizeInBytes сказать не размер всего буфера, а его кусочка.
> Точно, сегодня попробую, наверное я тупанул малтца ;)
Ну как бы так и есть, да. В этом ведь и смысл view. Через view ты отображаешь часть буфера с данными для доступа к ним из шейдера. И на один буфер можешь создать множество view, с разными размерами и смещениями.

#178
8:40, 17 янв. 2020

Andrey
> Так, может нужно SizeInBytes сказать не размер всего буфера, а его кусочка.
Именно!

#179
8:44, 17 янв. 2020

prowkan
> Именно!

может нужно сначала доки читать а потом код писать? за 1 вызов это такой синдром

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