egy kis segédprogramot írok, amely beszámol a rendszer képességeiről. Az egyik a telepített grafikus kártya által támogatott legmagasabb szintű shader modell, amit jelenleg a Direct3D 9.0 c eszköz képességeivel észlelek, és ellenőrzöm a VertexShaderVersion
és PixelShaderVersion
mezőket a D3DCAPS9
struktúrában.
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);
azonban mindkét érték visszatér shader model 3 még kártyák, amelyek támogatják a magasabb modellek. Itt van, amit a GPU-Z visszatér ugyanarra a kártyára, például:
ez a kérdés azt jelzi, hogy a DX9 soha nem fog többet jelenteni, mint az SM3, még a magasabb modellt támogató kártyákon sem, de valójában nem említi, hogyan lehet megoldani.
Hogyan tudom pontosan megszerezni a telepített kártya által támogatott shader modellt? Vagyis a kártya képességei, nem pedig a telepített DirectX illesztőprogram képességei.
a segédprogramnak Windows 2000 vagy újabb rendszeren kell futnia, és olyan rendszereken kell dolgoznia, ahol a grafikus kártya és a DirectX nincs telepítve. Jelenleg dinamikusan töltöm be a DX9-et, így ezeken a rendszereken az ellenőrzés kecsesen sikertelen (ami rendben van.) De hasonló megoldást keresek: valami, ami továbbra is minden rendszeren fut, és a legtöbb rendszeren megfelelően működik (észleli az SM verziót).
Szerkesztés – cél: nem használom ezt a kódot EGY program jellemzőinek dinamikus megváltoztatására, azaz árnyékolók kiválasztására. Arra használom, hogy a hardver képességeit ‘pingként’ jelentsem egy szervernek, amelyet arra használnak, hogy jó ötletünk van az ügyfeleink által használt tipikus hardverekről, amelyek tájékoztathatják a jövőbeni termékdöntéseket. (Például: hány ügyfél rendelkezik SM4 vagy annál magasabb? Hányan használnak 64 bites operációs rendszert? Stb.) Ez az oka annak, hogy (a) kecsesen kudarcot vall, tehát tudjuk, hogy kudarcot vallott, vagy (b) a pontos shader Modellszám megszerzése a két előnyben részesített mód.
Edit-answers so far: az alábbi SigTerm válasz azt sugallja, hogy a DirectX 11, 10.1, 10 és 9.0 c sorrendben példányosítható, és a bejelentett shader modellt arra alapozza, hogy melyik verzió hibátlanul példányosítható (shader model 5, 4.1, 4 és DXCAPS ebben a sorrendben.) Ha lehetséges, Nagyra értékelném a DX11 kódpéldáját és ennek 10 módját.
ez nem biztos, hogy megbízható megoldás. Például Windows rendszert futtatok egy VMware Fusion virtuális gépen OSX-en. A Fusion illesztőprogramok a DX11-et jelentik a DxDiag-ban, de a Fusion technikai specifikációiból tudom, hogy csak a DX9.0c-t és a shader model 3-at támogatja. Ennek ellenére, ezzel a kivétellel, ez a módszer tűnik eddig a legjobb módszernek.