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 dar suporte.

Observação

Ao usar os perfis de sombreador *_4_0_level_9_x HLSL, você usa implicitamente os perfis do Modelo de Sombreador 2.x para dar suporte ao hardware compatível com Direct3D 9. Os perfis do Modelo de Sombreador 2.x dão suporte a um comportamento de controle de fluxo mais limitado do que o Modelo de Sombreador 4.x e perfis posteriores.

 

Contagem de profundidade por instrução para vs_2_0

Cada instrução conta com 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ção 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/d n/d n/d n/d n/d
if pred - vs n/d n/d n/d n/d n/d
else - vs 0 0 0 0 1(if bool - vs only)
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
break - vs n/d n/d n/d n/d n/d
break_comp - vs n/d n/d n/d n/d n/d
breakp - vs n/d n/d n/d n/d n/d
call - vs 0 0 0 1 1
callnz bool - vs 0 0 0 1 1
callnz pred - vs n/d n/d n/d n/d n/d
ret - vs 0 0 0 -1 0
setp_comp - vs n/d n/d n/d n/d n/d

 

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 Limitado apenas pela contagem de fluxo estático
Aninhamento dinâmico n/d
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 com 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ção 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
if pred - vs 0 1 0 0 0
else - vs 0 0 0 0 1(if bool - vs only)
endif - vs -1(if bool - vs) -1(se for anterior - 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
break - vs 0 0 0 0 0
break_comp - vs 0 1, -1 0 0 0
breakp - vs 0 0 0 0 0
call - vs 0 0 0 1 1
callnz bool - vs 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 Limitado apenas pela contagem de fluxos estáticos
Aninhamento dinâmico 0 ou 24, consulte D3DCAPS9. VS20Caps.DynamicFlowControlDepth
aninhamento de loop/rep 1 a 4, consulte D3DCAPS9. VS20Caps.StaticFlowControlDepth
aninhamento de chamadas 1 a 4, consulte 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 com 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ção 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/d
if_comp - vs 0 1 0 0 n/d
se pred - vs 0 1 0 0 n/d
else - vs 0 0 0 0 n/d
endif - vs -1(if bool - vs) -1(if pred - vs ou if_comp - vs) 0 0 n/d
rep - vs 0 0 1 0 n/d
endrep - vs 0 0 -1 0 n/d
loop - vs 0 0 1 0 n/d
endloop - vs 0 0 -1 0 n/d
break - vs 0 0 0 0 n/d
break_comp - vs 0 1, -1 0 0 n/d
breakp - vs 0 0 0 0 n/d
call - vs 0 0 0 1 n/d
callnz bool - vs 0 0 0 1 n/d
callnz pred - vs 0 1 0 1 n/d
ret - vs 0 -1 (callnz pred - vs) 0 -1 n/d
setp_comp - vs 0 0 0 0 n/d

 

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 com 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ção 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/d
if_comp - vs 0 1 0 0 n/d
if pred - vs 0 1 0 0 n/d
else - vs 0 0 0 0 n/d
endif - vs -1(if bool - vs) -1(se for anterior - vs ou if_comp - vs) 0 0 n/d
rep - vs 0 0 1 0 n/d
endrep - vs 0 0 -1 0 n/d
loop - vs 0 0 1 0 n/d
endloop - vs 0 0 -1 0 n/d
break - vs 0 0 0 0 n/d
break_comp - vs 0 1, -1 0 0 n/d
breakp - vs 0 0 0 0 n/d
call - vs 0 0 0 1 n/d
callnz bool - vs 0 0 0 1 n/d
callnz pred - vs 0 1 0 1 n/d
ret - vs 0 -1 (callnz pred - vs) 0 -1 n/d
setp_comp - vs 0 0 0 0 n/d

 

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 com 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ção 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/d
if_comp - vs 0 1 0 0 n/d
se pred - vs 0 1 0 0 n/d
else - vs 0 0 0 0 n/d
endif - vs -1(if bool - vs) -1(if pred - vs ou if_comp - vs) 0 0 n/d
rep - vs 0 0 1 0 n/d
endrep - vs 0 0 -1 0 n/d
loop - vs 0 0 1 0 n/d
endloop - vs 0 0 -1 0 n/d
break - vs 0 0 0 0 n/d
break_comp - vs 0 1, -1 0 0 n/d
breakp - vs 0 0 0 0 n/d
call - vs 0 0 0 1 n/d
callnz bool - vs 0 0 0 1 n/d
callnz pred - vs 0 1 0 1 n/d
ret - vs 0 -1 (callnz pred - vs) 0 -1 n/d
setp_comp - vs 0 0 0 0 n/d

 

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

 

Instruções de sombreador de vértice