Udostępnij przez


Limity zagnieżdżania sterowania przepływem

Instrukcje sterowania przepływem cieniowania wierzchołków mają dwa specjalne ograniczenia. Głębokość zagnieżdżania ogranicza liczbę instrukcji, które mogą być wywoływane wewnątrz siebie. Ponadto każda instrukcja ma liczbę miejsc instrukcji, która ma zastosowanie do maksymalnej liczby instrukcji, które może obsługiwać cieniator.

Nuta

Jeśli używasz profilów cieniowania *_4_0_level_9_x HLSL, niejawnie używasz profilów Shader Model 2.x do obsługi sprzętu obsługującego usługę Direct3D 9. Profile Shader Model 2.x obsługują bardziej ograniczone zachowanie sterowania przepływem niż profile Shader Model 4.x i nowsze.

 

Liczba głębokości na instrukcję dla vs_2_0

Każda instrukcja jest liczone względem co najmniej jednego limitu głębokości zagnieżdżania. W tej tabeli przedstawiono liczbę głębokości, którą każda instrukcja dodaje lub odejmuje z istniejącej głębokości:

Polecenie Zagnieżdżanie statyczne Dynamiczne zagnieżdżanie zagnieżdżanie pętli/powtórzeń zagnieżdżanie wywołań Liczba przepływów statycznych
jeśli wartość logiczna — vs 0 0 0 0 1
if_comp — vs N/a N/a N/a N/a N/a
, jeśli jest wstępnie pred — vs N/a N/a N/a N/a N/a
else — vs 0 0 0 0 1(jeśli wartość logiczna — a tylko)
endif — vs -1 0 0 0 0
rep — vs 0 0 1 0 1
endrep — vs 0 0 -1 0 0
pętla — vs 0 0 1 0 1
endloop — vs 0 0 -1 0 0
przerwanie — a N/a N/a N/a N/a N/a
break_comp — a N/a N/a N/a N/a N/a
breakp — vs N/a N/a N/a N/a N/a
wywołanie — vs 0 0 0 1 1
callnz bool — vs 0 0 0 1 1
pred callnz — 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

 

Głębokość zagnieżdżania

Głębokość zagnieżdżania określa, ile instrukcji można wywołać wewnątrz siebie. Każdy typ instrukcji ma co najmniej jeden limit zagnieżdżania:

Typ instrukcji Maksimum
Zagnieżdżanie statyczne Tylko ograniczone przez liczbę statycznych przepływów
Dynamiczne zagnieżdżanie N/a
zagnieżdżanie pętli/powtórzeń 1
zagnieżdżanie wywołań 1
Liczba przepływów statycznych 16

 

Liczba głębokości na instrukcję dla vs_2_x

Każda instrukcja jest liczone względem co najmniej jednego limitu głębokości zagnieżdżania. W tej tabeli przedstawiono liczbę głębokości, którą każda instrukcja dodaje lub odejmuje z istniejącej głębokości:

Polecenie Zagnieżdżanie statyczne Dynamiczne zagnieżdżanie zagnieżdżanie pętli/powtórzeń zagnieżdżanie wywołań Liczba przepływów statycznych
jeśli wartość logiczna — vs 1 0 0 0 1
if_comp — vs 0 1 0 0 0
, jeśli jest wstępnie pred — vs 0 1 0 0 0
else — vs 0 0 0 0 1(jeśli wartość logiczna — a tylko)
endif — vs -1(if bool - vs) -1(, jeśli pred - vs lub if_comp - vs) 0 0 0
rep — vs 0 0 1 0 1
endrep — vs 0 0 -1 0 0
pętla — vs 0 0 1 0 1
endloop — vs 0 0 -1 0 0
przerwanie — a 0 0 0 0 0
break_comp — a 0 1, -1 0 0 0
breakp — vs 0 0 0 0 0
wywołanie — vs 0 0 0 1 1
callnz bool — vs 0 0 0 1 1
pred callnz — vs 0 1 0 1 0
ret — vs 0 -1 (callnz pred - vs) 0 -1 0
setp_comp — vs 0 0 0 0 0

 

Głębokość zagnieżdżania

Głębokość zagnieżdżania określa, ile instrukcji można wywołać wewnątrz siebie. Każdy typ instrukcji ma co najmniej jeden limit zagnieżdżania:

Typ instrukcji Maksimum
Zagnieżdżanie statyczne Tylko ograniczone przez liczbę statycznych przepływów
Dynamiczne zagnieżdżanie 0 lub 24, zobacz D3DCAPS9. VS20Caps.DynamicFlowControlDepth
zagnieżdżanie pętli/powtórzeń Od 1 do 4, zobacz D3DCAPS9. VS20Caps.StaticFlowControlDepth
zagnieżdżanie wywołań Od 1 do 4, zobacz D3DCAPS9. VS20Caps.StaticFlowControlDepth (niezależny od limitu pętli/rep)
Liczba przepływów statycznych 16

 

Liczba głębokości na instrukcję dla vs_2_sw

Każda instrukcja jest liczone względem co najmniej jednego limitu głębokości zagnieżdżania. W tej tabeli przedstawiono liczbę głębokości, którą każda instrukcja dodaje lub odejmuje z istniejącej głębokości:

