Синтаксис

Ниже приведен синтаксис для вызова FXC.exe, средства компилятора эффектов. Пример см. в разделе Автономная компиляция.

Использование

Имена файловfxcSwitchOptions

Аргументы

Разделите каждый параметр переключателя пробелом или двоеточием.

SwitchOptions

[in] Параметры компиляции. Существует только один обязательный вариант, и многие другие, которые являются необязательными. Разделите каждый из них пробелом или двоеточием.

Обязательный параметр

Профиль /T <>

Модель шейдера (см . профили).

Необязательные параметры

/?, /help

Распечатайте справку для FXC.exe.

@<command.option.file>

Файл, содержащий дополнительные параметры компиляции. Этот параметр можно смешивать с другими параметрами компиляции из командной строки. Файл command.option.file должен содержать только один параметр в строке. Файл command.option.file не может содержать пустые строки. Параметры, указанные в файле, не должны содержать начальные или конечные пробелы.

/all_resources_bound

Включите агрессивное выравнивание в SM5.1 и более поздних версий. Новые возможности для Direct3D 12.

/См3

Вывод сборки с цветовой кодировкой.

/Сжать

Сжатие байт-кода шейдера DX10 из файлов.

/D <id>=<text>

Определите макрос.

/Распаковки

Распаковка байт-кода шейдера DX10 из первого файла. Выходные файлы должны быть перечислены в том порядке, в который они находились во время сжатия.

/Dumpbin

Загружает двоичный файл вместо компиляции шейдера.

/E <name>

Точка входа шейдера. Если точка входа не указана, main считается именем записи шейдера.

/enable_unbounded_descriptor_tables

Включает неограниченные таблицы дескрипторов. Новые возможности для Direct3D 12.

Файл /extractrootsignature <>

Извлеките корневую сигнатуру из байт-кода шейдера. Новые возможности для Direct3D 12.

Файл /Fc <>

Файл со списком кода выходной сборки.

Файл /FD <>

Извлечение сведений о базе данных программы шейдера (PDB) и запись в указанный файл. При компиляции шейдера используйте параметр /Fd для создания PDB-файла с сведениями об отладке шейдера.

Файл /Fe <>

Вывод предупреждений и ошибок в указанный файл.

Файл /FH <>

Выходной файл заголовка, содержащий код объекта.

Файл /Fl <

Вывод библиотеки. Требуется D3dcompiler_47.dll или более поздняя версия библиотеки DLL.

Файл /Fo <>

Выходной файл объекта. Часто используется расширение .fxc, хотя используются и другие расширения, такие как .o", .obj" или .dxbc".

Файл /Fx <>

Выходной код сборки и шестнадцатеричный файл со списком.

/Gch

Компилируйте как дочерний эффект для профилей fx_4_x.

Примечание

Поддержка устаревших профилей эффектов не рекомендуется.

/Ввп

Отключите режим производительности эффекта.

/Gec

Включите режим обратной совместимости.

/Ges

Включите строгий режим.

Файл /getprivate <>

Сохраните частные данные из большого двоичного объекта шейдера (скомпилированного двоичного файла шейдера) в данный файл. Извлекает частные данные, ранее внедренные с помощью /setprivate, из большого двоичного объекта шейдера.

Параметр /dumpbin необходимо указать с параметром /getprivate. Пример:

fxc /getprivate ps01.private.data 
    /dumpbin ps01.with.private.obj
/Gfa

Избегайте конструкций управления потоком.

/Gfp

Предпочитать конструкции управления потоком.

/Гис

Принудительная строгость IEEE.

/Gpp

Принудительная частичная точность.

/I <include>

Дополнительный путь включения.

/Lx

Выходные шестнадцатеричные литералы. Требуется D3dcompiler_47.dll или более поздняя версия библиотеки DLL.

/matchUAV

Сопоставление выделения слотов UAV шаблона шейдера в текущем шейдере. Дополнительные сведения см. в разделе Примечания.

/mergeUAV

