amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > Grösse Grafikkartenspeicher unter CGX erfragen [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2008-02-19, 14:01 h

Wolfen
Posts: 62
User
Hallo Zusammen,

ich möchte bei ToT gerne eine Routine einbauen, die die Menge des Grafikkartenspeichers ermittelt um damit zu schauen ob der aktuellen Screenmode überhaupt lauffähig ist.

Unter Picasso96 und AGA ist das nun kein Problem. Aber wie macht man das unter Cybergraphics am besten und schnellsten ?

Hier sind doch viele schlaue Köpfe. Vielleicht weiß jemand Rat.

Grüsse
Wolfen

[ - Answer - Quote - Direct link - ]

2008-02-19, 16:54 h

Holger
Posts: 8116
User
Unter CGX? Gar nicht, jedenfalls nicht in classic-Versionen.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2008-02-19, 22:18 h

Wolfen
Posts: 62
User
Zitat:
Original von Holger:
Unter CGX? Gar nicht, jedenfalls nicht in classic-Versionen.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.



Die Antwort lasse ich nicht gelten :-)

Grüsse
Wolfen

[ - Answer - Quote - Direct link - ]

2008-02-24, 13:22 h

Wolfen
Posts: 62
User
Eine Möglichkeit wäre natürlich, sich die Werte in der Expansionbase herauszuholen. Leider habe ich gerade für CGX dort falsche Werte drinne stehen. Der Wert BoardSize wird bei einer Cybervision64 hier mit 64 MB angegeben, was natürlich falsch ist.

[ - Answer - Quote - Direct link - ]

2008-02-24, 17:44 h

MaikG
Posts: 5172
User
>Eine Möglichkeit wäre natürlich, sich die Werte in der Expansionbase
>herauszuholen.

Wie das?

Was nützt die Gesamtgröße wenn du nicht weisst wieviel belegt ist?
Ausserdem wenn CGX selber nicht weiss wieviel Speicher frei
ist(öffnet Screen+überschreibt anderen wenn zu groß),
kommst du da auch nicht ran...

[ - Answer - Quote - Direct link - ]

2008-02-24, 21:43 h

Wolfen
Posts: 62
User
Naja. Mir ging es erstmal nur darum die Größe des Grafikkartenspeichers abzufragen. Also zu ermitteln wieviel Grafikkarten-Speicher die akt. Grafikkarte überhaupt hat. Vielleicht habe ich mich da ja falsch ausgedrückt.

Wenn ich mich recht erinnere werden Inhalte im Grafikkartenspeicher einfach überschrieben, falls nicht genug davon vorhanden ist. Das Problem zu ermitteln ob genug Grafikkartenspeicher frei ist, ist doch Aufgabe von CGX oder P96. Oder sehe ich das etwa falsch ? Eine Kopie der Bildschirme und Bitmaps befindet sich doch im Hauptspeicher...

Mittels der Expansionbase könnte man nun ermitteln wieviel Grafikkartenspeicher die aktuelle Grafikkarte insgesamt hat. Und daraus läßt sich wieder schließen ob ein Screen bestimmter Grösse eben rein rechnerisch geht oder nicht. Da aber so Karten wie Cybervision 64 falsche Werte liefern, ist das halt auch nicht sicher. Darauf bezog sich mein Hinweis.

Nehmen wir einen Screen mit der Auflösung von 1680*1050 in 32 Bit. Dieser benötigt ca. 7 MB Grafikkartenspeicher. Will man nun Spielereien machen und braucht einen übergroßen Screen, sagen wir 1680*2100 sind es schon ca 14 MB. Alles schön und gut. AGA ausgeschlossen. Unter P96 gibt es eine Funktion, die die Grösse ermittelt. Unter CGX könnte ich mir jetzt natürlich etwas zusammenhacken. Aber der elegante bzw. "ordentliche" Weg ist mir eigentlich unbekannt.


[ - Answer - Quote - Direct link - ]

2008-02-25, 10:18 h

MaikG
Posts: 5172
User
>Wenn ich mich recht erinnere werden Inhalte im Grafikkartenspeicher
>einfach überschrieben, falls nicht genug davon vorhanden ist.


Richtig, das ist das Problem.

>Das Problem zu ermitteln ob genug Grafikkartenspeicher frei ist,
>ist doch Aufgabe von CGX oder P96. Oder sehe ich das etwa falsch ?

