Bug in PackMemory() ...

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Bug in PackMemory() ...

Beitrag von PureLust »

Moin, moin, ...

PackMemory() funktioniert nicht, wenn als QuellAdresse ein Speicherbereich auf der Grafikkarte angegeben wird (Rechner bzw. Programm hängt).

Entpacken mit UnpackMemory() in den Grafikkartenspeicher funktioniert hingegen einwandfrei.

Aufgefallen ist mir das, als ich Sprite-Daten packen wollte.
Sprites mit #PB_Sprite_Memory-Flag lassen sich packen, normale Sprites ohne das Flag (die ja meines Wissens nach im GraKa-Speicher liegen) hingegen nicht.

Wenn zur Veranschaulichung und Fehlersuche ein kleines Demoprog gewünscht wird, liefere ich das noch gerne nach.

Gruß, PL.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

guter hinweis, aber auch eigentlich logisch.

es heißt ja PackMemory, also sollte der angesprochene bereich sich auch im Memory befinden.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Da hast Du im Grunde natürlich recht, aber auch der GraKa-Speicher ist Speicher, den Du ja z.B. über Peek & Poke ganz normal ansprechen kannst - er liegt halt nur in einem anderen Speicherbereich.

Und da ja auch UnpackMemory() in den GraKa-Speicher problemlos entpackt, nehme ich also mal doch an, dass es sich um einen Bug in PackMemory() handelt.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

Man kann doch eigentlich nur auf Speicherbereiche zugreifen die man zuvor
allociert hat. Wie kommt man denn da in den Grfikkarten-Speicher? Mit
AllocateMemmory kannn man doch nur die Größe festlegen, jedoch den
Bereich nicht.
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Durch erstellen (oder auch laden) eines Sprites wird der Speicherbereich des Sprites ja für Dich "allociert" - Du hast also von da an Zugriff auf das Sprite und auch auf dessen Speicherbereich.
Dieser Speicherbereich wird dann später bei Verwendung von FreeSprite() wieder freigeben.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag von PBZecke »

Ah, kapiert. Aber das ist ja ein ziemliches rumgetrickse. Verständlich, dass so
etws nicht vom PB-Team getestet wird.

Aber noch etwas: Führt das nicht zu Problemen wenn man so auf den
Grafikkarten Speicher zugreift? Oder ist das genauso geschützt wie der
"normale" Speicherzugriff?
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Grafikkartenspeicher ist normallerweise nicht direkt ansprechbar, macht ja
bei einem System das nur virtuelle Speicheradressen vergibt auch keinen
Sinn. Der Objectspeicher des Sprites läßt sich manipulieren, bzw. mit DirectX
ist auch fast direkter Zugriff möglich.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also im grunde wie ich mir dachte:

dass das entpacken funktioniert, ist ein ungewollter zufall,
dass das packen nicht funktioniert, hat seine richtigkeit.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Gesperrt