Sinalizadores D3DXSHADER

Os sinalizadores D3DXSHADER são usados para analisar, compilar ou montar sombreadores.

Sinalizadores do analisador

Os sinalizadores de tempo de análise são usados apenas pelo sistema de efeito (antes da compilação do efeito) quando você cria um compilador de efeito. Por exemplo, você pode criar um objeto do compilador com D3DXSHADER_PACKMATRIX_COLUMNMAJOR e, em seguida, usar esse objeto compilador repetidamente com diferentes sinalizadores de compilador para gerar código especializado.

Constante Descrição
D3DXSHADER_PACKMATRIX_COLUMNMAJOR
/Zpc
A menos que explicitamente especificado, as matrizes serão empacotadas em ordem de coluna principal (cada vetor estará em uma única coluna) quando passadas de e para o sombreador. Isso geralmente é mais eficiente porque permite que a multiplicação de matriz de vetores seja executada usando uma série de produtos de ponto.
D3DXSHADER_PACKMATRIX_ROWMAJOR
/Zpr
A menos que explicitamente especificado, as matrizes serão empacotadas em ordem de linha principal (cada vetor estará em uma única linha) quando passadas para ou do sombreador.

Sinalizadores do compilador

O compilador HLSL do DirectX 10 agora é o compilador padrão. Consulte Effect-Compiler Tool para obter detalhes.

A tabela a seguir detalha os sinalizadores disponíveis no Direct3D 9 e no Direct3D 10. O valor do sinalizador é a opção fxc equivalente.

Constante/valor Descrição
D3DXSHADER_AVOID_FLOW_CONTROL
/Gfa
Essa é uma dica para o compilador evitar o uso de instruções de controle de fluxo.
Direct3D 9 – sim
Direct3D 10 - sim
D3DXSHADER_DEBUG
/Zi
Insira o nome do arquivo de depuração, os números de linha e as informações de tipo e símbolo durante a compilação do sombreador.
Direct3D 9 – sim
Direct3D 10 - sim
D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY
/Gec
Compile ps_1_x sombreadores como ps_2_0. Os efeitos que especificam ps_1_x destinos serão compilados para ps_2_0 destinos, pois essa é a versão mínima do sombreador compatível com a versão do compilador de sombreador fornecida com o DirectX 10. Esse sinalizador não tem efeito quando usado com destinos de compilação de nível superior.
Direct3D 9 – não
Direct3D 10 - sim
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT
N/D
Force o compilador a compilar no próximo destino de software mais alto disponível para sombreadores de pixel. Esse sinalizador também ativa as otimizações e a depuração.
Direct3D 9 – sim
Direct3D 10 - sim
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT
N/D
Force o compilador a compilar no próximo destino de software mais alto disponível para sombreadores de vértice. Esse sinalizador também ativa as otimizações e a depuração.
Direct3D 9 – sim
Direct3D 10 - sim
D3DXSHADER_IEEE_STRICTNESS
/Gis
Desabilite otimizações que podem fazer com que a saída de um programa de sombreador compilado seja diferente da saída de um programa compilado com o compilador de sombreador DirectX 9 devido a pequenos erros de precisão na matemática de ponto flutuante.
Direct3D 9 – não
Direct3D 10 - sim
D3DXSHADER_NO_PRESHADER
/Op
Desabilita pré-sombreadores. O compilador não extrairá expressões estáticas para avaliação na CPU do host. Além disso, o compilador não criará nenhuma expressão ao compilar funções autônomas.
Direct3D 9 – sim
Direct3D 10 - sim
D3DXSHADER_OPTIMIZATION_LEVEL0
/O0
Nível de otimização mais baixo. Pode produzir código mais lento, mas o fará mais rapidamente. Isso pode ser útil em um ciclo de desenvolvimento de sombreador altamente iterativo.
Direct3D 9 – não
Direct3D 10 - sim
D3DXSHADER_OPTIMIZATION_LEVEL1
/O1
Segundo nível de otimização mais baixo.
Direct3D 9 – não
Direct3D 10 - sim
D3DXSHADER_OPTIMIZATION_LEVEL2
/O2
Segundo nível de otimização mais alto.
Direct3D 9 – não
Direct3D 10 - sim
D3DXSHADER_OPTIMIZATION_LEVEL3
/O3
Nível de otimização mais alto. Produzirá o melhor código possível, mas pode levar muito mais tempo para fazer isso. Isso será útil para builds finais de um aplicativo em que o desempenho é o fator mais importante.
Direct3D 9 – não
Direct3D 10 - sim
D3DXSHADER_PARTIALPRECISION
/Gpp
Force todos os cálculos no sombreador resultante a ocorrer em precisão parcial. Isso pode resultar em uma avaliação mais rápida de sombreadores em algum hardware.
Direct3D 9 – sim
Direct3D 10 - sim
D3DXSHADER_PREFER_FLOW_CONTROL
/Gfp
Essa é uma dica para o compilador preferir usar instruções de controle de fluxo.
Direct3D 9 – sim
Direct3D 10 - sim
D3DXSHADER_SKIPOPTIMIZATION
/Od
Instrua o compilador a ignorar as etapas de otimização durante a geração de código. A menos que você esteja tentando isolar um problema em seu código e suspeite do compilador, não é recomendável usar essa opção.
Direct3D 9 – sim
Direct3D 10 - sim
D3DXSHADER_SKIPVALIDATION
/Vd
Não valide o código gerado em relação a funcionalidades e restrições conhecidas. Essa opção é recomendada somente ao compilar sombreadores conhecidos por funcionar (ou seja, sombreadores que já foram compilados antes sem essa opção). Os sombreadores são sempre validados pelo runtime antes de serem definidos para o dispositivo.
Direct3D 9 – sim
Direct3D 10 - sim
D3DXSHADER_USE_LEGACY_D3DX9_31_DLL
/LD
Habilite o uso do compilador HLSL original do Direct3D 9. OCT2006_d3dx9_31_x86.cab ou OCT2006_d3dx9_31_x64.cab devem ser incluídos como parte do redist. Esse sinalizador é necessário para compilar ps_1_x sombreadores sem usar o sinalizador de promoção para ps_2_0. Especificar esse sinalizador ao obter uma interface ID3DXEffectCompiler faz com que chamadas subsequentes a CompileEffect e CompileShader por meio desse objeto usem o compilador herdado.
Direct3D 9 – sim
Direct3D 10 – não

