Формат скомпилированных файлов шейдеров Directx9? - PullRequest
3 голосов
/ 30 марта 2010

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

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

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

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

Ответы [ 3 ]

9 голосов
/ 01 июля 2010

Из MSDN:

Справочник по Asm Shader (Windows)

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

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

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


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

0 голосов
/ 06 июля 2012

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

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

0 голосов
/ 31 марта 2010

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

...