다음을 통해 공유


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 대상을 지정하는 효과는 DirectX 10과 함께 제공되는 셰이더 컴파일러 버전에서 지원하는 최소 셰이더 버전이므로 ps_2_0 대상으로 컴파일됩니다. 이 플래그는 상위 수준 컴파일 대상과 함께 사용할 때 영향을 주지 않습니다.
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
/Gis
컴파일된 셰이더 프로그램의 출력이 부동 소수점 수학의 작은 정밀도 오류로 인해 DirectX 9 셰이더 컴파일러로 컴파일된 프로그램의 출력과 다를 수 있는 최적화를 사용하지 않도록 설정합니다.
Direct3D 9 - 아니요
Direct3D 10 - 예
D3DXSHADER_NO_PRESHADER
/Op
사전 섀더를 사용하지 않도록 설정합니다. 컴파일러는 호스트 CPU에 대한 평가를 위해 정적 식을 끌어오지 않습니다. 또한 컴파일러는 독립 실행형 함수를 컴파일할 때 식을 로프트하지 않습니다.
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 애플리케이션 재배포의 일부로 포함되어야 합니다. 이 플래그는 ps_2_0 승격 플래그를 사용하지 않고 ps_1_x 셰이더를 컴파일하는 데 필요합니다. ID3DXEffectCompiler 인터페이스를 가져올 때 이 플래그를 지정하면 이 개체를 통해 CompileEffectCompileShader에 대한 후속 호출이 레거시 컴파일러를 사용합니다.
Direct3D 9 - 예
Direct3D 10 - 아니요

어셈블러 플래그

어셈블러 플래그는 효과 시스템에서 셰이더 및 효과 어셈블리 코드를 최적화하는 데 사용됩니다.

상수 설명
D3DXSHADER_DEBUG
셰이더 컴파일 중에 디버그 파일 이름, 줄 번호 및 형식 및 기호 정보를 삽입합니다.
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT
컴파일러가 픽셀 셰이더에 대해 사용 가능한 다음 소프트웨어 대상에 대해 컴파일하도록 합니다. 또한 이 플래그는 최적화를 해제하고 디버깅을 켭니다.
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT
꼭짓점 셰이더에 사용 가능한 다음 소프트웨어 대상에 대해 컴파일을 강제로 컴파일합니다. 또한 이 플래그는 최적화를 해제하고 디버깅을 켭니다.
D3DXSHADER_SKIPVALIDATION
생성된 코드의 유효성을 알려진 기능 및 제약 조건에 대해 유효성을 검사하지 마세요. 이 옵션은 작동하는 것으로 알려진 셰이더(즉, 이전에 이 옵션 없이 컴파일된 셰이더)를 컴파일할 때만 권장됩니다. 셰이더는 디바이스로 설정되기 전에 런타임에서 항상 유효성을 검사합니다.

설명

효과 시스템은 다음 함수에서 호출할 때 파서 플래그 를 사용합니다.

효과 시스템은 다음 함수에서 호출될 때 컴파일러 플래그 를 사용합니다.

또한 D3DXCreateEffect(또는 D3DXCreateEffectFromFile 또는 D3DXCreateEffectFromResource)를 호출하여 효과를 만들 때 컴파일러 플래그 사용할 수 있습니다.

  • 컴파일되지 않은 .fx 파일을 전달하는 경우 효과 시스템은 컴파일 중에 플래그 입력 매개 변수를 사용합니다.
  • 컴파일된 효과를 전달하면 효과를 로드할 필요가 없으므로 효과 시스템에서 컴파일러 플래그를 무시합니다.

효과 시스템은 다음 함수에서 호출될 때 어셈블러 플래그 를 사용합니다.

잘못된 API에 컴파일러 플래그 또는 어셈블러 플래그 를 적용하면 셰이더 유효성 검사가 실패합니다. 이 오류를 추적하는 데 도움이 되도록 DirectX 오류 조회 도구(DXErr.exe)를 사용하여 함수의 Direct3D 오류 코드 반환 값을 확인합니다. DXErr.exe DirectX SDK에서 알아볼 수 있습니다. DirectX SDK에 대한 자세한 내용은 DirectX SDK는 어디에 있나요?를 참조하세요.

요구 사항

요구 사항
헤더
D3dx9shader.h

추가 정보

D3DX 상수