PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Videoram-Auslesung unter Windows-Vista überhaupt nicht möglich ???


_raMses
2009-02-18, 14:47:29
Hallo allerseits !

Mit Rivatuner oder Everest kann man ja eigentlich den Speicher der Grafikkarte auslesen. Unter XP funktioniert das tadelos.

Unter Vista ist es momentan ja nicht möglich, den VRAM auszulesen.
Es liegt wohl an Aero und daran wie Vista den Speicher für jede einzelne 3D-Applikation verwaltet.

Unwinder selber meint dazu, dass man wohl unter Vista mit sehr viel Aufwand (und nicht sicher, dass es sich lohnt) über DirectDraw bei Vista die DirectDraw Calls in die 3d-Anwendungen "einspielt", was zur Folge haben könnte, dass die 3d-Anwendungen sich verabschieden.

Oder man entdeckt über den Nvidia-Treiber eine Funktion , die das ermöglicht. Das versuchen wohl momentan auch die Leute von Everrest. Dort will man Nvidia zur Hilfe einbeziehen, hat aber bislang noch kein Feedback von Nvidia bekommen. :(

Ich bin jetzt durch Zufall auf diesen Sache hier gestoßen:
http://msdn.microsoft.com/en-us/library/cc308070(VS.85).aspx

Da wird beschrieben, dass man GetVideoMemoryViaDXGI unter Vista dazu nutzen sollte. Werde momentan aber nicht schlau daraus.

Zitat: "GetVideoMemoryViaDXGI: DXGI is only available on Windows Vista or later. This method returns the amount of dedicated video memory, the amount of dedicated system memory, and the amount of shared system memory. DXGI is more reflective of the true system configuration than the previous 4 methods."

Vielleicht kann ja einer der Gurus hier damit etwas anfangen und etwas dazu beitragen.

Vielen Dank für´s Lesen...

Gruß, raMses

Sephiroth
2009-02-18, 18:40:19
Ich kenn mich damit nicht aus aber ich tät mir einfach das Beispiel im DirectX SDK anschauen. ;)

Vielleicht auch ganz nützlich: Graphics Memory Reporting through WDDM (http://www.microsoft.com/whdc/device/display/graphicsmemory.mspx)

BAGZZlash
2009-02-18, 19:32:10
Mit Rivatuner oder Everest kann man ja eigentlich den Speicher der Grafikkarte auslesen.

Nachdem ich Deinen Post zweimal gelesen habe, muss ich trotzdem nochmal nachfragen, ob ich das richtig verstanden habe: Du willst nicht den Speicher auslesen, sondern Du willst feststellen, wieviel Grafikspeicher vorhanden ist. Richtig?


Unwinder selber meint dazu, dass man wohl unter Vista mit sehr viel Aufwand (und nicht sicher, dass es sich lohnt) über DirectDraw bei Vista die DirectDraw Calls in die 3d-Anwendungen "einspielt", was zur Folge haben könnte, dass die 3d-Anwendungen sich verabschieden.

Ich verstehe diesen Satz nicht und auch nicht, was er mit der Problematik zu tun hat.


Da wird beschrieben, dass man GetVideoMemoryViaDXGI unter Vista dazu nutzen sollte. Werde momentan aber nicht schlau daraus.

Im Allgemeinen kann ich mir nicht vorstellen, dass es sonderlich kompliziert ist, festzustellen, wieviel GraKa-Speicher vorhanden ist. Diese Information wird sicher in der DirectX-Umgebung vorgehalten (der genannte API-call fragt das ja wohl auch so ab).
Diagnosetools machen es wohl i.d.R. per WMI.
Aber auch per Treiber kann man das sicherlich abfragen. Ich würde wetten, dass z.B. GPU-Z es so macht.

Coda
2009-02-18, 19:32:36
Was willst du denn wissen? Der Code für GetVideoMemoryViaDXGI ist:

HRESULT GetVideoMemoryViaDXGI( HMONITOR hMonitor,
SIZE_T* pDedicatedVideoMemory,
SIZE_T* pDedicatedSystemMemory,
SIZE_T* pSharedSystemMemory )
{
HRESULT hr;
bool bGotMemory = false;
*pDedicatedVideoMemory = 0;
*pDedicatedSystemMemory = 0;
*pSharedSystemMemory = 0;

HINSTANCE hDXGI = LoadLibrary( L"dxgi.dll" );
if( hDXGI )
{
LPCREATEDXGIFACTORY pCreateDXGIFactory = NULL;
IDXGIFactory* pDXGIFactory = NULL;

pCreateDXGIFactory = ( LPCREATEDXGIFACTORY )GetProcAddress( hDXGI, "CreateDXGIFactory" );
pCreateDXGIFactory( __uuidof( IDXGIFactory ), ( LPVOID* )&pDXGIFactory );

for( int index = 0; ; ++index )
{
bool bFoundMatchingAdapter = false;
IDXGIAdapter* pAdapter = NULL;
hr = pDXGIFactory->EnumAdapters( index, &pAdapter );
if( FAILED( hr ) ) // DXGIERR_NOT_FOUND is expected when the end of the list is hit
break;

for( int iOutput = 0; ; ++iOutput )
{
IDXGIOutput* pOutput = NULL;
hr = pAdapter->EnumOutputs( iOutput, &pOutput );
if( FAILED( hr ) ) // DXGIERR_NOT_FOUND is expected when the end of the list is hit
break;

DXGI_OUTPUT_DESC outputDesc;
ZeroMemory( &outputDesc, sizeof( DXGI_OUTPUT_DESC ) );
if( SUCCEEDED( pOutput->GetDesc( &outputDesc ) ) )
{
if( hMonitor == outputDesc.Monitor )
bFoundMatchingAdapter = true;

}
SAFE_RELEASE( pOutput );
}

if( bFoundMatchingAdapter )
{
DXGI_ADAPTER_DESC desc;
ZeroMemory( &desc, sizeof( DXGI_ADAPTER_DESC ) );
if( SUCCEEDED( pAdapter->GetDesc( &desc ) ) )
{
bGotMemory = true;
*pDedicatedVideoMemory = desc.DedicatedVideoMemory;
*pDedicatedSystemMemory = desc.DedicatedSystemMemory;
*pSharedSystemMemory = desc.SharedSystemMemory;
}
break;
}
}

FreeLibrary( hDXGI );
}

if( bGotMemory )
return S_OK;
else
return E_FAIL;
}

DXGI ist ab Vista vorhanden und stellt die Render-Surfaces für D3D10 und folgend zur Verfügung.

stickedy
2009-02-18, 22:58:25
Also die S3 ScreenToys und GPU-Z zeigen mir auch unter Vista korrekt den Grafikspeicher an und ich glaube nicht, dass der aus ner Datenbank stammt... Von daher kann ich mir nicht vorstellen, dass das irgendein Problem unter Vista sein soll?