Поделиться через


Флаги D3DXSHADER

Флаги D3DXSHADER используются для анализа, компиляции или сборки шейдеров.

Флаги средства синтаксического анализа

Флаги времени синтаксического анализа используются только системой эффектов (перед компиляцией эффектов) при создании компилятора эффектов. Например, можно создать объект компилятора с D3DXSHADER_PACKMATRIX_COLUMNMAJOR, а затем многократно использовать этот объект компилятора с разными флагами компилятора для создания специализированного кода.

Константа Описание
D3DXSHADER_PACKMATRIX_COLUMNMAJOR
/Zpc
Если не указано явно, матрицы будут упакованы в порядке столбцов (каждый вектор будет находиться в одном столбце) при передаче в шейдер и из шейдера. Как правило, это более эффективно, так как позволяет выполнять векторно-матричное умножение с помощью ряда точечных продуктов.
D3DXSHADER_PACKMATRIX_ROWMAJOR
/Zpr
Если не указано явно, матрицы будут упакованы в основном порядке (каждый вектор будет находиться в одной строке) при передаче в шейдер или из шейдера.

Флаги компилятора

Компилятор DirectX 10 HLSL теперь является компилятором по умолчанию. Дополнительные сведения см. в статье Средство компилятора эффектов .

В следующей таблице приведены флаги, доступные в Direct3D 9 и Direct3D 10. Значение флага является эквивалентным параметром fxc.

Констант/значение Описание
D3DXSHADER_AVOID_FLOW_CONTROL
/Gfa
Это указание для компилятора, чтобы избежать использования инструкций управления потоком.
Direct3D 9 — да
Direct3D 10 — да
D3DXSHADER_DEBUG
/ZI
Вставка имени файла отладки, номеров строк, а также сведений о типе и символе во время компиляции шейдера.
Direct3D 9 — да
Direct3D 10 — да
D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY
/Gec
Компилируйте ps_1_x шейдеры как ps_2_0. Эффекты, определяющие целевые объекты ps_1_x, будут компилироваться в целевые объекты ps_2_0, так как это минимальная версия шейдера, поддерживаемая версией компилятора шейдера, поставляемой с DirectX 10. Этот флаг не действует при использовании с целевыми объектами компиляции более высокого уровня.
Direct3D 9 — нет
Direct3D 10 — да
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT
Н/Д
Принудительная компиляция компилятора к следующему самому высокому доступному программному объекту для пиксельных шейдеров. Этот флаг также отключает оптимизацию и отладку.
Direct3D 9 — да
Direct3D 10 — да
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT
Н/Д
Принудительная компиляция компилятора к следующему самому высокому доступному программному объекту для вершинных шейдеров. Этот флаг также отключает оптимизацию и отладку.
Direct3D 9 — да
Direct3D 10 — да
D3DXSHADER_IEEE_STRICTNESS
/Гис
Отключите оптимизации, которые могут привести к тому, что выходные данные скомпилированной программы шейдера могут отличаться от выходных данных программы, скомпилированной с помощью компилятора шейдеров DirectX 9, из-за небольшой точности ошибок в математических вычислениях с плавающей запятой.
Direct3D 9 — нет
Direct3D 10 — да
D3DXSHADER_NO_PRESHADER
/Op
Отключает префигуры. Компилятор не будет извлекать статические выражения для оценки на ЦП узла. Кроме того, компилятор не будет чердак каких-либо выражений при компиляции автономных функций.
Direct3D 9 — да
Direct3D 10 — да
D3DXSHADER_OPTIMIZATION_LEVEL0
/O0
Самый низкий уровень оптимизации. Может создавать более медленный код, но делать это быстрее. Это может быть полезно в цикле разработки шейдеров с высокой итеративной степенью.
Direct3D 9 — нет
Direct3D 10 — да
D3DXSHADER_OPTIMIZATION_LEVEL1
/O1
Второй самый низкий уровень оптимизации.
Direct3D 9 — нет
Direct3D 10 — да
D3DXSHADER_OPTIMIZATION_LEVEL2
/O2
Второй по величине уровень оптимизации.
Direct3D 9 — нет
Direct3D 10 — да
D3DXSHADER_OPTIMIZATION_LEVEL3
/O3
Самый высокий уровень оптимизации. Создает оптимальный код, но для этого может потребоваться значительно больше времени. Это будет полезно для окончательных сборок приложения, где производительность является наиболее важным фактором.
Direct3D 9 — нет
Direct3D 10 — да
D3DXSHADER_PARTIALPRECISION
/Gpp
Принудительное выполнение всех вычислений в результире шейдера с частичной точностью. Это может привести к более быстрой оценке шейдеров на некотором оборудовании.
Direct3D 9 — да
Direct3D 10 — да
D3DXSHADER_PREFER_FLOW_CONTROL
/Gfp
Это указание компилятору предпочесть использовать инструкции управления потоком.
Direct3D 9 — да
Direct3D 10 — да
D3DXSHADER_SKIPOPTIMIZATION
/Od
Указать компилятору пропустить шаги оптимизации во время создания кода. Если вы не пытаетесь изолировать проблему в коде и подозреваете компилятор, использовать этот параметр не рекомендуется.
Direct3D 9 — да
Direct3D 10 — да
D3DXSHADER_SKIPVALIDATION
/Vd
Не проверяйте созданный код на соответствие известным возможностям и ограничениям. Этот параметр рекомендуется использовать только при компиляции шейдеров, которые, как известно, работают (т. е. шейдеры, скомпилированные ранее без этого параметра). Шейдеры всегда проверяются средой выполнения перед их настройкой на устройство.
Direct3D 9 — да
Direct3D 10 — да
D3DXSHADER_USE_LEGACY_D3DX9_31_DLL
/LD
Включите использование исходного компилятора Direct3D 9 HLSL. OCT2006_d3dx9_31_x86.cab или OCT2006_d3dx9_31_x64.cab должны быть включены в состав redist приложений. Этот флаг необходим для компиляции ps_1_x шейдеров без использования флага повышения для ps_2_0. Указание этого флага при получении интерфейса ID3DXEffectCompiler приводит к тому, что последующие вызовы CompileEffect и CompileShader через этот объект используют устаревший компилятор.
Direct3D 9 — да
Direct3D 10 — нет

