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

Vulkan API (вышел!) (732 стр)

Страницы: 1731 732 733 734756 Следующая »
#10965
12:15, 27 фев 2024

s3dworld
Раньше была строчка в спецификации про то, что команды начинают исполняться в порядке записи, только заканчивать могут в произвольном. Но в текущей версии это почему-то пропало.
Впрочем, для использования это вообще не важно. Порядок операций над рендертаргетами все равно полностью определен, а для остального в любом случае нужны барьеры

#10966
12:58, 27 фев 2024

CatsCanFly
Мне кажется нужно продолжать считать, что команды начинают выполняться по порядку. Иначе что, ставить барьеры между каждым дроколом с полупрозрачной геометрией?

#10967
13:03, 27 фев 2024

HolyDel
> Иначе что, ставить барьеры между каждым дроколом с полупрозрачной геометрией?
Для команд снаружи рендер пасса одни правила, для команд внутри рендер пасса - другие.
Например если используется только буфер глубины, то рисовать можно в любом порядке и драйвер в теории может параллелить мелкие вызовы рисования пропустив большой.

#10968
13:27, 27 фев 2024

А вот смотрите, в Vulkan, лимиты для кадров (ну там задний буфер и всё такое) берётся из VkSurfaceCapabilitiesKHR, которую заполняет vkGetPhysicalDeviceSurfaceCapabilitiesKHR(). И там есть поле minImageCount. Ну и заполняя структуру VkSwapchainCreateInfoKHR уже выставляешь то, что точно поддерживается. А вот есть DXGI_SWAP_CHAIN_DESC1 в D3D12. Там есть поле BufferCount. А где найти информацию о том, сколько можно туда минимум запихать и сколько максимум? Что-то сам не нашёл.

#10969
13:41, 27 фев 2024

s3dworld
you must set the BufferCount member to from two to sixteen. For more info about flip-model swap chain, see DXGI Flip Model.

#10970
13:56, 27 фев 2024

HolyDel
про вывод в рендертаргет есть отдельная строгая гарантия порядка, она осталась.
Там же не только порядок команд но даже порядок вывода примитивов из одной команды строго определен

#10971
17:13, 27 фев 2024

Блин, опять не по теме, но чтобы новую не создавать. Вопрос по Direct3D 12. Вот а где можно почитать конкретно про ограничения (или как это назвать), связанные с тем, какие состояния ресурса (D3D12_RESOURCE_STATES) для какого типа командного списка (ID3D12GraphicsCommandList) как поддерживаются? Я уже как в поисковике запросы не вбивал, но вот не вижу ссылку на документ, где это было бы описано.

Если делать по примеру, то создаются серии из ID3D12CommandQueue, ID3D12CommandAllocator и ID3D12GraphicsCommandList типа DIRECT. Далее про буфер вершин. Upload-ресурс создаётся в состоянии GENERIC_READ. А ресурс на GPU в состоянии VERTEX_AND_CONSTANT_BUFFER. Ну и перед копированием он из VERTEX_AND_CONSTANT_BUFFER идёт в COPY_DEST, а после копирования из COPY_DEST в VERTEX_AND_CONSTANT_BUFFER через барьеры. Вроде всё нормально.

Но вот стоит создать другую цепочку из ID3D12CommandQueue, ID3D12CommandAllocator и ID3D12GraphicsCommandList, но уже типа COPY. То всё перестаёт работать. И нужно уже ресурс на GPU создавать в состоянии COMMON. И переводить уже потом COPY_DEST и обратно (хотя если изначально создать в COPY_DEST, то всё работает).

Вот где про это всё можно почитать? Не нашёл.

#10972
17:16, 27 фев 2024

s3dworld
https://learn.microsoft.com/en-us/windows/win32/direct3d12/using-… n-direct3d-12
https://learn.microsoft.com/en-us/windows/win32/direct3d12/user-m… nchronization

#10973
21:51, 27 фев 2024

s3dworld
Если что пиши сюда https://gamedev.ru/code/forum/?id=248173 поможем

#10974
(Правка: 9:34) 8:35, 28 фев 2024

Andrey
> Если что пиши сюда https://gamedev.ru/code/forum/?id=248173 поможем
Спасибо! Но пока вопросы и про Direct3D 12 и про Vulkan, так что не знаю куда лучше писать, напишу сюда.

В Direct3D 12 heap tier 1 позволяет использоваться либо для буферов, либо для не RT и DS текстур, либо для RT и DS текстур (не знаю, может быть даже две из трёх позволяет?). Но не позволяет назначить все три. А вот heap tier 2 позволяет, но его поддержка есть не везде. Какие вообще преимущества вытекают из использования heap tier 2? А то я не вижу сложности иметь 3 кучи для ресурсов. Что касается Vulkan, тут тоже есть такие же ограничения?

В Direct3D 12 есть требование выравнивать буфера по границам в 64 КБ. Решил запихать два буфера (вершин и индексов) в одну кучу. Буфер вершин достаточно маленький, однако кучу приходится выделять нереально большого размера под такие данные (да, 64 КБ не много по современным меркам, но всё же). А что касается Vulkan, тут тоже есть подобные ограничения?

#10975
9:02, 28 фев 2024

s3dworld
> А что касается Vulkan, тут тоже есть подобные ограничения?
vkGetMemoryRequirements() возвращает размер и выравнивание.
Дополнительно есть требование выравнивания между буфером и текстурой.

#10976
11:10, 28 фев 2024

s3dworld
> Какие вообще преимущества вытекают из использования heap tier 2?
Можно в одной области памяти совместить разные ресурсы (в том числе и разных типов, т. е. буферы и текстуры), которые используются в разных частях одного кадра и их lifetimes не пересекаются.

#10977
11:31, 28 фев 2024

prowkan
> Можно в одной области памяти совместить разные ресурсы (в том числе и разных типов, т. е. буферы и текстуры), которые используются в разных частях одного кадра и их lifetimes не пересекаются.
А преимущество в чём? Не сложно сделать 3 области памяти.

#10978
13:14, 28 фев 2024

s3dworld
> А преимущество в чём?
В более низком расходе памяти.

#10979
11:37, 11 мар 2024

CatsCanFly
HolyDel
А зачем фрагмент шейдер интерлок ?

Страницы: 1731 732 733 734756 Следующая »
ПрограммированиеФорумГрафика