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 |
Tópicos relacionados