Compartir a través de


Límites de anidamiento del control de flujo

Las instrucciones de control de flujo del sombreador de vértices tienen dos restricciones especiales. Las profundidades de anidamiento restringen el número de instrucciones que se pueden llamar entre sí. Además, cada instrucción tiene un recuento de ranuras de instrucción que se aplica al número máximo de instrucciones que un sombreador puede admitir.

Nota

Cuando se usan los perfiles de sombreador *_4_0_level_9_x HLSL, se usan implícitamente los perfiles del modelo de sombreador 2.x para admitir hardware compatible con Direct3D 9. Los perfiles del modelo de sombreador 2.x admiten un comportamiento de control de flujo más limitado que los perfiles del modelo de sombreador 4.x y versiones posteriores.

 

Recuento de profundidad por instrucción para vs_2_0

Cada instrucción cuenta con uno o varios límites de profundidad de anidamiento. En esta tabla se muestra el recuento de profundidad que cada instrucción agrega o resta de la profundidad existente:

Instrucción Anidamiento estático Anidamiento dinámico anidamiento de bucles o rep anidamiento de llamadas Recuento de flujos estáticos
if bool - vs 0 0 0 0 1
if_comp: frente a N/D N/D N/D N/D N/D
si está pred : frente a 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
bucle: frente a 0 0 1 0 1
endloop: vs 0 0 -1 0 0
break: frente a N/D N/D N/D N/D N/D
break_comp: frente a 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: frente a N/D N/D N/D N/D N/D

 

Profundidad de anidamiento

La profundidad de anidamiento define cuántas instrucciones se pueden llamar entre sí. Cada tipo de instrucción tiene uno o varios límites de anidamiento:

Tipo de instrucción Máximo
Anidamiento estático Solo limitado por el recuento de flujos estáticos
Anidamiento dinámico N/D
anidamiento de bucle/rep 1
anidamiento de llamadas 1
Recuento de flujos estáticos 16

 

Recuento de profundidad por instrucción para vs_2_x

Cada instrucción cuenta con uno o varios límites de profundidad de anidamiento. En esta tabla se muestra el recuento de profundidad que cada instrucción agrega o resta de la profundidad existente:

Instrucción Anidamiento estático Anidamiento dinámico anidamiento de bucle/rep anidamiento de llamadas Recuento de flujos estáticos
if bool - vs 1 0 0 0 1
if_comp: frente a 0 1 0 0 0
si está pred : frente a 0 1 0 0 0
else - vs 0 0 0 0 1(if bool - vs only)
endif : vs -1(if bool - vs) -1(si está pred - vs o if_comp - vs) 0 0 0
rep - vs 0 0 1 0 1
endrep - vs 0 0 -1 0 0
bucle: frente a 0 0 1 0 1
endloop: vs 0 0 -1 0 0
break: vs 0 0 0 0 0
break_comp: frente a 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 : frente a 0 -1 (callnz pred - vs) 0 -1 0
setp_comp: frente a 0 0 0 0 0

 

Profundidad de anidamiento

La profundidad de anidamiento define cuántas instrucciones se pueden llamar entre sí. Cada tipo de instrucción tiene uno o varios límites de anidamiento:

Tipo de instrucción Máximo
Anidamiento estático Solo limitado por el número de flujos estáticos
Anidamiento dinámico 0 o 24, consulte D3DCAPS9. VS20Caps.DynamicFlowControlDepth
anidamiento de bucles o rep De 1 a 4, consulte D3DCAPS9. VS20Caps.StaticFlowControlDepth
anidamiento de llamadas De 1 a 4, consulte D3DCAPS9. VS20Caps.StaticFlowControlDepth (independiente del límite de bucle o rep)
Recuento de flujos estáticos 16

 

Recuento de profundidad por instrucción para vs_2_sw

Cada instrucción cuenta con uno o varios límites de profundidad de anidamiento. En esta tabla se muestra el recuento de profundidad que cada instrucción agrega o resta de la profundidad existente:

Instrucción Anidamiento estático Anidamiento dinámico anidamiento de bucles o rep anidamiento de llamadas Recuento de flujos estáticos
if bool - vs 1 0 0 0 N/D
if_comp: frente a 0 1 0 0 N/D
si está pred : frente a 0 1 0 0 N/D
else: vs 0 0 0 0 N/D
endif: vs -1(if bool - vs) -1(si está 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
bucle: frente a 0 0 1 0 N/D
endloop: vs 0 0 -1 0 N/D
break: vs 0 0 0 0 N/D
break_comp: frente a 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: frente a 0 0 0 0 N/D

 

Profundidad de anidamiento

La profundidad de anidamiento define cuántas instrucciones se pueden llamar entre sí. Cada tipo de instrucción tiene uno o varios límites de anidamiento:

Tipo de instrucción Máximo
Anidamiento estático 24
Anidamiento dinámico 24
anidamiento de bucle/rep 4
anidamiento de llamadas 4
Recuento de flujos estáticos Sin límite

 

Recuento de profundidad por instrucción para vs_3_0

Cada instrucción cuenta con uno o varios límites de profundidad de anidamiento. En esta tabla se muestra el recuento de profundidad que cada instrucción agrega o resta de la profundidad existente:

Instrucción Anidamiento estático Anidamiento dinámico anidamiento de bucle/rep anidamiento de llamadas Recuento de flujos estáticos
if bool - vs 1 0 0 0 N/D
if_comp: frente a 0 1 0 0 N/D
si está pred : frente a 0 1 0 0 N/D
else - vs 0 0 0 0 N/D
endif : vs -1(if bool - vs) -1(si está 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
bucle: frente a 0 0 1 0 N/D
endloop: vs 0 0 -1 0 N/D
break: vs 0 0 0 0 N/D
break_comp: frente a 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: frente a 0 0 0 0 N/D

 

Profundidad de anidamiento

La profundidad de anidamiento define cuántas instrucciones se pueden llamar entre sí. Cada tipo de instrucción tiene uno o varios límites de anidamiento:

Tipo de instrucción Máximo
Anidamiento estático 24
Anidamiento dinámico 24
anidamiento de bucles o rep 4
anidamiento de llamadas 4
Recuento de flujos estáticos Sin límite

 

Recuento de profundidad por instrucción para vs_3_sw

Cada instrucción cuenta con uno o varios límites de profundidad de anidamiento. En esta tabla se muestra el recuento de profundidad que cada instrucción agrega o resta de la profundidad existente:

Instrucción Anidamiento estático Anidamiento dinámico anidamiento de bucles o rep anidamiento de llamadas Recuento de flujos estáticos
if bool - vs 1 0 0 0 N/D
if_comp: frente a 0 1 0 0 N/D
si está pred : frente a 0 1 0 0 N/D
else: vs 0 0 0 0 N/D
endif: vs -1(if bool - vs) -1(si está 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
bucle: frente a 0 0 1 0 N/D
endloop: vs 0 0 -1 0 N/D
break: frente a 0 0 0 0 N/D
break_comp: frente a 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 : frente a 0 -1 (callnz pred - vs) 0 -1 N/D
setp_comp: frente a 0 0 0 0 N/D

 

Profundidad de anidamiento

La profundidad de anidamiento define cuántas instrucciones se pueden llamar entre sí. Cada tipo de instrucción tiene uno o varios límites de anidamiento:

Tipo de instrucción Máximo
Anidamiento estático 24
Anidamiento dinámico 24
anidamiento de bucles o rep 4
anidamiento de llamadas 4
Recuento de flujos estáticos Sin límite

 

Instrucciones del sombreador de vértices