2

I tried to get the Q3DKMT_ADAPTER_PERFDATA and I used this code.

string name = @"\\?\PCI#VEN_10DE&DEV_13B1&SUBSYS_80D5103C&REV_A2#4&245367a2&0&0008#{1CA05180-A699-450A-9A0C-DE4FBE3DDD89}";
D3DKMT_OPENADAPTERFROMDEVICENAME adapter = new D3DKMT_OPENADAPTERFROMDEVICENAME();
adapter.pDeviceName = name;

NTResult result = D3DKMT.D3DKMTOpenAdapterFromDeviceName(ref adapter);
if (result == NTResult.Success)
{
    D3DKMT_ADAPTER_PERFDATA adapterPerfData = new D3DKMT_ADAPTER_PERFDATA();
    IntPtr adapterPerfDataPtr = Marshal.AllocHGlobal(Marshal.SizeOf(adapterPerfData));

    D3DKMT_QUERYADAPTERINFO queryAdapterInfo = new D3DKMT_QUERYADAPTERINFO();

    queryAdapterInfo.hAdapter = adapter.hAdapter;
    queryAdapterInfo.Type = KMTQUERYADAPTERINFOTYPE.ADAPTERPERFDATA;
    queryAdapterInfo.pPrivateDriverData = adapterPerfDataPtr;
    queryAdapterInfo.PrivateDriverDataSize = Marshal.SizeOf(typeof(D3DKMT_QUERYADAPTERINFO));

    result = D3DKMT.D3DKMTQueryAdapterInfo(ref queryAdapterInfo);
    if (result == NTResult.Success)
    {
        adapterPerfData = Marshal.PtrToStructure<D3DKMT_ADAPTER_PERFDATA>(adapterPerfDataPtr);
    }
}

But I receive always 'noMemory'. How I can do to receive success?

maikel
  • 44
  • 1
  • 7

1 Answers1

0

Realise this is beyond out of date, just passing by - the issue here is most likely not setting PrivateDriverDataSize to match the data struct.

queryAdapterInfo.PrivateDriverDataSize = Marshal.SizeOf(adapterPerfData);
Andrew Wood
  • 131
  • 1
  • 5