Partilhar via


Limites de aninhamento de controle de fluxo

As instruções de controle de fluxo do sombreador de vértice têm duas restrições especiais. As profundidades de aninhamento restringem o número de instruções que podem ser chamadas dentro umas das outras. Além disso, cada instrução tem uma contagem de slots de instrução que se aplica ao número máximo de instruções que um sombreador pode suportar.

Observação

Ao usar os perfis de sombreador HLSL *_4_0_level_9_x, você usa implicitamente os perfis de do Shader Model 2.x para oferecer suporte a hardware compatível com Direct3D 9. Os perfis Shader Model 2.x suportam um comportamento de controle de fluxo mais limitado do que os perfis Shader Model 4.x e posteriores.

 

Contagem de profundidade por instrução para vs_2_0

Cada instrução conta em relação a um ou mais limites de profundidade de aninhamento. Esta tabela mostra a contagem de profundidade que cada instrução adiciona ou subtrai da profundidade existente:

Instruções Aninhamento estático Aninhamento dinâmico aninhamento de loop/rep Aninhamento de chamadas Contagem de fluxo estático
se bool - vs 0 0 0 0 1
if_comp - vs n/a n/a n/a n/a n/a
se pred - vs n/a n/a n/a n/a n/a
mais - vs 0 0 0 0 1(se bool - vs apenas)
endif - vs -1 0 0 0 0
rep - vs 0 0 1 0 1
endrep - vs 0 0 -1 0 0
loop - vs 0 0 1 0 1
endloop - vs 0 0 -1 0 0
intervalo - vs n/a n/a n/a n/a n/a
break_comp - vs n/a n/a n/a n/a n/a
quebra - vs n/a n/a n/a n/a n/a
chamada - vs 0 0 0 1 1
Callnz Bool - contra 0 0 0 1 1
Callnz Pred - vs n/a n/a n/a n/a n/a
ret - vs 0 0 0 -1 0
setp_comp - vs n/a n/a n/a n/a n/a

 

Profundidade de aninhamento

A profundidade de aninhamento define quantas instruções podem ser chamadas dentro umas das outras. Cada tipo de instrução tem um ou mais limites de aninhamento:

Tipo de Instrução Máximo
Aninhamento estático Apenas limitado pela contagem de fluxo estático
Aninhamento dinâmico n/a
aninhamento de loop/rep 1
Aninhamento de chamadas 1
Contagem de fluxo estático 16

 

Contagem de profundidade por instrução para vs_2_x

Cada instrução conta em relação a um ou mais limites de profundidade de aninhamento. Esta tabela mostra a contagem de profundidade que cada instrução adiciona ou subtrai da profundidade existente:

Instruções Aninhamento estático Aninhamento dinâmico aninhamento de loop/rep Aninhamento de chamadas Contagem de fluxo estático
se bool - vs 1 0 0 0 1
if_comp - vs 0 1 0 0 0
se pred - vs 0 1 0 0 0
mais - vs 0 0 0 0 1(se bool - vs apenas)
endif - vs -1(se bool - vs) -1(se pred - vs ou if_comp - vs) 0 0 0
rep - vs 0 0 1 0 1
endrep - vs 0 0 -1 0 0
loop - vs 0 0 1 0 1
endloop - vs 0 0 -1 0 0
intervalo - vs 0 0 0 0 0
break_comp - vs 0 1, -1 0 0 0
quebra - vs 0 0 0 0 0
chamada - vs 0 0 0 1 1
Callnz Bool - contra 0 0 0 1 1
Callnz Pred - vs 0 1 0 1 0
ret - vs 0 -1 (Callnz Pred - vs) 0 -1 0
setp_comp - vs 0 0 0 0 0

 

Profundidade de aninhamento

A profundidade de aninhamento define quantas instruções podem ser chamadas dentro umas das outras. Cada tipo de instrução tem um ou mais limites de aninhamento:

Tipo de Instrução Máximo
Aninhamento estático Apenas limitado pela contagem de fluxo estático
Aninhamento dinâmico 0 ou 24, ver D3DCAPS9. VS20Caps.DynamicFlowControlProfundidade
aninhamento de loop/rep 1 a 4, ver D3DCAPS9. VS20Caps.StaticFlowControlProfundidade
Aninhamento de chamadas 1 a 4, ver D3DCAPS9. VS20Caps.StaticFlowControlDepth (independente do limite de loop/rep)
Contagem de fluxo estático 16

 

Contagem de profundidade por instrução para vs_2_sw

Cada instrução conta em relação a um ou mais limites de profundidade de aninhamento. Esta tabela mostra a contagem de profundidade que cada instrução adiciona ou subtrai da profundidade existente:

