HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- OpenGL (https://hlfx.ru/forum/forumdisplay.php?forumid=7)
-- D3D11 и D3D_FEATURE_LEVEL_9_1 (https://hlfx.ru/forum/showthread.php?threadid=5369)
Отправлено Government-Man 09-10-2019 в 19:56:
D3D11 и D3D_FEATURE_LEVEL_9_1
В новых версиях директа (начиная с 10-го) появилась такая концепция как feature levels, облегчающая поддержку устаревшего и не очень устаревшего железа. То есть теперь поддержка видеокартой определенного FL гарантирует некий минимальный набор фич и можно не страдать параноей, проверяя каждый отдельный параметр на предмет того, что программа в него влезет.
Кто пользовался данной фичей? С какими подводными камнями сталкивались? Правильно ли я понимаю, что поддержка определенного FL допускает, что отдельные параметры могут превышать значения определенные в данном FL? То есть конкретная видеокарта может например поддерживать текстуры больше чем 2к несмотря на заявленный D3D_FEATURE_LEVEL_9_1?
Еще меня смущает отсутствие третьих шейдеров: в 9-х FL поддерживаются только вторые, а в 10-х уже четвертые. Можно ли скормить 11-му директу третий шейдер? Какой таргет при этом использовать?
Отправлено XaeroX 10-10-2019 в 03:50:
Я что-то слышал про feature levels, но никогда не использовал.
Использую D3D9, третьи шейдеры и кое-какие недоки, в принципе для нужд Волатилы хватает. Шейдеры пишу на Cg, в разные таргеты компилирует он сам. Есть и собранные таргеты под DX11, которые можно будет в будущем подключить к DX11-рендеру, если мне будет совсем нечего делать и я начну очередную амелиорацию движка. 
Попробуй собрать таргеты vs_3_0 и ps_3_0 и скормить их директу, это точно рабочие профили девятых иксов.
Цитата:
Government-Man писал:
можно не страдать параноей, проверяя каждый отдельный параметр на предмет того, что программа в него влезет.
Это зависит от философии разработки.
Есть философия минимального набора фич, который составляет целостную картину мира, в которой функционирует движок. А есть философия "используем то, что есть, и в любом порядке", когда движок умеет постоянно переключаться между разными подходами (или рендерпатчами, если угодно) в зависимости от подлежащего железа. Во втором случае проверка капсов - это не параноя, а совершенно рабочий механизм.__________________
Отправлено Дядя Миша 10-10-2019 в 07:58:
Цитата:
Government-Man писал:
облегчающая поддержку устаревшего и не очень устаревшего железа
Особого смысла всё это не имеет, ведь D3D11 не заведётся на XP, где есть старое железо, а поставить дышатку на такое устаревшее железо едва ли получится.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Government-Man 10-10-2019 в 15:10:
Дядя Миша
А семерку?
Отправлено Дядя Миша 10-10-2019 в 15:13:
Government-Man мне отчего-то кажется, что надо абстрагироваться версией API на нормальном уровне, а не искать в новых API пути совместимости. Совместимость она или есть, или её нет. А это полумеры.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 10-10-2019 в 17:49:
Цитата:
Дядя Миша писал:
мне отчего-то кажется
Отчего тебе так кажется?__________________
Отправлено Government-Man 10-10-2019 в 18:06:
Цитата:
XaeroX писал:
Шейдеры пишу на Cg
Прикольно, он еще жив?
Цитата:
XaeroX писал:
Использую D3D9
Как впечатления по сравнению с гл кстати? Если я правильно помню, они положительные? 
Цитата:
XaeroX писал:
Попробуй собрать таргеты vs_3_0 и ps_3_0 и скормить их директу
Да, я так и думал сделать. Но пока что я влезаю в vs_4_0_level_9_1 и ps_4_0_level_9_1 (это типа вторые шейдеры но с семантиками из четвертых). Если повезет, то их хватит.
Отправлено XaeroX 10-10-2019 в 18:18:
Цитата:
Government-Man писал:
Прикольно, он еще жив?
Ну он депрекейтед и дисконтинуед, но то что есть, вполне работает. Но таргеты DX11 - это максимум. DX12 уже не поддерживается, как и вулкан.
А што, Cg уже убрали из Юнити?
Цитата:
Government-Man писал:
Как впечатления по сравнению с гл кстати? Если я правильно помню, они положительные?
В целом - те же яйца, только в профиль.
Но легче дебажить и лучше документация, как мне показалось.__________________
Отправлено Government-Man 10-10-2019 в 18:41:
Цитата:
XaeroX писал:
Ну он депрекейтед и дисконтинуед
Так это ж хорошо - если обновлений не выходит, значит у тебя всегда последняя версия, а все ее баги гордо именуются особенностями.
Цитата:
XaeroX писал:
А што, Cg уже убрали из Юнити?
Вроде бы нет.
Цитата:
XaeroX писал:
DX12 уже не поддерживается, как и вулкан.
А ты вулкан с дх12 еще не ковырял?
Отправлено Дядя Миша 10-10-2019 в 20:15:
Цитата:
XaeroX писал:
Отчего тебе так кажется?
ну чёб не плодить сущности.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 11-10-2019 в 06:31:
Цитата:
Government-Man писал:
Так это ж хорошо - если обновлений не выходит, значит у тебя всегда последняя версия, а все ее баги гордо именуются особенностями.
Да, это важный плюс. Но с другой стороны, есть страх однажды напороться на фатальный баг, который уже некому фиксить.
Цитата:
Government-Man писал:
А ты вулкан с дх12 еще не ковырял?
Ещё нет. У меня руки до DX11 и GLES2+-рендеров пока не дошли. Я в последние три года вообще очень мало графикой занимаюсь, много других задач.
Цитата:
Дядя Миша писал:
ну чёб не плодить сущности.
Если ты делаешь проект для программистов - то да, чем меньше сущностей в движке, тем проще и понятнее код. А вот игрокам плевать, какая там гремучая смесь условий и веток, лишь бы на их компах игра работала. Нужно искать золотую середину, кмк.__________________
Отправлено Дядя Миша 11-10-2019 в 07:16:
Цитата:
XaeroX писал:
Если ты делаешь проект для программистов
Любая программа делается для программистов, как минимум одного - самого себя. Тебе жы потом и разбираться с этим дерьмом.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Government-Man 13-10-2019 в 00:49:
Заметил еще одну странность...
В шейдерах как известно есть ограничение на количество сэмплеров - обычно их 16. В версиях шейдров до 4-й текстуры биндились непосредственно к сэмплерам, а вот начиная с 4-й версии сэмплер и текстура это разные сущности - сэмплеров (правильнее теперь - сэмплер-стейтов) так и осталось 16, а вот текстур стало можно пихать дофигища.
В ps_4_0_level_9_1, насколько я понял, новое поведение эмулируется: в коде шейдера текстура и сэмплер - разные сущности, однако в реале для каждой пары сэмплер-текстура используется отдельный регистр.
И вот тут есть странность. Раз в SM2.0 есть 16 сэмплеров, то логично предположить, что на них можно забиндить 16 текстур. Однако таблица с описанием совместимости апи дает следующие ограничения:
Для ID3D11DeviceContext::PSSetSamplers: No more than 16 samplers can be bound
Для ID3D11DeviceContext::PSSetShaderResources: No more than 8 simultaneously bound shader resources
То есть сэмплер-стейтов можно забиндить 16, а текстур - всего 8!
А теперь внимание вопрос: уважаемые знатоки старого железа, с чем может быть связано такое ограничение? Связано ли оно с тем, что существовало большое количество железа, на котором количество уникальных текстур было ограничено 8-ю, несмотря на наличие 16-ти сэмплеров?.. Минута на обсуждение...
Отправлено XaeroX 13-10-2019 в 04:34:
Цитата:
Government-Man писал:
То есть сэмплер-стейтов можно забиндить 16, а текстур - всего 8!
Можно забиндить 16 текстур, но текстурных координат передать не более 8.
Вернее, если я правильно понимаю, в ps_3_0 можно передать не более 10 input registers, которые включают вообще всё. Ну обычно это по семантике POSITION, COLOR и 8 TEXCOORD-регистров. Т.к. шейдер может делать dependent texture reads, то вполне можно засэмплить в нём 16 текстур.__________________
Отправлено Government-Man 13-10-2019 в 05:14:
XaeroX
Ну тогда получается, что это какое-то дурацкое искусственное ограничение для вторых шейдеров на 11-м директе. Ведь никто вроде не запрещает использовать одни и те же текстурные координаты для разных текстур?
Еще из ограничений - написано что общее число констант для VS и PS не должно превышать 256 и 32 соответственно. Если это правда, то получается, что на SM2.0 в дх-11 можно использовать только флоат-константы, а булы и инты - нельзя...
Разумеется для моих текущих целей этого всего пока хватает за глаза и я вряд ли упрусь в эти ограничения. Но в целом у меня пока создается впечатление, что максимум из DX9-железа при помощи DX11 не выжать, так что тем кто к этому стремится, логичнее использовать девятый директ.
Отправлено Дядя Миша 13-10-2019 в 07:15:
Цитата:
Government-Man писал:
То есть сэмплер-стейтов можно забиндить 16, а текстур - всего 8!
в GL я кстати так до конца и не понял насчёт этого ограничения.
Текс-корды я всё равно не использую, но чтобы уложиться в лимиты, стараюсь использовать не более 8 текстурных юнитов. А аттрибутов у вертекса почти всегда не более 16 штук.
Добавлено 13-10-2019 в 10:15:
C++ Source Code:
1 | GL_MAX_TEXTURE_SIZE: 16384 |
2 | GL_MAX_TEXTURE_UNITS_ARB: 4 |
3 | GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB: 16384 |
4 | GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB: 16384 |
5 | GL_MAX_ARRAY_TEXTURE_LAYERS_EXT: 2048 |
6 | GL_MAX_TEXTURE_COORDS_ARB: 8 |
7 | GL_MAX_TEXTURE_IMAGE_UNITS_ARB: 32 |
8 | GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB: 4096 |
9 | GL_MAX_VERTEX_ATTRIBS_ARB: 16 |
Это GT640. 32 юнита, 16 аттрибутов. А в DX вроде как можно до 128 штук передавать.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 13-10-2019 в 09:48:
Цитата:
Government-Man писал:
Ну тогда получается, что это какое-то дурацкое искусственное ограничение для вторых шейдеров на 11-м директе.
Это аппаратное ограничение. У шейдерной модели 2.0 ограничено число varying-блоков для передачи параметров между вершинным и пиксельным шейдерами.
Цитата:
Government-Man писал:
Если это правда, то получается, что на SM2.0 в дх-11 можно использовать только флоат-константы, а булы и инты - нельзя...
Нет в шейдерной модели 2.0 неко ких булов и интов. Если ты их заюзаешь в том же Cg, то компилятор их неявно будет трактовать как флоаты.
Цитата:
Government-Man писал:
максимум из DX9-железа при помощи DX11 не выжать, так что тем кто к этому стремится, логичнее использовать девятый директ.
Какая разница, DX9 или DX11, если мы говорим про аппаратные ограничения? 
Добавлено 13-10-2019 в 16:48:
Цитата:
Дядя Миша писал:
в GL я кстати так до конца и не понял насчёт этого ограничения.
GL_MAX_VARYING_FLOATS_ARB__________________
Отправлено Government-Man 13-10-2019 в 13:20:
Цитата:
XaeroX писал:
Это аппаратное ограничение. У шейдерной модели 2.0 ограничено число varying-блоков для передачи параметров между вершинным и пиксельным шейдерами.
Я понимаю, но разве нельзя использовать один набор текскоордов для того чтобы засемплить более одной текстуры?
Цитата:
XaeroX писал:
Нет в шейдерной модели 2.0 неко ких булов и интов. Если ты их заюзаешь в том же Cg, то компилятор их неявно будет трактовать как флоаты.
Документация утверждает что есть, правда они довольно специфические.
Цитата:
XaeroX писал:
Какая разница, DX9 или DX11, если мы говорим про аппаратные ограничения?
Если действительно про аппаратные - то никакой. Именно это я и пытаюсь выяснить.
Отправлено XaeroX 13-10-2019 в 14:39:
Цитата:
Government-Man писал:
разве нельзя использовать один набор текскоордов для того чтобы засемплить более одной текстуры?
Я же как раз об этом и написал - можно (и нужно).
Цитата:
Government-Man писал:
Документация утверждает что есть, правда они довольно специфические.
А, ну это константные регистры для условий и циклов.__________________