Polecenie Zagnieżdżanie statyczne Dynamiczne zagnieżdżanie zagnieżdżanie pętli/powtórzeń zagnieżdżanie wywołań Liczba przepływów statycznych
jeśli wartość logiczna — vs 1 0 0 0 N/a
if_comp — vs 0 1 0 0 N/a
, jeśli jest wstępnie pred — vs 0 1 0 0 N/a
else — vs 0 0 0 0 N/a
endif — vs -1(if bool - vs) -1(, jeśli pred - vs lub if_comp - vs) 0 0 N/a
rep — vs 0 0 1 0 N/a
endrep — vs 0 0 -1 0 N/a
pętla — vs 0 0 1 0 N/a
endloop — vs 0 0 -1 0 N/a
przerwanie — a 0 0 0 0 N/a
break_comp — a 0 1, -1 0 0 N/a
breakp — vs 0 0 0 0 N/a
wywołanie — vs 0 0 0 1 N/a
callnz bool — vs 0 0 0 1 N/a
pred callnz — 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

 

Głębokość zagnieżdżania

Głębokość zagnieżdżania określa, ile instrukcji można wywołać wewnątrz siebie. Każdy typ instrukcji ma co najmniej jeden limit zagnieżdżania:

Typ instrukcji Maksimum
Zagnieżdżanie statyczne 24
Dynamiczne zagnieżdżanie 24
zagnieżdżanie pętli/powtórzeń 4
zagnieżdżanie wywołań 4
Liczba przepływów statycznych Brak limitu

 

Liczba głębokości na instrukcję dla vs_3_0

Każda instrukcja jest liczone względem co najmniej jednego limitu głębokości zagnieżdżania. W tej tabeli przedstawiono liczbę głębokości, którą każda instrukcja dodaje lub odejmuje z istniejącej głębokości:

Polecenie Zagnieżdżanie statyczne Dynamiczne zagnieżdżanie zagnieżdżanie pętli/powtórzeń zagnieżdżanie wywołań Liczba przepływów statycznych
jeśli wartość logiczna — vs 1 0 0 0 N/a
if_comp — vs 0 1 0 0 N/a
, jeśli jest wstępnie pred — vs 0 1 0 0 N/a
else — vs 0 0 0 0 N/a
endif — vs -1(if bool - vs) -1(, jeśli pred - vs lub if_comp - vs) 0 0 N/a
rep — vs 0 0 1 0 N/a
endrep — vs 0 0 -1 0 N/a
pętla — vs 0 0 1 0 N/a
endloop — vs 0 0 -1 0 N/a
przerwanie — a 0 0 0 0 N/a
break_comp — a 0 1, -1 0 0 N/a
breakp — vs 0 0 0 0 N/a
wywołanie — vs 0 0 0 1 N/a
callnz bool — vs 0 0 0 1 N/a
pred callnz — 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

 

Głębokość zagnieżdżania

Głębokość zagnieżdżania określa, ile instrukcji można wywołać wewnątrz siebie. Każdy typ instrukcji ma co najmniej jeden limit zagnieżdżania:

Typ instrukcji Maksimum
Zagnieżdżanie statyczne 24
Dynamiczne zagnieżdżanie 24
zagnieżdżanie pętli/powtórzeń 4
zagnieżdżanie wywołań 4
Liczba przepływów statycznych Brak limitu

 

Liczba głębokości na instrukcję dla vs_3_sw

Każda instrukcja jest liczone względem co najmniej jednego limitu głębokości zagnieżdżania. W tej tabeli przedstawiono liczbę głębokości, którą każda instrukcja dodaje lub odejmuje z istniejącej głębokości:

Polecenie Zagnieżdżanie statyczne Dynamiczne zagnieżdżanie zagnieżdżanie pętli/powtórzeń zagnieżdżanie wywołań Liczba przepływów statycznych
jeśli wartość logiczna — vs 1 0 0 0 N/a
if_comp — vs 0 1 0 0 N/a
, jeśli jest wstępnie pred — vs 0 1 0 0 N/a
else — vs 0 0 0 0 N/a
endif — vs -1(if bool - vs) -1(, jeśli pred - vs lub if_comp - vs) 0 0 N/a
rep — vs 0 0 1 0 N/a
endrep — vs 0 0 -1 0 N/a
pętla — vs 0 0 1 0 N/a
endloop — vs 0 0 -1 0 N/a
przerwanie — a 0 0 0 0 N/a
break_comp — a 0 1, -1 0 0 N/a
breakp — vs 0 0 0 0 N/a
wywołanie — vs 0 0 0 1 N/a
callnz bool — vs 0 0 0 1 N/a
pred callnz — 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

 

Głębokość zagnieżdżania

Głębokość zagnieżdżania określa, ile instrukcji można wywołać wewnątrz siebie. Każdy typ instrukcji ma co najmniej jeden limit zagnieżdżania:

Typ instrukcji Maksimum
Zagnieżdżanie statyczne 24
Dynamiczne zagnieżdżanie 24
zagnieżdżanie pętli/powtórzeń 4
zagnieżdżanie wywołań 4
Liczba przepływów statycznych Brak limitu

 

instrukcje cieniowania wierzchołków