jeg skriver et lite verktøy som rapporterer systemfunksjoner. Den ene er den høyeste shader-modellen som støttes av det installerte grafikkortet, og jeg oppdager for tiden Dette ved Hjelp Av Direct3D 9.0 cs enhetsfunksjoner og sjekker feltene VertexShaderVersion
og PixelShaderVersion
i D3DCAPS9
– strukturen.
HRESULT hrDCaps = poD3D9->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &oCaps); if (!FAILED(hrDCaps)) { // Pixel and vertex shader model versions. Use the minimum number of each for "the" shader model version const int iVertexShaderModel = D3DSHADER_VERSION_MAJOR(oCaps.VertexShaderVersion); const int iPixelShaderModel = D3DSHADER_VERSION_MAJOR(oCaps.PixelShaderVersion);
begge disse verdiene returnerer imidlertid shader model 3 selv for kort som støtter høyere modeller. HER er HVA GPU-Z returnerer for det samme kortet, for eksempel:
Dette spørsmålet indikerer AT DX9 aldri vil rapportere mer ENN SM3 selv på kort som støtter en høyere modell, men nevner ikke hvordan man løser det.
hvordan får jeg nøyaktig shader-modellen som støttes av det installerte kortet? Det vil si kortfunksjonene, ikke De installerte DirectX-driverfunksjonene.
verktøyet må kjøre På Windows 2000 og over, og jobbe på systemer der et grafikkort og Til Og Med DirectX ikke er installert. Jeg laster for tiden dynamisk DX9, så på disse systemene svikter sjekken grasiøst (som er ok.) Men jeg søker en lignende løsning: noe som fortsatt vil kjøre på alle systemer ,og fungere riktig (oppdag SM-versjonen) på de fleste systemer.
Edit-formål: jeg bruker ikke denne koden til å dynamisk endre funksjoner i et program, dvs. Jeg bruker den til å rapportere maskinvarefunksjoner som en ping til en server, som brukes til at vi har en god ide om typisk maskinvare som våre kunder bruker, noe som kan informere fremtidige produktbeslutninger. (Eksempelvis: hvor mange kunder HAR SM4 eller høyere? Hvor mange BRUKER et 64-biters OS? Osv.) Det er derfor enten (a) grasiøst sviktende, så vi vet at det mislyktes, eller (b) å få et nøyaktig shader modellnummer er de to foretrukne modusene.
Edit-answers so far: Svaret nedenfor Av SigTerm foreslår å starte DirectX 11, 10.1, 10 og 9.0 c i rekkefølge, og basere den rapporterte shader-modellen på hvilken versjon som ble startet uten feil (shader model 5, 4.1, 4 og DXCAPS i den rekkefølgen .) Hvis det er mulig, vil jeg sette pris på et kodeeksempel PÅ DX11 og 10 måter å gjøre dette på.
Dette er kanskje ikke en pålitelig løsning. For eksempel kjører Jeg Windows på en VMWare Fusion virtuell maskin PÅ OSX. Fusion drivers rapporterer DX11 I DxDiag, men jeg vet fra Fusion tech specs at den bare støtter DX9. 0c og shader model 3. Likevel, med dette unntaket, synes denne metoden den beste måten så langt.