Instruções Aninhamento estático Aninhamento dinâmico aninhamento de loop/rep Aninhamento de chamadas Contagem de fluxo estático
se bool - vs 1 0 0 0 n/a
if_comp - vs 0 1 0 0 n/a
se pred - vs 0 1 0 0 n/a
mais - vs 0 0 0 0 n/a
endif - vs -1(se bool - vs) -1(se pred - vs ou if_comp - vs) 0 0 n/a
rep - vs 0 0 1 0 n/a
endrep - vs 0 0 -1 0 n/a
loop - vs 0 0 1 0 n/a
endloop - vs 0 0 -1 0 n/a
intervalo - vs 0 0 0 0 n/a
break_comp - vs 0 1, -1 0 0 n/a
quebra - vs 0 0 0 0 n/a
chamada - vs 0 0 0 1 n/a
Callnz Bool - contra 0 0 0 1 n/a
Callnz Pred - vs 0 1 0 1 n/a
ret - vs 0 -1 (Callnz Pred - vs) 0 -1 n/a
setp_comp - vs 0 0 0 0 n/a

 

Profundidade de aninhamento

A profundidade de aninhamento define quantas instruções podem ser chamadas dentro umas das outras. Cada tipo de instrução tem um ou mais limites de aninhamento:

Tipo de Instrução Máximo
Aninhamento estático 24
Aninhamento dinâmico 24
aninhamento de loop/rep 4
Aninhamento de chamadas 4
Contagem de fluxo estático Sem limite

 

Contagem de profundidade por instrução para vs_3_0

Cada instrução conta em relação a um ou mais limites de profundidade de aninhamento. Esta tabela mostra a contagem de profundidade que cada instrução adiciona ou subtrai da profundidade existente:

Instruções Aninhamento estático Aninhamento dinâmico aninhamento de loop/rep Aninhamento de chamadas Contagem de fluxo estático
se bool - vs 1 0 0 0 n/a
if_comp - vs 0 1 0 0 n/a
se pred - vs 0 1 0 0 n/a
mais - vs 0 0 0 0 n/a
endif - vs -1(se bool - vs) -1(se pred - vs ou if_comp - vs) 0 0 n/a
rep - vs 0 0 1 0 n/a
endrep - vs 0 0 -1 0 n/a
loop - vs 0 0 1 0 n/a
endloop - vs 0 0 -1 0 n/a
intervalo - vs 0 0 0 0 n/a
break_comp - vs 0 1, -1 0 0 n/a
quebra - vs 0 0 0 0 n/a
chamada - vs 0 0 0 1 n/a
Callnz Bool - contra 0 0 0 1 n/a
Callnz Pred - vs 0 1 0 1 n/a
ret - vs 0 -1 (Callnz Pred - vs) 0 -1 n/a
setp_comp - vs 0 0 0 0 n/a

 

Profundidade de aninhamento

A profundidade de aninhamento define quantas instruções podem ser chamadas dentro umas das outras. Cada tipo de instrução tem um ou mais limites de aninhamento:

Tipo de Instrução Máximo
Aninhamento estático 24
Aninhamento dinâmico 24
aninhamento de loop/rep 4
Aninhamento de chamadas 4
Contagem de fluxo estático Sem limite

 

Contagem de profundidade por instrução para vs_3_sw

Cada instrução conta em relação a um ou mais limites de profundidade de aninhamento. Esta tabela mostra a contagem de profundidade que cada instrução adiciona ou subtrai da profundidade existente:

Instruções Aninhamento estático Aninhamento dinâmico aninhamento de loop/rep Aninhamento de chamadas Contagem de fluxo estático
se bool - vs 1 0 0 0 n/a
if_comp - vs 0 1 0 0 n/a
se pred - vs 0 1 0 0 n/a
mais - vs 0 0 0 0 n/a
endif - vs -1(se bool - vs) -1(se pred - vs ou if_comp - vs) 0 0 n/a
rep - vs 0 0 1 0 n/a
endrep - vs 0 0 -1 0 n/a
loop - vs 0 0 1 0 n/a
endloop - vs 0 0 -1 0 n/a
intervalo - vs 0 0 0 0 n/a
break_comp - vs 0 1, -1 0 0 n/a
quebra - vs 0 0 0 0 n/a
chamada - vs 0 0 0 1 n/a
Callnz Bool - contra 0 0 0 1 n/a
Callnz Pred - vs 0 1 0 1 n/a
ret - vs 0 -1 (Callnz Pred - vs) 0 -1 n/a
setp_comp - vs 0 0 0 0 n/a

 

Profundidade de aninhamento

A profundidade de aninhamento define quantas instruções podem ser chamadas dentro umas das outras. Cada tipo de instrução tem um ou mais limites de aninhamento:

Tipo de Instrução Máximo
Aninhamento estático 24
Aninhamento dinâmico 24
aninhamento de loop/rep 4
Aninhamento de chamadas 4
Contagem de fluxo estático Sem limite

 

Vertex Shader Instruções