Формат скомпилированных файлов шейдеров DirectX9?

Документирован ли где-либо официально или неофициально формат скомпилированных объектных файлов пиксельных и вершинных шейдеров, создаваемых fxc.exe?

Я хотел бы иметь возможность читать имя константы для регистрации назначений из файлов шейдеров. Я знаю, что фреймворк эффектов в D3DX может это сделать, но мне нужно избегать использования D3DX, так как он может не быть установлен на пользовательских машинах, и мне он не нужен ни для чего другого, поэтому я хочу, чтобы им не приходилось запускать обновление directx. .

Если фреймворк эффектов может это сделать, то могу и я, если я могу узнать формат файла, но я могу «найти его где-нибудь задокументированным».

(это для использования в directx9)


person jcoder    schedule 30.03.2010    source источник


Ответы (3)


Microsoft намеренно скрывает от вас эту информацию. Тем не менее, поскольку вы используете DirectX 9, его относительно легко отреагировать на обратную разработку формата. Если вы напишете простой фрагмент сборки шейдера, вы можете проверить, что он скомпилировал код, возвращенный с другой стороны. Внося изменения в ассемблер, вы можете увидеть, как они меняются в байтовом коде. Вы начнете видеть закономерности в том, как обрабатываются регистры и где кодируются инструкции. Таким образом, вы можете медленно, но верно вычислить байт-код. Но это будет не так быстро!

person Goz    schedule 31.03.2010
comment
Спасибо за ответ, который согласуется с тем, что я нашел в другом месте. Я решил использовать другой подход и скомпилировать шейдеры, используя мою собственную программу, используя D3DX на машине сборки, а не используя fxc, а затем я могу использовать интерфейс D3DX для получения данных таблицы констант и записать их в своей собственной формат для использования моей программой. - person jcoder; 31.03.2010

Из MSDN:

Справочник по шейдерам Asm (Windows)

Двоичный формат шейдера

Поразрядная компоновка потока инструкций шейдера определена в D3d9types.h. Если вы хотите разработать собственный компилятор шейдера или инструменты построения и хотите получить дополнительную информацию о потоке токенов шейдера, обратитесь к Direct3D 9 Driver Development Kit (DDK).

Таким образом, вы можете либо просмотреть 'D3d9type.h' и попытаться понять это таким образом (быстро взглянули и смогли увидеть перечисления / типы, которые вам нужны, но не то, как он структурирован), либо загрузить DDK и прочитать официальный документация.


Дополнительную информацию можно найти здесь: Коды шейдеров Direct3D (разверните дерево в левой части экрана, чтобы получить всю информацию).

person Grant Peters    schedule 01.07.2010

Microsoft разместила здесь спецификацию формата: Коды шейдеров Direct3D.

Однако он обращается к константам по имени (например, D3DSIO_DCL), поэтому вам, вероятно, все равно понадобится Windows DDK, чтобы получить от него какую-либо пользу.

person Cygon    schedule 06.07.2012