Объединить выделения слотов UAV шаблонного шейдера и текущего шейдера. Дополнительные сведения см. в разделе Примечания.

/Ni

Выходные номера инструкций в списках сборок.

/Нет

Смещение байтов выходных инструкций в списках сборок. При создании сборки используйте параметр /No, чтобы добавить к ней заметки с помощью смещения байтов для каждой инструкции.

Позволяет запретить вывод сообщения об авторских правах.

/Od

Отключает оптимизацию. /Od подразумевает /Gfp, хотя выходные данные могут не совпадать с /Od /Gfp.

/Op

Отключить префигуры (не рекомендуется).

/O0 /O1, /O2, /O3

Уровни оптимизации. По умолчанию используется O1.

  • O0 — отключает переупорядочение инструкций. Это позволяет уменьшить нагрузку на регистр и ускорить моделирование циклов.
  • O1 — отключает переупорядочение инструкций для ps_3_0 и более.
  • O2 — то же, что и O1. Зарезервировано для последующего использования.
  • O3 — то же, что и O1. Зарезервировано для последующего использования.
Файл /P <>

Предварительная обработка в файл (должна использоваться отдельно).

/Qstrip_debug

Удаление данных отладки из байт-кода шейдера для профилей 4_0 и более поздних версий.

/Qstrip_priv

Удалите личные данные из байт-кода шейдера 4_0 и более поздних версий. Удаляет частные данные (произвольную последовательность байтов) из большого двоичного объекта шейдера (скомпилированного двоичного файла шейдера), который вы ранее встроили с /setprivate <file> помощью параметра .

Параметр /dumpbin необходимо указать с параметром /Qstrip_priv. Пример:

fxc /Qstrip_priv /dumpbin /Fo ps01.no.private.obj 
    ps01.with.private.obj
/Qstrip_reflect

Удаление данных отражения из байт-кода шейдера для профилей 4_0 и более поздних версий.

/Qstrip_rootsignature

Удаление корневой подписи из байт-кода шейдера. Новые возможности для Direct3D 12.

/res_may_alias

Предположим, что БПЛА или srV могут быть псевдонимами для cs_5_0+. Требуется D3dcompiler_47.dll или более поздняя версия библиотеки DLL.

Файл /setprivate <>

Добавьте частные данные в данный файл в скомпилированный большой двоичный объект шейдера. Внедряет заданный файл, который обрабатывается как необработанный буфер, в большой двоичный объект шейдера. Используйте параметр /setprivate для добавления частных данных при компиляции шейдера. Или используйте параметр /dumpbin с параметром /setprivate, чтобы загрузить существующий объект шейдера, а затем, когда объект находится в памяти, добавить частный большой двоичный объект данных. Например, используйте одну команду с параметром /setprivate, чтобы добавить частные данные в скомпилированный blob-объект шейдера:

fxc /T ps_4_0 /Fo ps01.with.private.obj ps01.fx 
    /setprivate ps01.private.data

Или используйте две команды, в которых вторая команда загружает объект шейдера, а затем добавляет частные данные:

fxc /T ps_4_0 /Fo ps01.no.private.obj ps01.fx
fxc /dumpbin /Fo ps01.with.private.obj ps01.no.private.obj 
    /setprivate ps01.private.data
Файл /setrootsignature <>

Добавляет корневую подпись к байт-коду шейдера. Новые возможности для Direct3D 12.

Файл /shtemplate <>

Используйте заданный файл шейдера шаблона для объединения (/mergeUAV) и сопоставления (/matchUAV) ресурсов. Дополнительные сведения см. в разделе Примечания.

/Vd

Отключите проверку.

Файл /verifyrootsignature <>

Проверьте байт-код шейдера на соответствие корневой сигнатуре. Новые возможности для Direct3D 12.

/Vi

Отображение сведений о процессе включения.

/Vn <name>

Используйте имя в качестве имени переменной в файле заголовка.

/WX

Обрабатывать предупреждения как ошибки.

/ZI

Включает сведения об отладке.

/Zpc

Упаковать матрицы в порядке столбцов по основным столбцам.

