2010-03-30 2 views
3

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

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

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

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

ответ

0

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

+1

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

8

Из MSDN:

Asm Shader Reference (Windows)

Shader Binary Format

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

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


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

0

Корпорация Майкрософт разместила здесь спецификацию формата: Direct3D Shader Codes.

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