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

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

Страницы: 113 14 15 16 17 18 Следующая »
#225
16:13, 16 мар. 2020

Andrey
> NUM_LIGHTS передается шейдерной системой при компиляции шейдера в виде макроса.
Не очень понял что значит "передается шейдерной системе". Поставь константу, посмотри что будет.
И стесняюсь спросить - 256 источников света это не перебор?


#226
16:38, 16 мар. 2020

san
> Не очень понял что значит "передается шейдерной системе". Поставь константу,
> посмотри что будет.
Ошибка точно не в передаче макроса в шейдер, подобный шейдер с таким обьявлением CB с макросом работает на ландшафте, но вот на обьектах что то не так.

#227
(Правка: 16:50) 16:49, 16 мар. 2020

Andrey
Еще раз, что значит "ПЕРЕДАЕТСЯ в шейдер"? Мы говорим о размере буфера самого шейдера. Это константа. И что такое "шейдерная система"? Не мог ли ты придерживаться общеупотребимой терминологии, а не изобретать свои термины?
И еще раз - иди от простого к сложному а не наоборот.  Поскольку ошибка у тебя возникает на этапе выполнения, значит ты копируешь данных больше чем у тебя зарезервировано в шейдере. Либо ты резервируешь не так, либо копируешь неправильно.

#228
17:01, 16 мар. 2020

san
Ок, финальное обьявление в шейдере выглядит так:

...
Light lights[255];
...
потом он подается на компиляцию,
думаю теперь понятно?
#229
17:49, 16 мар. 2020

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

#230
18:07, 16 мар. 2020

san
> Размер буфера не "передается шейдерной системе на этапе компиляции" а
> обьявляется в шейдере как константа. Все, точка.

да ты шо ... знаешь шо такое юбершейдер?

#231
19:35, 16 мар. 2020

san
> а обьявляется в шейдере как константа
именно так.
> Тебе пытаются помочь а ты раздражаешься  - изьясняйся на нормальном языке и
> вопросов не будет.
Да нет, я не раздражаюсь.Я передаю макрос через NUM_LIGTS как

const D3D_SHADER_MACRO macros[] = {
  "NUM_LIGTS ", "255",
  NULL
};
или
const DxcDefinemacros[] = {
  L"NUM_LIGTS ", L"255",
  NULL
}
для D3DCompile/IDxcCompiler::Compile,
Ну и размер константного буфера выходит 8160, с учетом выравнивания 8192.
Andrey
> попробую вечером макросом вернуть реализацию без  пулов. Отпишусь.
попробовал, не помогло, такое же сообщение об ошибке...

#232
20:39, 16 мар. 2020

xruck
> 1) когда происходит reset стейта? И на сколько он полный? Я придумал только 2
> случая: при изменении pso, и при закрытии command list. Тут я думаю
> гарантировано сбрасываются все прибинженые дескрипторы и все, что относится к
> pso: шейдеры, буферы,blend...А как насчёт viewport, scissor, render target?
Нету стейтов в Direct3D12/Vulkan. Как самая примитивная оптимизация не стоит повторно ставить одинаковые pso/buffers/RootSignature при записи command list.
А как насчёт viewport, scissor, render target?
аналогично, все сбрасывается. Нету такого понятия как defaultVaule. Никогда не заморачивался такими вещами, но в любом случае все можно проверить, запиши command list, сбрось его и вызови Draw без установки PSO или еще чего нибудь, надеясь что оно сохраниться с предыдущих записей, будет ли работать?

>Как влияют compute стейты на графические (например, SetComputeRootConstantBufferView херят >более ранние вызовы SetGraphicsRootConstantBufferView)?
херят, SetGraphicsRootConstantBufferView и SetComputeRootConstantBufferView никак не мешают друг другу.

>2) обязательно ли дескрипторы в куче должны идти непрерывно в случае root parameter = >descriptor table? SetGraphicsRootDescriptorTable Устанавливает начальный дескриптор, и затем все >следующие дескрипторы как бы подхватываются. Для того чтобы они шли непрерывно, я их >копирую с CopyDescriptorSimple. Возможно ли как то это избежать? Как вообще взрослые дядьки >работают с этой системой? (Накипело)
А что нельзя просто записывать список дескрипторов в таблицу по порядку? в таком случае можно слать за 1 вызов весь список одного типа, или вообще можно весь список разных типов дескрипторов слать пачкой, но нужно поставить всем D3D12_SHADER_VISIBILITY_ALL в RootSignature. Насчет производительность не уверен что лучше.
У меня шлется список все константных буферов/текстур, UAV как 1 вызов, Но вот с Samplers оказалось не так все просто объединить их в 1 список, сделаю потом.

