Limiti di annidamento dei controlli di flusso

Le istruzioni di controllo del flusso del vertex shader hanno due restrizioni speciali. Le profondità di annidamento limitano il numero di istruzioni che possono essere chiamate tra loro. Inoltre, ogni istruzione ha un numero di slot di istruzioni che si applica al numero massimo di istruzioni che un shader può supportare.

Nota

Quando si usano i profili shader *_4_0_level_9_x HLSL, si usano in modo implicito i profili shader Model 2.x per supportare l'hardware compatibile con Direct3D 9. I profili del modello shader 2.x supportano un comportamento di controllo del flusso più limitato rispetto ai profili modello shader 4.x e versioni successive.

 

Numero di profondità per istruzione per vs_2_0

Ogni istruzione viene conteggiato rispetto a uno o più limiti di profondità annidamento. Questa tabella mostra il numero di profondità che ogni istruzione aggiunge o sottrae dalla profondità esistente:

Istruzione Annidamento statico Annidamento dinamico annidamento loop/rep annidamento delle chiamate Conteggio dei flussi statici
se bool - vs 0 0 0 0 1
if_comp - vs n/d n/d n/d n/d n/d
se pred - vs n/d n/d n/d n/d n/d
else - vs 0 0 0 0 1(se bool - solo vs )
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

 

Profondità annidamento

La profondità di annidamento definisce il numero di istruzioni che è possibile chiamare tra loro. Ogni tipo di istruzione ha uno o più limiti di annidamento:

Tipo di istruzione Massimo
Annidamento statico Limitato solo dal numero di flussi statici
Annidamento dinamico n/d
annidamento loop/rep 1
annidamento delle chiamate 1
Conteggio dei flussi statici 16

 

Numero di profondità per istruzione per vs_2_x

Ogni istruzione viene conteggiato rispetto a uno o più limiti di profondità annidamento. Questa tabella mostra il numero di profondità che ogni istruzione aggiunge o sottrae dalla profondità esistente:

Istruzione Annidamento statico Annidamento dinamico annidamento loop/rep annidamento delle chiamate Conteggio dei flussi statici
se bool - vs 1 0 0 0 1
if_comp - vs 0 1 0 0 0
se pred - vs 0 1 0 0 0
else - vs 0 0 0 0 1(se bool - solo vs )
endif - vs -1(if bool - vs) -1(se pred - vs o 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
interruzione - vs 0 0 0 0 0
chiamata - 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 (pred callnz - vs) 0 -1 0
setp_comp - vs 0 0 0 0 0

 

Profondità annidamento

La profondità di annidamento definisce il numero di istruzioni che possono essere chiamate tra loro. Ogni tipo di istruzione ha uno o più limiti di annidamento:

Tipo di istruzione Massimo
Annidamento statico Solo limitato dal numero di flussi statici
Annidamento dinamico 0 o 24, vedere D3DCAPS9. VS20Caps.DynamicFlowControlDepth
ciclo/annidamento del repository Da 1 a 4, vedere D3DCAPS9. VS20Caps.StaticFlowControlDepth
annidamento delle chiamate Da 1 a 4, vedere D3DCAPS9. VS20Caps.StaticFlowControlDepth (indipendente dal ciclo/limite di rep)
Numero di flussi statici 16

 

Conteggio profondità per istruzione per vs_2_sw

Ogni istruzione conta su uno o più limiti di profondità annidamento. Questa tabella mostra il numero di profondità che ogni istruzione aggiunge o sottrae dalla profondità esistente:

Istruzione Annidamento statico Annidamento dinamico ciclo/annidamento del repository annidamento delle chiamate Numero di flussi statici
if 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(se pred - vs o if_comp - vs) 0 0 n/d
rep - vs 0 0 1 0 n/d
endrep - vs 0 0 -1 0 n/d
ciclo - vs 0 0 1 0 n/d
endloop - vs 0 0 -1 0 n/d
interruzione - vs 0 0 0 0 n/d
break_comp - vs 0 1, -1 0 0 n/d
interruzione - vs 0 0 0 0 n/d
chiamata - 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 (pred callnz - vs) 0 -1 n/d
setp_comp - vs 0 0 0 0 n/d

 

Profondità annidamento

La profondità di annidamento definisce il numero di istruzioni che possono essere chiamate tra loro. Ogni tipo di istruzione ha uno o più limiti di annidamento:

Tipo di istruzione Massimo
Annidamento statico 24
Annidamento dinamico 24
ciclo/annidamento del repository 4
annidamento delle chiamate 4
Numero di flussi statici Nessun limite

 

Conteggio profondità per istruzione per vs_3_0

Ogni istruzione conta su uno o più limiti di profondità annidamento. Questa tabella mostra il numero di profondità che ogni istruzione aggiunge o sottrae dalla profondità esistente:

Istruzione Annidamento statico Annidamento dinamico ciclo/annidamento del repository annidamento delle chiamate Numero di flussi statici
if 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(se pred - vs o if_comp - vs) 0 0 n/d
rep - vs 0 0 1 0 n/d
endrep - vs 0 0 -1 0 n/d
ciclo - vs 0 0 1 0 n/d
endloop - vs 0 0 -1 0 n/d
interruzione - vs 0 0 0 0 n/d
break_comp - vs 0 1, -1 0 0 n/d
interruzione - vs 0 0 0 0 n/d
chiamata - 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 (pred callnz - vs) 0 -1 n/d
setp_comp - vs 0 0 0 0 n/d

 

Profondità annidamento

La profondità di annidamento definisce il numero di istruzioni che possono essere chiamate tra loro. Ogni tipo di istruzione ha uno o più limiti di annidamento:

Tipo di istruzione Massimo
Annidamento statico 24
Annidamento dinamico 24
ciclo/annidamento del repository 4
annidamento delle chiamate 4
Numero di flussi statici Nessun limite

 

Conteggio profondità per istruzione per vs_3_sw

Ogni istruzione conta su uno o più limiti di profondità annidamento. Questa tabella mostra il numero di profondità che ogni istruzione aggiunge o sottrae dalla profondità esistente:

Istruzione Annidamento statico Annidamento dinamico ciclo/annidamento del repository annidamento delle chiamate Numero di flussi statici
if 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(se pred - vs o if_comp - vs) 0 0 n/d
rep - vs 0 0 1 0 n/d
endrep - vs 0 0 -1 0 n/d
ciclo - vs 0 0 1 0 n/d
endloop - vs 0 0 -1 0 n/d
interruzione - vs 0 0 0 0 n/d
break_comp - vs 0 1, -1 0 0 n/d
interruzione - vs 0 0 0 0 n/d
chiamata - 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 (pred callnz - vs) 0 -1 n/d
setp_comp - vs 0 0 0 0 n/d

 

Profondità annidamento

La profondità di annidamento definisce il numero di istruzioni che possono essere chiamate tra loro. Ogni tipo di istruzione ha uno o più limiti di annidamento:

Tipo di istruzione Massimo
Annidamento statico 24
Annidamento dinamico 24
ciclo/annidamento del repository 4
annidamento delle chiamate 4
Numero di flussi statici Nessun limite

 

Istruzioni di Vertex Shader