Das sollte so Funktionieren, wie ich aber festgestellt habe
scheint CGX dahingehend einen Bug zu haben.
Wenn ich richtig große Screens öffne wie 1600x1200x24 und
es sind z.B. 2 weitere Screens offen, ist a)der Inhalt von meinem
Screen teils müll und b) auch die Workbench wird mit müll überschrieben.


>Eine Kopie der Bildschirme und Bitmaps befindet sich doch im
>Hauptspeicher...

Ja, deswegen ist die WB auch wieder in ordnung nach einem Refresh.
Normal sollte CGX wissen wann wieviel Speicher da ist. Wenn
ich nun einen 1600x1200x24 öffne sollten andere Screens in FastMem
verlagert werden und erst bei bedarf wieder ins graka ram kommen.
Oder wenigstens sollte sich der Screen erst gar nicht öffnen lassen.


>Mittels der Expansionbase könnte man nun ermitteln wieviel
>Grafikkartenspeicher die aktuelle Grafikkarte insgesamt hat.
>Und daraus läßt sich wieder schließen ob ein Screen bestimmter
>Grösse eben rein rechnerisch geht oder nicht. Da aber so Karten
>wie Cybervision 64 falsche Werte liefern, ist das halt auch nicht
>sicher. Darauf bezog sich mein Hinweis.

Ja, ob es prinzipell klappt wäre Möglich. Wie gesagt hängt das von
den restlichen Screens auch ab.
Auf dem Amiga gibt es ja eine sehr begrenzte Anzahl von Grafikkarten.
Du könntest jetzt nach der Karten ID gehen und mit den bekannten
größen Arbeiten. CV63/3D = 4 MB. Kennt dein Programm die Karte
nicht gibts du einen Hinweiss aus und die möglichkeit es
per Tooltype selbst einzugeben.

Wie gesagt wenn CGX das nicht vernünftig managed, gibt es vermutlich
keinen sauberen Weg.

[ - Answer - Quote - Direct link - ]

2008-02-25, 11:17 h

Wolfen
Posts: 62
User
Zitat:
>Mittels der Expansionbase könnte man nun ermitteln wieviel
>Grafikkartenspeicher die aktuelle Grafikkarte insgesamt hat.
>Und daraus läßt sich wieder schließen ob ein Screen bestimmter
>Grösse eben rein rechnerisch geht oder nicht. Da aber so Karten
>wie Cybervision 64 falsche Werte liefern, ist das halt auch nicht
>sicher. Darauf bezog sich mein Hinweis.

Ja, ob es prinzipell klappt wäre Möglich. Wie gesagt hängt das von
den restlichen Screens auch ab.
Auf dem Amiga gibt es ja eine sehr begrenzte Anzahl von Grafikkarten.
Du könntest jetzt nach der Karten ID gehen und mit den bekannten
größen Arbeiten. CV63/3D = 4 MB. Kennt dein Programm die Karte
nicht gibts du einen Hinweiss aus und die möglichkeit es
per Tooltype selbst einzugeben.

Wie gesagt wenn CGX das nicht vernünftig managed, gibt es vermutlich
keinen sauberen Weg.


Naja... Eine reine Tabelle geht nun leider auch wieder nicht. Denn gerade die Cybervision 64 gab es nunmal in 2 Ausführungen. Einmal mit 2 MB und einmal mit 4 MB. Warscheinlich könnte man die Größe der Cybervision64 nun auch wieder falsch auslesen aus der Expansionbase. Sie wird dort bestimmt mit 32 MB und 64 MB gelistet. Und genau das erinnert mich dann langsam mehr an einen Hack, wie an ordentliche Programmierung.

Genau diese Sachen schwirren mir seit geraumer Zeit im Kopf herum und ich dachte ich frage mal nach bevor ich ne Routine bastle.

Gibt es weitere Grafikkarten die mit falscher Größe gelistet werden ?

@alle

Man kann den Wert ganz einfach unter ShowConfig->Boards oder in Scout unter Expansion ablesen.


[ - Answer - Quote - Direct link - ]

2008-02-25, 12:45 h

gni
Posts: 1106
User
Zitat:
Wolfen:
Der Wert BoardSize wird bei einer Cybervision64 hier mit 64 MB angegeben, was natürlich falsch ist.

