Coût de l’application des states au Device

Changer l’état (state) du device que ce soit pour le texture stage, le render stage ou autre … a un coût. Ce post vise a les expliciter afin que vous puissiez fournir à vos application une gestion intelligente qui évitera de changer les états quand il y’en a pas besoin, réduira le nombre de changements et surtout qui va regrouper l’affichage des objets par état… 


 Voici les différents états applicables au device et leur coût (classés du plus important au plus faible) :


 

API Call

Avg # of Cycles

  SetVertexDeclaration  

  SetFVF

  SetVertexShader

  SetPixelShader

  SPECULARENABLE

  SetRenderTarget

  SetPixelShaderConstant (1 Constant)

  NORMALIZENORMALS  

  LightEnable

  SetStreamSource

  LIGHTING

  DIFFUSEMATERIALSOURCE  

  AMBIENTMATERIALSOURCE

  COLORVERTEX

  SetLight

  SetTransform

  SetIndices

  AMBIENT

  SetTexture

  SPECULARMATERIALSOURCE

  EMISSIVEMATERIALSOURCE

  SetMaterial

  ZENABLE

  WRAP0

  MINFILTER

  MAGFILTER  

  SetVertexShaderConstant (1 Constant)  

  COLOROP

  COLORARG2

  COLORARG1  

  CULLMODE

  CLIPPING

  DrawIndexedPrimitive

  ADDRESSV

  ADDRESSU  

  DrawPrimitive  

  SRGBTEXTURE  

  STENCILMASK

  STENCILZFAIL  

  STENCILREF

  ALPHABLENDENABLE  

  STENCILFUNC

  STENCILWRITEMASK

  STENCILFAIL

  ZFUNC

  ZWRITEENABLE

  STENCILENABLE

  STENCILPASS

  SRCBLEND

  TWOSIDEDSTENCILMODE

  ALPHATESTENABLE

  ALPHAREF

  ALPHAFUNC  

  DESTBLEND

  COLORWRITEENABLE  

  CCW_STENCILFAIL

  CCW_STENCILPASS

  CCW_STENCILZFAIL

  SCISSORTESTENABLE  

  CCW_STENCILFUNC  

  SetScissorRect

  6500 – 11250

  6400 – 11200

  3000 – 12100

  6300 – 7000

  1900 – 11200

  6000 – 6250

  1500 – 9000

  2200 – 8100

  1300 – 9000

  3700 – 5800

  1700 – 7500

  900 – 8300

  900 – 8200

  800 – 7800

  2200 – 5100

  3200 – 3750

  900 – 5600

  1150 – 4800

  2500 – 3100

  900 – 4600

  900 – 4500

  1000 – 3700

  700 – 3900

  1600 – 2700

  1700 – 2500

  1700 – 2400

  1000 – 2700

  1500 – 2100

  1300 – 2000

  1300 – 1980

  500 – 2570

  500 – 2550

  1200 – 1400

  1090 – 1500

  1070 – 1500

  1050 – 1150

  150 – 1500

  570 – 700

  500 – 800

  550 – 700

  550 – 700

  560 – 680

  520 – 700

  500 – 750

  510 – 700

  520 – 680

  540 – 650

  560 – 630

  500 – 685

  450 – 590

  470 – 525

  460 – 530

  450 – 540

  475 – 510

  465 – 515

  340 – 560

  340 – 545

  330 – 495

  375 – 440

  250 – 480

  150 – 340


 


Conclusion 


 On evite les


 device.VertexDeclaration = …


en masse :) 


[Soon]


Valentin 


 

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>