PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Direct3D9-Mindestcaps für ShaderModel 2 (und 3)


Neomi
2006-01-30, 11:58:54
Zur Zeit bin ich auf der Suche nach den Direct3D9-Caps, die zwingend unterstützt werden müssen, wenn Support für Vertex- und PixelShader 2.0 gemeldet wird. Also solche Sachen wie 4096 als Minimum für MaxTextureWidth und MaxTextureHeight, wenn SM 3 gemeldet wird, nur eben für alle Caps und auch (oder hauptsächlich) SM 2. Gefunden habe ich bisher nur die Caps verschiedener GPUs, aber nicht die Minimalcaps.

Es geht um eine Engine, die SM 2 fordern wird. Ich möchte mir nicht die Abfrage der Caps sparen, diese Sicherheitsabfragen bei der Initialisierung bleiben drin. Ich möchte aber keine (teilweise schwierigen) Alternativpfade für bestimmte Dinge einbauen, wenn diese nie genutzt würden. Sehr interessant wäre z.B., ob es prinzipiell SM 2 unterstützende Hardware geben kann, die ohne D3DDEVCAPS2_STREAMOFFSET auskommen muß, oder ohne D3DPRASTERCAPS_SCISSORTEST (was für das User Interface sehr interessant ist). Auch die Texturformate, die zwingend unterstützt werden müssen und ob sie SRGBREAD und SRGBWRITE unterstützen müssen, wären sehr hilfreich. Einige der Caps sind doch bestimmt nur deshalb optional, weil auch Direct3D7-Hardware noch abgedeckt werden muß.

Damit will ich verhindern, daß die Engine Probleme macht bzw. das Spiel nicht starten will, falls mal etwas unvorhergesehenes passiert. XGI oder S3 könnten ja eine GPU bringen, die auf bestimmte Dinge verzichtet. Oder ATI und nVidia selbst könnten für die Billiglinie Dinge abspecken, die im Marketing eh irrelevant sind (ich kann mich da noch grob an etwas erinnern, daß die FX 5200 nicht alle Texturformate der größeren Karten unterstützte). Weiß da jemand was genaueres?

Demirug
2006-01-30, 13:02:39
Die 2.0 Caps sind ja auch eher ein schlechter Scherz:

VertexShader: MaxStreams >= 8 ; UBYTE4 als vertex element.
PixelShader: Unterstüzung für non Pow2 Texturen (Conditional reicht aber)

3.0 ist etwas umfangreicher:

VertexShader:

GuardBandLeft, GuardBandTop, GuardBandRight, GuardBandBottom: jeweils mindestens 8K

D3DPRASTERCAPS_FOGVERTEX

Vertex Texturen: (aber das vergessen wir besser)
D3DPTFILTERCAPS_MINFPOINT
D3DPTFILTERCAPS_MAGFPOINT

D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET

D3DDTCAPS_UBYTE4
D3DDTCAPS_UBYTE4N
D3DDTCAPS_SHORT2N
D3DDTCAPS_SHORT4N
D3DDTCAPS_FLOAT16
D3DDTCAPS_FLOAT16

und natürlich alle 2.X Caps auf Max

Pixel Shader

MaxTextureWidth, MaxTextureHeight >= 4K
MaxTextureRepeat >= 8K
MaxAnisotropy >= 16

D3DPMISCCAPS_MASKZ

D3DPMISCCAPS_CULLNONE
D3DPMISCCAPS_CULLCW
D3DPMISCCAPS_CULLCCWD3DPRASTERCAPS_MIPMAPLODBIAS
D3DPMISCCAPS_COLORWRITEENABLE
D3DPMISCCAPS_CLIPPLANESCALEDPOINTS
D3DPMISCCAPS_CLIPTLVERTS
D3DPMISCCAPS_BLENDOP
D3DPMISCCAPS_FOGINFVF

D3DPRASTERCAPS_ANISOTROPY
D3DPRASTERCAPS_COLORPERSPECTIVE
D3DPRASTERCAPS_SCISSORTEST
D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS
D3DPRASTERCAPS_DEPTHBIAS

Alle Compare Funktionen für Stencil, Z und Alpha

SrcBlendCaps, DestBlendCaps: Alle (Ausser D3DPBLENDCAPS_SRCALPHASAT, D3DPBLENDCAPS_BOTHSRCALPHA, D3DPBLENDCAPS_BOTHINVSRCALPHA für DestBlendCaps)

D3DPTEXTURECAPS_PERSPECTIVE

D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE
D3DPTEXTURECAPS_PROJECTED
D3DPTEXTURECAPS_CUBEMAP
D3DPTEXTURECAPS_VOLUMEMAP
D3DPTEXTURECAPS_MIPMAP
D3DPTEXTURECAPS_MIPVOLUMEMAP
D3DPTEXTURECAPS_MIPCUBEMAP

D3DPTFILTERCAPS_MINFPOINT
D3DPTFILTERCAPS_MINFLINEAR
D3DPTFILTERCAPS_MINFANISOTROPIC (nicht für Volumen oder Cube)D3DPTFILTERCAPS_MIPFPOINT
D3DPTFILTERCAPS_MIPFLINEAR
D3DPTFILTERCAPS_MAGFPOINT
D3DPTFILTERCAPS_MAGFLINEAR

