Einzelnen Beitrag anzeigen

schty

Registriert seit: 13. Dez 2003
5 Beiträge
 
Delphi 6 Personal
 
#3

Re: Alphablending mit MMX / SSE Befehle

  Alt 13. Dez 2003, 16:55
Was die absolute Geschwindigkeit angeht, zum Vergleich mit deiner Code, kann ich noch keine genaue Aussagen machen, dafuer fehlt mir noch ein Testprogramm.... ich bin etwas unsicher ueber die Instruction Pairing und SSE Optimierungen usw., ich bin keine Experte. z.B. laut Intel sollte man mit PSHUFW (SSE) gegenueber nur MMX-Befehle 2 Befehle einsparen koennen, ich habe aber nur einer eingespart:

Delphi-Quellcode:
 
// mit PSHUFW (SSE):
 MOVD MM3, ECX
// MM3 = 00 00 00 00 00 00 00 AA 32 BITS -> 64 BITS Alpha
 PSHUFW MM3, MM3, 0
// MM3 = 00 AA 00 AA 00 AA 00 AA

// in MMX sieht das so aus:
 MOVD MM3, ECX
 PUNPCKLWD MM3, MM3
 PUNPCKLQD MM3, MM3

// Was ich eigentlich will ist alles in 1 Befehl, aber das habe ich mit Delphi nicht geschaft:
  PSHUFW MM3, [ECX], 0
// Das geht so nicht, weil mann muss 64 bits (aligned?) uebertragen....
Nun, relativ gesehen bin ich doch um die 50% schneller (auch abhaengig vom Linienlaenge) als der "Graphics32-MMX-Referenz", das hat teilweise aber auch mit der Loop-optimierung zu tun.

Ah, du hast recht. Der Faktor 256 ist nicht im Formel aufgelistet, sondern wird im Code mit den PSSLW (x256) und PSRLW (/256) Befehle geloest. Ich muss sagen dass die Ergebnisse kwalitativ doch ziemlich gut sein koennen, abhaengig vom Anruf.

Im Attachment n' schlechter GIF (in wirklichkeit arbeitet das Programm Bildfehlerfrei) von einem 4xAA Beispiel, also fuer jeden "Punkt" wird "Alphablend" 4x angerufen, vergleichbar mit "DrawLineFS in Graphics32").

Arjan
Miniaturansicht angehängter Grafiken
alphablend_example.gif  
  Mit Zitat antworten Zitat