>3) насколько я понял, root signature - это маппинг из слотов шейдера на расположение в >descriptor heap. соответственно, сделать это отображение можно разными способами. чем нужно >руководствоваться при создании root signature? (частота обновления root parameter, частота >использования в шейдере, как-то нужно группировать по типу шейдера, минимизировать >количество root parameters, что-то еще...?)
Вопрос довольно обширный, но рекомендации верные, если их соблюдать уже хорошо.

>4) как делать синхронизацию между очередями? Например, есть две очереди: graphic, copy. Пишу >в uav буфер в compute шейдере из graphic очереди. И хочу затем получить его на cpu через copy >очередь. Мои догадки: graphic list: пишем на gpu, вставляем барьер uav->copy src. Copy list: >копируем в readback буфер, вызываем map/unmap. Как вам такое? Самое непонятное - как >произойдёт синхронизация между graphic и copy очередью? Где гарантия что копирование >выполнится после записи?
Ох, я только недавно поправил несколько ошибок с синхронизацией. Зачем писать в Compute из graphic очереди ? compute очередь лучше подходит.

#233
(Правка: 20:58) 20:57, 16 мар. 2020

Andrey
> Нету такого понятия как defaultVaule. Никогда не заморачивался такими вещами,

нуда потом тратится время на отладку

> У меня шлется список все константных буферов/текстур, UAV как 1 вызов, Но вот с
> Samplers оказалось не так все просто объединить их в 1 список, сделаю потом.

...

Andrey
> Зачем писать в Compute из graphic очереди ? compute очередь лучше подходит.

а синкать не надо ?

#234
0:13, 17 мар. 2020

Andrey
> Нету стейтов в Direct3D12/Vulkan.
Ну все вызовы Set.. что-то ставят в command list. Как минимум: PSO, root signature, все прибинженые дескрипторы и inline константы, scissor, viewport, render target, что-то еще наверно забыл. Причем между некоторыми есть зависимость: установка PSO отрывает прошлую root signature, а из-за нее отрываются и прибинженые дескрипторы, но scissor и viewport остаются. У меня задача такая: сохранение, закрытие command list и восстановление стейта. Вообще уже посмотрел наиболее наглядно это выглядит в PIX.

> А что нельзя просто записывать список дескрипторов в таблицу по порядку? в таком случае можно слать за 1 вызов весь список одного типа, или вообще можно весь список разных типов дескрипторов слать пачкой, но нужно поставить всем D3D12_SHADER_VISIBILITY_ALL в RootSignature.
Можно. Но я думал, что для этого нужно их в рантайме каждый раз копировать из разных мест. Вчера почитал одну тему, и понял, что умные дядьки каждую комбинацию ресурсов предрасчитывают и биндят за один вызов.

> Вопрос довольно обширный, но рекомендации верные, если их соблюдать уже хорошо.
Так я, собственно, и спрашивал какой из принципов наиболее подходящий? Везде советуют разное. Я и привел список всех советов, которых встречал. Кокой из них самый трушный?

> Ох, я только недавно поправил несколько ошибок с синхронизацией. Зачем писать в Compute из graphic очереди ? compute очередь лучше подходит.
Это я для упрощения, да и чисто compute очередь я не использую. Graphic очередь же умеет все что и comute. Но суть то была не в этом. Как синхронизацию то делать?

#235
6:43, 17 мар. 2020

xruck
> что умные дядьки каждую комбинацию ресурсов предрасчитывают и биндят за один
> вызов.
Да все верно, если сможешь это сделать для списка Sampler, будет круто, их всего макисмум можно создать 2048, для каждого набора нужно составлять уникальную комбинацию и писать последовательно в таблицу.
>которых встречал. Кокой из них самый трушный?
я думаю в идеале RootSignature должна быть 1 на весь Cmdlist, но это прокатит для демок с кубиком. В сложной многопроходной сцене это нереально.

xruck
> Как синхронизацию то делать
поpже вечером подумаю, отвечу. а что тебя не устраивает в том подходе? ты видишь визуальные баги? на экране рвет геометрию, текстуры? или ты видишь сообщения об ошибках от Direct3D 12 Debug Runtime ?

#236
7:49, 17 мар. 2020

Andrey
> но это прокатит для демок с кубиком

загрузка за 1 вызов тоже не везде нужна

#237
8:54, 17 мар. 2020

xruck
> Как синхронизацию то делать?
https://docs.microsoft.com/en-us/windows/win32/direct3d12/user-mo… nchronization

#238
9:12, 17 мар. 2020

https://gamedev.ru/code/forum/?id=248173&page=15&m=5148056#m218
Ошибка найдена, в шейдере в качестве экперимента ставил 128 + индекс, вот и выход за пределы... :)

#239
9:18, 17 мар. 2020

Andrey
> в шейдере в качестве экперимента ставил 128 + индекс, вот и выход за пределы...
а я уж думал что баг драйвере

Страницы: 113 14 15 16 17 18 Следующая »
ПрограммированиеФорумГрафика