Da dieser Wert nichts mit dem Grafikspeicher der Karte zu tun hat, ist deine obige Aussage falsch.

[ - Answer - Quote - Direct link - ]

2008-02-25, 14:40 h

Wolfen
Posts: 62
User
Zitat:
Original von gni:
Zitat:
Wolfen:
Der Wert BoardSize wird bei einer Cybervision64 hier mit 64 MB angegeben, was natürlich falsch ist.

Da dieser Wert nichts mit dem Grafikspeicher der Karte zu tun hat, ist deine obige Aussage falsch.

Dann kläre mich doch bitte auf womit dieser Wert etwas zu tun hat ? Ich hatte angenommen es handele sich bei Grafikkarten da um den Grafikkartenspeicher.

Du scheinst ja mehr zu wissen.


[ - Answer - Quote - Direct link - ]

2008-02-25, 15:52 h

MaikG
Posts: 5172
User
>Dann kläre mich doch bitte auf womit dieser Wert etwas zu tun hat ?
>Ich hatte angenommen es handele sich bei Grafikkarten da um den Grafikkartenspeicher.


Der Wert ist der Zorro Adressraum der von der Karte belegt wird.
Im Zorro2 Modus belegt die CV64/3D z.B. 4 MB, wenn ich mich
recht erinnere bei Zorro 3 waren das auch so 64 MB.

Du kannst ja z.B. verschiedene sachen der Karten ebenfalls
über diesen Adressraum steuern. Sagen wir nur den CV Monitorumschalter.
Oder gar bei der Picasso, da gibts ja etliche erweiterungen für.
Wenn man jetzt in einem 4 MB fenster operieren würde müsste
man ständig Multiplexen.
Da gibts bestimmt auch noch mehr Gründe die ich nicht kenne.

[ - Answer - Quote - Direct link - ]

2008-02-25, 17:04 h

Wolfen
Posts: 62
User
Na, dann fällt das natürlich komplett flach. Und wieder etwas gelernt.


[ - Answer - Quote - Direct link - ]

2008-02-25, 18:34 h

Holger
Posts: 8116
User
Zitat:
Original von Wolfen:
Mittels der Expansionbase könnte man nun ermitteln wieviel Grafikkartenspeicher die aktuelle Grafikkarte insgesamt hat. Und daraus läßt sich wieder schließen ob ein Screen bestimmter Grösse eben rein rechnerisch geht oder nicht.

"Rein rechnerisch", d.h. unter Vernachlässigung aller anderen Limitierungen, die eine Grafikkarte haben könnte...
Zitat:
Nehmen wir einen Screen mit der Auflösung von 1680*1050 in 32 Bit. Dieser benötigt ca. 7 MB Grafikkartenspeicher.
Unter der unzulässigen Annahme, du wüsstest genau, ob für die gewünschte Auflösung tatsächlich lineare BitMaps möglich sind, insb. wenn Du auch noch übergroße BitMaps anlegen willst, von denen Du nun auch wieder nicht weißt, ob der Grafikchip so etwas überhaupt unterstützt, oder ob CGX das beim Transfer vom Hauptspeicher zur Grafikkarte selbst implementiert.

Das Speicherformat kannst Du natürlich erfragen, allerdings nur für eine existierende BitMap. Und so sieht auch der einfachste Test aus: eine BitMap mit dem DISPLAYABLE Flag in der gewünschten Auflösung erzeugen, und schauen, ob es geht...

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2008-02-25, 20:12 h

Wolfen
Posts: 62
User
Zitat:
Original von Holger:
Zitat:
Original von Wolfen:
Mittels der Expansionbase könnte man nun ermitteln wieviel Grafikkartenspeicher die aktuelle Grafikkarte insgesamt hat. Und daraus läßt sich wieder schließen ob ein Screen bestimmter Grösse eben rein rechnerisch geht oder nicht.

"Rein rechnerisch", d.h. unter Vernachlässigung aller anderen Limitierungen, die eine Grafikkarte haben könnte...
Zitat:
Nehmen wir einen Screen mit der Auflösung von 1680*1050 in 32 Bit. Dieser benötigt ca. 7 MB Grafikkartenspeicher.
Unter der unzulässigen Annahme, du wüsstest genau, ob für die gewünschte Auflösung tatsächlich lineare BitMaps möglich sind, insb. wenn Du auch noch übergroße BitMaps anlegen willst, von denen Du nun auch wieder nicht weißt, ob der Grafikchip so etwas überhaupt unterstützt, oder ob CGX das beim Transfer vom Hauptspeicher zur Grafikkarte selbst implementiert.