Флаги ассемблеров

Флаги ассемблера используются системой эффектов для оптимизации кода шейдера и сборки эффектов.

Константа Описание
D3DXSHADER_DEBUG
Вставка имени файла отладки, номеров строк, а также типов и символов во время компиляции шейдера.
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT
Принудительная компиляция компилятора для следующего наиболее высокого доступного целевого программного обеспечения для пиксельных шейдеров. Этот флаг также отключает оптимизацию и отладку.
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT
Принудительная компиляция компилятора для следующего наиболее высокого доступного целевого программного обеспечения для вершинных шейдеров. Этот флаг также отключает оптимизацию и отладку.
D3DXSHADER_SKIPVALIDATION
Не проверяйте созданный код на соответствие известным возможностям и ограничениям. Этот параметр рекомендуется использовать только при компиляции шейдеров, которые, как известно, работают (т. е. шейдеры, скомпилированные ранее без этого параметра). Шейдеры всегда проверяются средой выполнения перед их настройкой на устройство.

Комментарии

Система эффектов будет использовать флаги синтаксического анализа при вызове с помощью следующих функций:

Система эффектов будет использовать флаги компилятора при вызове следующими функциями:

Кроме того, можно использовать флаги компилятора при создании эффекта, вызвав D3DXCreateEffect (или D3DXCreateEffectFromFile или D3DXCreateEffectFromResource).

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

Система эффектов будет использовать флаги ассемблеров при вызове следующими функциями:

Применение флагов компилятора или ассемблеров к неправильному API приведет к сбою проверки шейдера. Проверьте значение кода ошибки Direct3D, возвращаемое функцией, с помощью средства поиска ошибок DirectX (DXErr.exe), чтобы отследить эту ошибку. Вы можете получить DXErr.exe и узнать о нем из пакета SDK для DirectX. Сведения о пакете SDK для DirectX см. в разделе Где находится пакет SDK для DirectX?.

Требования

Требование Значение
Заголовок
D3dx9shader.h

См. также раздел

Константы D3DX