D3DPTADDRESSCAPS_WRAP
D3DPTADDRESSCAPS_MIRROR
D3DPTADDRESSCAPS_CLAMP
D3DPTADDRESSCAPS_BORDER
D3DPTADDRESSCAPS_INDEPENDENTUV
D3DPTADDRESSCAPS_MIRRORONCE

Alle StecilOps und Two Side

D3DFVFCAPS_PSIZE

Wenn mehr als 1 Rendertarget unterstützt wird:
D3DPMISCCAPS_INDEPENDENTWRITEMASKS
D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS
D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING

Neomi
2006-01-30, 13:31:08
Danke, das ist genau was ich wissen wollte.

Die 2.0 Caps sind ja auch eher ein schlechter Scherz:

VertexShader: MaxStreams >= 8 ; UBYTE4 als vertex element.
PixelShader: Unterstüzung für non Pow2 Texturen (Conditional reicht aber)

Das Ergebnis selbst ist wohl der Worst Case (alles optional). :(

Weißt du vielleicht noch etwas über die Texturformate, die unterstützt werden müssen? Ich kann mir z.B. nicht vorstellen, daß es nach dem "Fixed Function"-Zeitalter eine GPU gab, die D3DFMT_A8R8G8B8 nicht unterstützte. Oder DXT1 und DXT5. Sind diese Dinge etwa auch optional?

Demirug
2006-01-30, 13:36:14
Danke, das ist genau was ich wissen wollte.



Das Ergebnis selbst ist wohl der Worst Case (alles optional). :(

Weißt du vielleicht noch etwas über die Texturformate, die unterstützt werden müssen? Ich kann mir z.B. nicht vorstellen, daß es nach dem "Fixed Function"-Zeitalter eine GPU gab, die D3DFMT_A8R8G8B8 nicht unterstützte. Oder DXT1 und DXT5. Sind diese Dinge etwa auch optional?

Das meiste ist optional. Für die von den Shadern losgebundenen Caps und Formate müsste ich meine Logo Guidelines raussuchen. Das kann aber etwas dauern.

Neomi
2006-01-30, 15:01:18
Das meiste ist optional. Für die von den Shadern losgebundenen Caps und Formate müsste ich meine Logo Guidelines raussuchen. Das kann aber etwas dauern.

Heißt das, daß es Caps gibt, die indirekt eine Vorraussetzung für ShaderModel 2 oder zumindest Direct3D9-Tauglichkeit sind? Das ist dann schon sehr hilfreich, aber es eilt nicht. Danke für die Mühe!

Demirug
2006-01-30, 15:10:59
Heißt das, daß es Caps gibt, die indirekt eine Vorraussetzung für ShaderModel 2 oder zumindest Direct3D9-Tauglichkeit sind? Das ist dann schon sehr hilfreich, aber es eilt nicht. Danke für die Mühe!

Es gibt ein paar Dinge die zwingend notwedig sind für WHQL bzw ein "Designed für Windows xy" Logo. Für Vista werden das sogar mehr Caps sein aber das hilft dir wohl jetzt recht wenig. Ich würde aber an deiner Stelle die "Common DeNominator Caps" benutzten und erst wenn es notwendig ist über weitere Fallbacks nachdenken.

Neomi
2006-01-30, 17:55:45
"Common DeNominator Caps" klingt schonmal sehr gut. Allerdings habe ich da jetzt nichts konkretes zu gefunden. Einige Stellen zwar, an denen sie angesprochen werden, aber keine Auflistung. In der Doku (Dezember 2005) des DX9-SDKs (ich habe momentan nur die Dokus, die Header und die Libraries von ein paar Versionen parat) habe ich auch nichts gefunden. Kennst du einen Link zu einer Auflistung der Caps?

Demirug
2006-01-30, 18:03:57
"Common DeNominator Caps" klingt schonmal sehr gut. Allerdings habe ich da jetzt nichts konkretes zu gefunden. Einige Stellen zwar, an denen sie angesprochen werden, aber keine Auflistung. In der Doku (Dezember 2005) des DX9-SDKs (ich habe momentan nur die Dokus, die Header und die Libraries von ein paar Versionen parat) habe ich auch nichts gefunden. Kennst du einen Link zu einer Auflistung der Caps?

Die entsprechenden Liste ist im SDK

Samples\C++\Direct3D\ConfigSystem\CardCaps.xls
Samples\C++\Direct3D\ConfigSystem\CardCaps.pdf

Ich kann sie dir gerne schicken. Addresse via PM.

Neomi
2006-01-30, 19:15:20
Die entsprechenden Liste ist im SDK

Samples\C++\Direct3D\ConfigSystem\CardCaps.xls
Samples\C++\Direct3D\ConfigSystem\CardCaps.pdf

Oh, gut, ohne die Dateien konnte ich das natürlich nicht finden.

Ich kann sie dir gerne schicken. Addresse via PM.

Danke, ist aber nicht mehr nötig. Ich habe das vollständige SDK gerade gefunden, ich hatte es noch auf meinem USB-Stick. Dann werde ich mir die Liste mal anschauen...