Das Speicherformat kannst Du natürlich erfragen, allerdings nur für eine existierende BitMap. Und so sieht auch der einfachste Test aus: eine BitMap mit dem DISPLAYABLE Flag in der gewünschten Auflösung erzeugen, und schauen, ob es geht...

mfg


Dieses "Try and Error"-Prinzip finde ich aber nunmal etwas suboptimal. ToT macht genau das und genau deshalb habe ich auch gefragt ob jemand einen besseren Weg kennt.

[ - Answer - Quote - Direct link - ]

2008-02-25, 20:48 h

Holger
Posts: 8116
User
Zitat:
Original von Wolfen:
Dieses "Try and Error"-Prinzip finde ich aber nunmal etwas suboptimal. ToT macht genau das und genau deshalb habe ich auch gefragt ob jemand einen besseren Weg kennt.

Nun ja, die Antwort hast Du ja auch bekommen. Allerdings würde ich, wenn es denn um elegantes, bzw. konformes Programmieren ginge, einfach davon ausgehen, dass
a) CGX gar keine Screen-Modi anbietet, die mit der Grafikkarte nicht möglich sind
b) Der Grafikkartenspeicher darüber hinaus irrelevant ist, da CGX ja alle BitMaps im normalen RAM vorhalten kann und selbst für den aktiven Screen nur den sichtbaren Teil im Grafikkartenspeicher vorhalten muss, und für den gilt a)

Natürlich mag es sein, dass die aktuelle Version bezüglich dieser beiden Punkte nicht optimal (bzw. korrekt) funktioniert. Aber selbst dann wäre die Annahme, dass das immer so bleiben wird, unsaubere Programmierung.
Vor allem, weil es darauf hinauslaufen würde, dass die Anwendung einen Screen-Modus aufgrund einer Milchmädchenrechnung verweigert, obwohl das System diesen zu Recht angeboten hat.

Da dürfte es jedem User lieber sein, die Anwendung versucht wenigstens mal, den Modus zu benutzen, auch wenn dieser dann vielleicht aufgrund eines vom System vorher nicht beachteten Umstands (der in Deiner Rechnung wahrscheinlich dann auch fehlen würde) dann doch nicht benutzt werden kann.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2008-02-25, 23:26 h

MaikG
Posts: 5172
User
>Aber selbst dann wäre die Annahme, dass das immer so bleiben wird, unsaubere Programmierung.

Wann war gleich das letzte CGX Update?
Das war ein fix für MOS, für 68k keine verbesserung.


>Da dürfte es jedem User lieber sein, die Anwendung versucht
>wenigstens mal, den Modus zu benutzen, auch wenn dieser dann
>vielleicht aufgrund eines vom System vorher nicht beachteten
>Umstands (der in Deiner Rechnung wahrscheinlich dann auch fehlen
>würde) dann doch nicht benutzt werden kann.

Das sollte man immer per Tooltypes etc. implementieren, wenn man nicht Systemkonforme
sachen macht.

[ - Answer - Quote - Direct link - ]

2008-02-26, 00:01 h

Wolfen
Posts: 62
User
Zitat:
Original von Holger:
Zitat:
Original von Wolfen:
Dieses "Try and Error"-Prinzip finde ich aber nunmal etwas suboptimal. ToT macht genau das und genau deshalb habe ich auch gefragt ob jemand einen besseren Weg kennt.

Nun ja, die Antwort hast Du ja auch bekommen. Allerdings würde ich, wenn es denn um elegantes, bzw. konformes Programmieren ginge, einfach davon ausgehen, dass
a) CGX gar keine Screen-Modi anbietet, die mit der Grafikkarte nicht möglich sind
b) Der Grafikkartenspeicher darüber hinaus irrelevant ist, da CGX ja alle BitMaps im normalen RAM vorhalten kann und selbst für den aktiven Screen nur den sichtbaren Teil im Grafikkartenspeicher vorhalten muss, und für den gilt a)


