title: How do I improve Direct3D streaming texture performance?
body: <p>I'm trying to accelerate the drawing of a full-screen texture which changes every frame.  On my system, I can get around 1000 FPS using GDI and BitBlt(), but I thought I could improve performance by using Direct3D and dynamic textures.  Instead I'm only getting around 250 FPS.</p>
  
  <p>I'm running on a Mac Pro with an ATI HD 4870 with current drivers.</p>
  
  <p>I've tried using dynamic textures and that gives me a small gain (~15FPS) and I've tried using a texture chain to avoid pipeline stalls and that has no effect.</p>
  
  <p>I've looked around quite a bit and there's very little information on using dynamic textures this way.</p>
  
  <p>Am I missing something fundamental?</p>
  
  <p>Device Setup:</p>
  
  <pre>
  pparams.BackBufferCount = 1;
  pparams.SwapEffect = D3DSWAPEFFECT_DISCARD;
  pparams.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
  </pre>
  
  <p>Texture create:</p>
  
  <pre>
  device->CreateTexture(width, height, 1, D3DUSAGE_DYNAMIC,
                        D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &texture, NULL);
  </pre>
  
  <p>Texture update:</p>
  
  <pre>
  texture->LockRect(0, &locked, NULL, D3DLOCK_DISCARD);
  ... write texture data
  texture->UnlockRect(0);
  device->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, vertices, sizeof(*vertices));
  ...
  </pre>
  
  <p>You can get the work in progress code from
  <a href="http://www.libsdl.org/tmp/SDL-1.3.zip" rel="nofollow">http://www.libsdl.org/tmp/SDL-1.3.zip</a></p>
  
  <p>Thanks!</p>