Sinalizadores do assembler

Os sinalizadores assembler são usados pelo sistema de efeito para otimizar o sombreador e efetivar o código do assembly.

Constante Descrição
D3DXSHADER_DEBUG
Insira o nome do arquivo de depuração, os números de linha e as informações de tipo e símbolo durante a compilação do sombreador.
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT
Force o compilador a compilar no próximo destino de software mais alto disponível para sombreadores de pixel. Esse sinalizador também ativa as otimizações e a depuração.
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT
Force o compilador a compilar no próximo destino de software mais alto disponível para sombreadores de vértice. Esse sinalizador também ativa as otimizações e a depuração.
D3DXSHADER_SKIPVALIDATION
Não valide o código gerado em relação a funcionalidades e restrições conhecidas. Essa opção é recomendada somente ao compilar sombreadores conhecidos por funcionar (ou seja, sombreadores que já foram compilados antes sem essa opção). Os sombreadores são sempre validados pelo runtime antes de serem definidos para o dispositivo.

Comentários

O sistema de efeito usará sinalizadores de analisador quando chamado pelas seguintes funções:

O sistema de efeito usará sinalizadores do compilador quando chamado pelas seguintes funções:

Além disso, você pode usar sinalizadores do compilador ao criar um efeito chamando D3DXCreateEffect (ou D3DXCreateEffectFromFile ou D3DXCreateEffectFromResource).

  • Se você passar um arquivo .fx não compilado, o sistema de efeito usará o parâmetro de entrada de sinalizador durante a compilação.
  • Se você passar um efeito compilado, o sistema de efeito ignorará os sinalizadores do compilador, pois eles não são necessários para carregar o efeito.

O sistema de efeito usará sinalizadores assembler quando chamado pelas seguintes funções:

A aplicação de sinalizadores do compilador ou sinalizadores de assembler à API incorreta falhará na validação do sombreador. Verifique o valor retornado do código de erro Direct3D da função com a Ferramenta de Pesquisa de Erros do DirectX (DXErr.exe) para ajudar a rastrear esse erro. Você pode obter DXErr.exe e saber mais sobre isso no SDK do DirectX. Para obter informações sobre o SDK do DirectX, consulte Onde está o SDK do DirectX?.

Requisitos

Requisito Valor
parâmetro
D3dx9shader.h

Confira também

Constantes D3DX