miten tunnistan näytönohjaimen tukeman DirectX shader-mallin V3: n yläpuolella?

kirjoitan pientä apuohjelmaa, joka raportoi järjestelmäominaisuuksista. Yksi on korkein Shader-malli, jota tukee asennettu näytönohjain, ja havaitsen tämän tällä hetkellä Direct3D 9.0 c: n laiteominaisuuksien avulla ja tarkistamalla VertexShaderVersion ja PixelShaderVersion kentät D3DCAPS9 rakenteesta.

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);

molemmat arvot kuitenkin palauttavat shader model 3: n myös korteille, jotka tukevat korkeampia malleja. Tässä on mitä GPU-Z palauttaa samalle kortille, esimerkiksi:

GPU-Z näyttää shader-mallin 4.1

tämä kysymys osoittaa, että DX9 ei koskaan raportoi enemmän kuin SM3 jopa korteilla, jotka tukevat korkeampaa mallia, mutta ei oikeastaan mainitse, miten se ratkaistaan.

Miten saan asennetun kortin tukeman shader-mallin oikein? Toisin sanoen kortin ominaisuudet, ei asennetut DirectX-ohjainominaisuudet.

apuohjelman täytyy toimia Windows 2000: ssa ja sitä uudemmissa järjestelmissä, joissa näytönohjainta ja jopa DirectX: ää ei ole asennettu. Olen tällä hetkellä dynaamisesti Ladataan DX9, niin näissä järjestelmissä tarkistaa sulavasti epäonnistuu (joka on ok.) Mutta etsin samanlaista ratkaisua: jotain, joka toimii edelleen kaikissa järjestelmissä ja toimii oikein (tunnista SM-versio) useimmissa järjestelmissä.

Edit-purpose: en käytä tätä koodia dynaamisesti ohjelman ominaisuuksien muuttamiseen, eli valitse shaderit. Käytän sitä raportoidakseni laitteistokyvyistä ”ping” palvelimelle, jota käytetään meillä on hyvä käsitys tyypillisestä laitteistosta, jota asiakkaamme käyttävät, joka voi informoida tulevia tuotepäätöksiä. (Esimerkiksi: kuinka monella asiakkaalla on SM4 tai enemmän? Kuinka moni käyttää 64-bittistä käyttöjärjestelmää? Jne.) Tämän vuoksi joko (A) sulavasti epäonnistuen, joten tiedämme sen epäonnistuneen, tai (b) tarkan shader-mallinumeron saaminen ovat kaksi ensisijaista tilaa.

Edit-answers so far: alla oleva sigtermin vastaus ehdottaa DirectX 11: n, 10.1: n, 10: n ja 9.0 c: n instantiointia järjestykseen ja raportoidun shader-mallin perustamista, johon versio instantioitui ilman epäonnistumisia (shader-malli 5, 4.1, 4 ja dxcaps tässä järjestyksessä.) Jos mahdollista, olisin kiitollinen koodi esimerkki DX11 ja 10 tapoja tehdä tämä.

tämä ei välttämättä ole luotettava ratkaisu. Esimerkiksi, Olen Windows VMware Fusion virtuaalikone OSX. Fusion ajurit raportoivat DX11 dxdiag, mutta tiedän Fusion tech specs, että se tukee vain DX9. 0C ja shader model 3. Silti, tätä poikkeusta lukuun ottamatta, tämä menetelmä tuntuu paras tapa toistaiseksi.

Vastaa

Sähköpostiosoitettasi ei julkaista.