Viel Theorie mit wenig Nährwert. Kläre mich, wenn Du es weißt, bitte darüber auf welche Werte ich bei den ASL-Screenmoderequestern setzen muß, damit ich nicht darstellbare übergroße Bitmaps abfangen kann, so daß sie gar nicht erst gelistet werden. Und das ganze bitte kompatibel zu Kick 3.0 bis hin zu OS4 und MOS. Das ASL-Screenmoderequester bis zu bestimmten AmigaOS-Versionen noch erhebliche Bugs haben, wirst Du ja sicherlich wissen.

Zitat:
Natürlich mag es sein, dass die aktuelle Version bezüglich dieser beiden Punkte nicht optimal (bzw. korrekt) funktioniert. Aber selbst dann wäre die Annahme, dass das immer so bleiben wird, unsaubere Programmierung.

Worauf beziehst Du Dich hier ? Auf CGX oder auf ToT ?

Zitat:
Vor allem, weil es darauf hinauslaufen würde, dass die Anwendung einen Screen-Modus aufgrund einer Milchmädchenrechnung verweigert, obwohl das System diesen zu Recht angeboten hat.

Gott, warum immer direkt so injuriös.

Zitat:
Da dürfte es jedem User lieber sein, die Anwendung versucht wenigstens mal, den Modus zu benutzen, auch wenn dieser dann vielleicht aufgrund eines vom System vorher nicht beachteten Umstands (der in Deiner Rechnung wahrscheinlich dann auch fehlen würde) dann doch nicht benutzt werden kann.

mfg


Das der Versuch den Screen zu öffnen und ein darauf folgender eventueller Fehlschlag noch ein kleineres Übel ist, ist mir ebenfalls klar. Du brauchst mir nicht meine Überlegungen zu erläutern.









[ - Answer - Quote - Direct link - ]

2008-02-26, 20:44 h

Holger
Posts: 8116
User
Zitat:
Original von Wolfen:
Viel Theorie mit wenig Nährwert. Kläre mich, wenn Du es weißt, bitte darüber auf welche Werte ich bei den ASL-Screenmoderequestern setzen muß, damit ich nicht darstellbare übergroße Bitmaps abfangen kann, so daß sie gar nicht erst gelistet werden. Und das ganze bitte kompatibel zu Kick 3.0 bis hin zu OS4 und MOS.

Hmm, seit wann dient der ASL-Requester dazu BitMap-Größen zu erfragen? Bislang waren wir nur bei den Screen-Modes, und die sind normalerweise darstellbar oder werden nicht angeboten. Dass Du zusätzlich die Option, eine andere Größe via ASL-Requester abzufragen, nutzt, hast Du so gar nicht gesagt. Trotzdem sollte die sichtbare sichtbare Größe eines Screen-Modes immer in den Grafikspeicher passen, und wie gesagt, die nicht sichtbaren Bereiche können ausgelagert werden.
Zitat:
Das ASL-Screenmoderequester bis zu bestimmten AmigaOS-Versionen noch erhebliche Bugs haben, wirst Du ja sicherlich wissen.
Eigentlich nicht. So viele verschiedene Versionen existieren ja gar nicht. Wenn Du allerdings wirklich Probleme mit diesem Dialog hast, kannst Du ihn auch gerne nachprogrammieren. So toll ist der Dialog ja auch nicht...
Zitat:
Worauf beziehst Du Dich hier ? Auf CGX oder auf ToT ?
Bezüglich der Frage nach evtl. Fehlern? Auf CGX natürlich, und meinethalben auch ASL, wenn Du willst...
Zitat:
Das der Versuch den Screen zu öffnen und ein darauf folgender eventueller Fehlschlag noch ein kleineres Übel ist, ist mir ebenfalls klar. Du brauchst mir nicht meine Überlegungen zu erläutern.
Ich sprach aber davon, eine BitMap mit dem DISPLAYABLE-Attribut zu öffnen. Das ist etwas anderes, denn von diesem Versuch bekommt der Benutzer nicht zwangsläufig etwas mit. Und wenn Du Deinen eigenen Dialog implementierst, hast Du auch nicht das Problem, dass der Dialog geschlossen und nach dem Fehlschlag wieder geöffnet werden muss.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > Grösse Grafikkartenspeicher unter CGX erfragen [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.