/Zpr

Упаковать матрицы в порядке основной строки.

Имена файлов

[in] Файлы, содержащие шейдеры и (или) эффекты.

Комментарии

/mergeUAVsИспользуйте параметры , /matchUAVsи /shtemplate для выравнивания слотов привязки UAV для цепочки шейдеров.

Предположим, что у вас есть шейдеры A.fx, B.fx и C.fx. Чтобы выровнять слоты привязки UAV для этой цепочки шейдеров, требуется два прохода компиляции:

Выравнивание слотов привязки UAV для цепочки шейдеров

  1. Используйте /mergeUAV для компиляции шейдеров и укажите ранее скомпилированный большой двоичный объект шейдера с параметром /shtemplate. Пример:
    fxc.exe /T cs_5_0 C.fx /Fo C.o /mergeUAVs /shtemplate Btmp.o
    
  2. Используйте /matchUAVs для компиляции шейдеров и укажите последний большой двоичный объект шейдера из первого прохода с помощью /shtemplate. Компиляция может выполняться в любом порядке. Пример:
    fxc.exe /T cs_5_0 A.fx /Fo A.o /matchUAVs /shtemplate C.o
    

Вам не нужно перекомпилировать C.fx во время второго прохода.

После выполнения двух предыдущих этапов компиляции можно использовать A.o, B.o и C.o в качестве окончательных больших двоичных объектов шейдера с выровненными слотами UAV.

Профили

Каждая модель шейдера помечена профилем HLSL. Чтобы скомпилировать шейдер для определенной модели шейдера, выберите соответствующий профиль шейдера из следующей таблицы.

Тип шейдераПрофили
Шейдер вычислений
cs_4_0
cs_4_1
cs_5_0
cs_5_1
Шейдер доменов
ds_5_0
ds_5_1
Шейдер геометрии
gs_4_0
gs_4_1
gs_5_0
gs_5_1
Связывание шейдера HLSL
lib_4_0
lib_4_1
lib_4_0_level_9_1
lib_4_0_level_9_1_vs_only
lib_4_0_level_9_1_ps_only
lib_4_0_level_9_3
lib_4_0_level_9_3_vs_only
lib_4_0_level_9_3_ps_only
lib_5_0
Дополнительные сведения о связывании шейдеров см. в разделах ID3D11Linker и ID3D11FunctionLinkingGraph.
Шейдер поверхности
hs_5_0
hs_5_1
Построитель текстуры
ps_2_0
ps_2_a
ps_2_b
ps_2_sw
ps_3_0
ps_3_sw
ps_4_0
ps_4_0_level_9_0
ps_4_0_level_9_1
ps_4_0_level_9_3
ps_4_1
ps_5_0
ps_5_1
Корневая подпись
rootsig_1_0
Шейдер текстуры
tx_1_0
Вершинный построитель текстуры
vs_1_1
vs_2_0
vs_2_a
vs_2_sw
vs_3_0
vs_3_sw
vs_4_0
vs_4_0_level_9_0
vs_4_0_level_9_1
vs_4_0_level_9_3
vs_4_1
vs_5_0
vs_5_1

Заметки о версии

Сведения о Direct3D 12 см. в статье Указание корневых подписей в HLSL, привязка ресурсов в HLSL и динамическое индексирование с помощью HLSL 5.1.

В Direct3D 10 используйте API, чтобы получить профиль вершины, геометрии и шейдера пикселей, наиболее подходящий для данного устройства, вызвав следующие функции: D3D10GetVertexShaderProfile, D3D10GetPixelShaderProfile и D3D10GetGeometryShaderProfile.

В Direct3D 9 используйте методы GetDeviceCaps или GetDeviceCaps для получения профилей вершин и шейдеров пикселей, поддерживаемых устройством. Структура D3DCAPS9, возвращаемая этими методами, указывает на профили вершин и шейдеров пикселей, поддерживаемые устройством в его членах VertexShaderVersion и PixelShaderVersion .

Примеры см. в разделе Компиляция с помощью текущего компилятора.