liebe > Nicht ganz, am Anfang wars umgekehrt. Da gab es API Funktionen, die
> > dann von den Chips in Silizium gegossen wurden.
>
> Noe. Die Hardware stellt bestimmte Funktionen zur Verfuegung. Diese
> Funktionen werden dann von Software angesteuert. Frueher hat man
> teilweise direkt darauf zugegriffen (gutes Beispiel sind noch EGA
> Karten, die noch direkt angesprochen wurden). Das wurde mittlerweile
> durch standardisierte APIs ersetzt, die aber das gleiche machen wie
> frueher die direkten Zugriffe, nur dass das jetzt Zentral durch das
> OS verwaltet wird, und nicht mehr, so wie frueher, von jedem Prozess
> selbst.
Die 2D Beschleuniger sind damals gekommen, weil die ersten GUIs
gewisse Apis hatten. Hier wurde das Silizium daran angepasst. Bevor
die GUIs nicht existierten gab es doch keine 2D Beschleuniger (von
den teuren Karten mit CPUs fürs CAD mal abgesehen). Meine alte
Trident war nichts anderes als ein in Häppchen einblendbarer
Framebuffer. Mit Windows 3.x kam dann meine S3 und die konnte schon
einiges. Wobei ich aber jetzt nicht beschwören will, was zuerst war,
es erscheint mir nur logischer, da die Karten vorher gar keine
Notwendigkeit hatten etwas mit Silizium zu Beschleunigen. Die Dinger
hiessen ja auch Windows Beschleuniger (Obwohl sie auch meinem OS2
gehörig unter die Arme griffen).
> Das ist aber kein Problem der GraKa, das ist ein Problem der Libs,
> bzw. des OS. Die Graka kennt keine Prozesse und sie kann auch nicht
> virtualisieren. Das muss die Software machen, welche die GraKa
> ansteuert. Und diese koennen garantiert virtualisieren, denn sonst
> koenntest du nichtmal ein OGL bzw D3D Programm im Fenster laufen
> lassen.
Jede Lib für sich kann ihre Clients natürlich virtualisiert
verwalten, das stimmt. Es fehlt aber die übergeordnete Instanz
> > Für die 3D Ausgabe muss die Graka initialisiert werden, wenn OGL und
> > D3D das anders machen und dann auf den Zustand vertrauen, dann kann
> > einer nicht mit dem anderen.
>
> Da schreibst du aber selbst jetzt dass das ein Problem der Software
> ist, weil die u.U. bestimmte Annahmen ueber den Zustand machen.
Das ist hart! Das muss von der Hardware unterstützt werden, sonst
wirds lahm. Oder willst Du vor jedem Grafikprimitiv das vollständige
Set an Initialisierungen für Deine Lib übertragen, oder testen, obs
noch passt? Wär ja wie wenn Du bei jedem Speicherzugriff explizit
prüfen musst, ob die Seite eingelagert ist, oder nicht. Vor allem
vergeht Zeit zwischen Prüfung und Ausführung. In der Zeit kann es
schon wieder anders sein. Also mit Spinlocks absichern. Das bei jedem
Primitiv! Ich glaube ich muss nicht erklären, was dies für die
Performance bedeutet.
Die andere Variante wäre, dass man eine übergeordnete Instanz bildet,
die erstens die Primitive serialisiert und so sicherstellt, dass es
keine Gleichzeitigkeiten gibt und hier die Libs im Timesharing
betreibt, damit es nicht soo kritisch wird. Ist aber ein Nadelöhr und
kostet auch Performance.
Eine weiter Möglichkeit ist: Du bildest eine Lib auf die andere ab.
Das ist das was MS in Vista macht. Hier wird natürlich OGL auf D3D
abgebildet.
Die einzige performante Möglichkeit bleibt IMHO die Virtualisierung
auf Hardwarebene. Also die Karte stellt so etwas wie HT zur
Verfügung. Mehrere Registersets, wo jede Lib ein anderes zugesprochen
bekommt und dort per Multitasking reinschreiben kann. Eine kleine MMU
zur Verwaltung des Speichers (Karte und zugreifbarer Hauptspeicher).
Ist die Frage ob es jemals dazu kommt.
> Tatsaechlich darf in einer Multitaskingumgebung keine derartige
> Annahme gemacht werden. Mittlerweile funktioniert das auch bei den
> meisten Spielen dass man mit ALT-TAB wegschalten kann, was eben zeigt
> dass das KEIN Problem der Hardware ist.
Alt-Tab, bei Fullscreen Games ist aber kein Multitasking!
Multitasking ist, wenn zwei Apps im Fenster laufen und gleichzeitig
(also SMP, SMT oder DC Maschinen) die Karte mit unterschiedlicher Lib
brauchen.
> > Das ist schon klar. Wobei die Hardware aber sehr nahe an den
> > Standards dran ist, damit man hier keine Performance verschenkt. Der
>
> Ja sicher. Die Hardware wird ja auch in der Regel gemeinsam mit der
> Softwareentwicklung abgestimmt. MS entwickelt nicht DX15 ins Blaue
> rein, sondern spricht das mit Nvidia, ATI und diversen anderen ab.
> Und die entwickeln natuerlich auch nicht ins Blaue rein.
Ist ein Henne Ei Problem, das stimmt. Wobei aber MS bei D3D den Ton
angibt, wärend die Hersteller bei OGL den Ton angeben (mit ihren
Extensions, die aber nicht unbedingt verwendet werden).
> > Gemischt dürfte nicht gehen, da die Resource Graka nur einmal zur
> > Verfügung steht. Du kannst auch nur ein Programm haben, das gerade
> > scannt und nicht drei oder vier wild durcheinanderscannen lassen (mit
> > einem Scanner). Jedenfalls ist das die Argumentation unter Vista.
> > Hier wird OGL auf D3D übersetzt, weil die GUI per D3D gerendert wird.
>
> Ich muss das mal probieren. Sollte nicht so schwer sein, da es eh
> genug Demos gibt. Das teste ich mal, weil ich mich bisher immer nur
> mit OGL beschaeftigt habe. Aber ich denke eher dass dieses “Argument”
> schlicht und einfach darauf abzielt Unfrieden zu stiften und OGL mies
> zu machen. MS ist ausgestiegen aus dem OGL Gremium und
> ueberraschenderweise konnte man bereits kurz danach die neue Version
> verabschieden. Etwas das dauernd verzoegert wurde solange MS mit drin
> war. OGL ist MS ein Dorn im Auge und natuerlich versuchen die DX zu
> forcieren um ihren eigenen Standard zu forcieren. Schon alleine
> deshalb weil das auch mit ein Schuss gegen Linux ist. Spiele die
> unter OGL laufen, koennen leichter nach Linux portiert werden, und
> das ist ja auch schon geschehen. Ausserdem koennen die leichter unter
> Wine zum laufen gebracht werden.
Das MS sicher mehrere Ziele verfolgt ist klar. Aber ich glaube nicht
mal, dass es absichtlich war. Dass die GUI mit 3D gerendert wird, war
überfällig (hat mich schon lange gewundert, warum das nicht gemacht
wird) und das MS hier D3D nimmt und nicht OGL verwundert auch nicht.
Insofern ist der Wrapper auf D3D doch sogar ein Fortschritt. Bisher
hat MS doch einen Softwarerenderer für OGL ausgeliefert.
> > Wenn OGL und D3D jeweil die volle Graka nutzen, dann ist das sicher
> > ein Problem. Abgesehen von der Speichergrösse ist ja auch der
> > Adressraum zu beschränkt. Wenn jeder an Adresse 0 seine erste Textur
> > legen will, kommt da Käse raus. Es fehlt eben die übergelagerte
> > Virtualisierung, wie sie bei einer CPU durch die MMU und ihr Pageing
> > erreicht wird.
>
> In dem Fall haettest du staendig flushes, was extrem Performance
> frisst weil die Texturebearbeitung die meiste Bandbreite beansprucht.
Wenn die GPU eine MMU hat, dann braucht man ja nicht soviel flushen,
weil die virtuellen Adressen (die für jeden gleich sind), werden auf
das Memory übersetzt und die Libs können koexistieren ohne sich
gegenseitig zu beeinflussen. Einzig, wenn man eine 256MB Karte hat
und jede Lib will 256 MB an Texturen reinquetschen wirds kritisch.
Das könnte man aber mit einem Paging Algo auch erledigen. Wobei man
das dann eher Cache nennen könnte. Solche Karten gibt es eh schon,
die haben aber keine vernünftigen Speichergrössen onboard. Wenn man
das aber mit 128MB oder noch mehr macht, dann sollte das nicht mehr
so auffallen.
Rashim