Compartilhar via


Registro de Cor de Saída

Os registros de saída de cor do sombreador de pixel (oC#) são registros somente gravação que geram resultados para vários destinos de renderização.

Sintaxe

Oc #

 

Em que:

Nome Descrição
oC0 renderizar o destino nº 0
oC1 renderizar o destino nº 1
oC2 renderizar destino nº 2
oC3 renderizar o destino nº 3

 

Comentários

  • Se oCn for gravado, mas não houver nenhum destino de renderização correspondente, essa gravação em oCn será ignorada.
  • Os estados de renderização D3DRS_COLORWRITEENABLE, D3DRS_COLORWRITEENABLE1, D3DRS_COLORWRITEENABLE2 e D3DRS_COLORWRITEENABLE3 determinar quais componentes do oCn serão gravados no destino de renderização (após a combinação, se aplicável). Se o sombreador gravar alguns, mas não todos os componentes definidos pelos estados de renderização D3DRS_COLORWRITEENABLE* para um determinado registro oCn, os canais não escritos produzirão valores indefinidos no destino de renderização correspondente. Se nenhum dos componentes de um oCn for gravado, o destino de renderização correspondente não deverá ser atualizado (conforme indicado acima), para que os estados de renderização D3DRS_COLORWRITEENABLE* não se apliquem.

Restrições do modelo de sombreador 2

  • oCn só pode ser escrito com a instrução mov - ps .
  • oC0 deve ser sempre escrito no sombreador.
  • Nenhum swizzle de origem (exceto .xyzw = swizzle padrão) ou modificador de origem é permitido ao gravar em qualquer oCn.
  • Nenhuma máscara de gravação de destino (exceto .xyzw = máscara padrão) ou modificador de instrução é permitido ao gravar em qualquer oCn.
  • Se oCn for gravado, oC0 – oCn-1 também deverá ser gravado. Por exemplo, para gravar em oC2, você também deve gravar em oC0 e oC1.
  • No máximo, uma gravação em qualquer oC# por sombreador é permitida.
  • Para ps_2_x e ps_3_0, você não pode gravar em registros oC# e oD# dentro do controle de fluxo dinâmico ou da precação (gravações em oC# dentro do controle de fluxo estático é bom).

Restrições do modelo de sombreador 3

  • Para ps_3_0, os registros de saída oC# e oD# podem ser gravados várias vezes. A saída do sombreador de pixel vem do conteúdo dos registros de saída no final da execução do sombreador. Se uma gravação em um registro de saída não acontecer, talvez devido ao controle de fluxo ou se o sombreador simplesmente não o gravou, o rendertarget correspondente também não será atualizado. Se um subconjunto dos canais em um registro de saída for gravado, os valores indefinidos serão gravados nos canais restantes.
  • Para ps_3_0, os registros oC# podem ser gravados com qualquer máscara de gravação.
  • Para ps_2_x e ps_3_0, você não pode gravar em registros oC# e oD# dentro do controle de fluxo dinâmico ou da precação (gravações em oC# dentro do controle de fluxo estático é bom).
  • Você não pode executar nenhum cálculo de gradiente (ou operações que invocam implicitamente cálculos de gradiente, como texld - ps_2_0 e para cima, texldb - ps, texldp - ps) dentro de instruções de controle de fluxo cujas condições de ramificação variam por primitivo (ou seja, instruções de controle de fluxo dinâmico). A precatório de instrução não é considerada controle de fluxo dinâmico.

Registros

Vários destinos de renderização (Direct3D 9)