Win32 API 日本語リファレンス
ホームGraphics.Direct3D9 › D3DCAPS9

D3DCAPS9

構造体
サイズx64: 304 バイト / x86: 304 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
DeviceTypeD3DDEVTYPE4+0+0頂点の処理にどの種類のリソースが使用されるかを示す D3DDEVTYPE 列挙型のメンバーです。
AdapterOrdinalDWORD4+4+4この Direct3D デバイスが作成されたアダプターです。この序数は、この Direct3D デバイスを作成した IDirect3D9 インターフェイスのメソッドに渡す場合にのみ有効です。IDirect3D9 インターフェイスは、GetDirect3D を呼び出すことでいつでも取得できます。
CapsDWORD4+8+8

次のドライバー固有の機能です。

意味
D3DCAPS_READ_SCANLINE
ディスプレイハードウェアが現在のスキャンラインを返すことができます。
D3DCAPS_OVERLAY
ディスプレイドライバーが、オーバーレイ機能の検証を可能にするオーバーレイ DDI をサポートします。オーバーレイ DDI の詳細については、Overlay DDI を参照してください。
Direct3D 9 と Direct3D 9Ex の違い:

このフラグは Direct3D 9Ex でのみ使用できます。

 
Caps2DWORD4+12+12D3DCAPS2 で識別されるドライバー固有の機能です。
Caps3DWORD4+16+16D3DCAPS3 で識別されるドライバー固有の機能です。
PresentationIntervalsDWORD4+20+20

利用可能なプレゼンテーションのスワップ間隔を表す値のビットマスクです。

意味
D3DPRESENT_INTERVAL_IMMEDIATE
ドライバーは即時のプレゼンテーションスワップ間隔をサポートします。
D3DPRESENT_INTERVAL_ONE
ドライバーは画面のリフレッシュごとのプレゼンテーションスワップ間隔をサポートします。
D3DPRESENT_INTERVAL_TWO
ドライバーは 2 回に 1 回の画面リフレッシュでのプレゼンテーションスワップ間隔をサポートします。
D3DPRESENT_INTERVAL_THREE
ドライバーは 3 回に 1 回の画面リフレッシュでのプレゼンテーションスワップ間隔をサポートします。
D3DPRESENT_INTERVAL_FOUR
ドライバーは 4 回に 1 回の画面リフレッシュでのプレゼンテーションスワップ間隔をサポートします。
CursorCapsDWORD4+24+24

カーソルに対して利用できるハードウェアサポートを示すビットマスクです。Direct3D 9 ではアルファブレンドのカーソル機能は定義されていません。

意味
D3DCURSORCAPS_COLOR
フルカラーのカーソルがハードウェアでサポートされます。具体的には、このフラグは、ドライバーが少なくとも高解像度モード (スキャンラインが 400 以上) でハードウェアカラーカーソルをサポートすることを示します。
D3DCURSORCAPS_LOWRES
フルカラーのカーソルがハードウェアでサポートされます。具体的には、このフラグは、ドライバーが高解像度モードと低解像度モード (スキャンラインが 400 未満) の両方でハードウェアカラーカーソルをサポートすることを示します。
DevCapsDWORD4+28+28

デバイスの機能を示すフラグです。

意味
D3DDEVCAPS_CANBLTSYSTONONLOCAL
デバイスは、システムメモリのテクスチャーから非ローカルビデオメモリのテクスチャーへの転送 (blit) をサポートします。
D3DDEVCAPS_CANRENDERAFTERFLIP
デバイスはページフリップの後にレンダリングコマンドをキューに入れることができます。このフラグが設定されていてもアプリケーションの動作は変わりません。この機能は、デバイスが比較的高速であることを意味します。
D3DDEVCAPS_DRAWPRIMITIVES2
デバイスは少なくとも DirectX 5 準拠のドライバーをサポートできます。
D3DDEVCAPS_DRAWPRIMITIVES2EX
デバイスは少なくとも DirectX 7 準拠のドライバーをサポートできます。
D3DDEVCAPS_DRAWPRIMTLVERTEX
デバイスは IDirect3DDevice9::DrawPrimitive に対応した HAL をエクスポートします。
D3DDEVCAPS_EXECUTESYSTEMMEMORY
デバイスはシステムメモリの実行バッファーを使用できます。
D3DDEVCAPS_EXECUTEVIDEOMEMORY
デバイスはビデオメモリの実行バッファーを使用できます。
D3DDEVCAPS_HWRASTERIZATION
デバイスはシーンのラスタライズ用のハードウェアアクセラレーションを備えています。
D3DDEVCAPS_HWTRANSFORMANDLIGHT
デバイスは変換とライティングをハードウェアでサポートできます。
D3DDEVCAPS_NPATCHES
デバイスは N パッチをサポートします。
D3DDEVCAPS_PUREDEVICE
デバイスはラスタライズ、変換、ライティング、シェーディングをハードウェアでサポートできます。
D3DDEVCAPS_QUINTICRTPATCHES
デバイスは 5 次のベジエ曲線と B スプラインをサポートします。
D3DDEVCAPS_RTPATCHES
デバイスは矩形パッチと三角形パッチをサポートします。
D3DDEVCAPS_RTPATCHHANDLEZERO
このデバイス機能が設定されている場合、ハードウェアアーキテクチャは情報のキャッシュを必要とせず、キャッシュされていないパッチ (ハンドルが 0 のパッチ) はキャッシュされたものと同じ効率で描画されます。D3DDEVCAPS_RTPATCHHANDLEZERO が設定されていても、ハンドルが 0 のパッチを描画できることを意味するわけではない点に注意してください。ハンドルが 0 のパッチは、この機能が設定されているかどうかに関係なく常に描画できます。
D3DDEVCAPS_SEPARATETEXTUREMEMORIES
デバイスは別々のメモリプールからテクスチャリングを行います。
D3DDEVCAPS_TEXTURENONLOCALVIDMEM
デバイスは非ローカルビデオメモリからテクスチャーを取得できます。
D3DDEVCAPS_TEXTURESYSTEMMEMORY
デバイスはシステムメモリからテクスチャーを取得できます。
D3DDEVCAPS_TEXTUREVIDEOMEMORY
デバイスはデバイスメモリからテクスチャーを取得できます。
D3DDEVCAPS_TLVERTEXSYSTEMMEMORY
デバイスは、変換およびライティング済みの頂点に対してシステムメモリのバッファーを使用できます。
D3DDEVCAPS_TLVERTEXVIDEOMEMORY
デバイスは、変換およびライティング済みの頂点に対してビデオメモリのバッファーを使用できます。
PrimitiveMiscCapsDWORD4+32+32その他のドライバープリミティブ機能です。D3DPMISCCAPS を参照してください。
RasterCapsDWORD4+36+36

ラスター描画機能に関する情報です。このメンバーには次のフラグを 1 つ以上指定できます。

意味
D3DPRASTERCAPS_ANISOTROPY
デバイスは異方性フィルタリングをサポートします。
D3DPRASTERCAPS_COLORPERSPECTIVE
デバイスは色を透視補正して補間します。
D3DPRASTERCAPS_DITHER
デバイスは色分解能を高めるためにディザリングを実行できます。
D3DPRASTERCAPS_DEPTHBIAS
デバイスは従来の深度バイアスをサポートします。真の深度バイアスについては D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS を参照してください。
D3DPRASTERCAPS_FOGRANGE
デバイスは範囲ベースのフォグをサポートします。範囲ベースのフォグでは、シーン内のオブジェクトの深度 (すなわち z 座標) ではなく、視点からのオブジェクトの距離を使用してフォグ効果を計算します。
D3DPRASTERCAPS_FOGTABLE
デバイスは、指定されたピクセルの深度でインデックス付けされたフォグ値を含むルックアップテーブルを参照してフォグ値を計算します。
D3DPRASTERCAPS_FOGVERTEX
デバイスはライティング処理中にフォグ値を計算し、ラスタライズ中にフォグ値を補間します。
D3DPRASTERCAPS_MIPMAPLODBIAS
デバイスは詳細レベル (LOD) バイアスの調整をサポートします。このバイアス調整により、アプリケーションはミップマップを通常よりも鮮明に、または鮮明さを抑えて表示できます。ミップマップの詳細レベルバイアスの詳細については、D3DSAMP_MIPMAPLODBIAS を参照してください。
D3DPRASTERCAPS_MULTISAMPLE_TOGGLE
デバイスは、IDirect3DDevice9::BeginSceneIDirect3DDevice9::EndScene の間で (D3DRS_MULTISAMPLEANTIALIAS を使用して) マルチサンプリングのオンとオフを切り替えることをサポートします。
D3DPRASTERCAPS_SCISSORTEST
デバイスはシザーテストをサポートします。Scissor Test (Direct3D 9) を参照してください。
D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS
デバイスは真の傾斜スケールベースの深度バイアスを実行します。これは従来形式の深度バイアスとは対照的です。
D3DPRASTERCAPS_WBUFFER
デバイスは w を使用した深度バッファリングをサポートします。
D3DPRASTERCAPS_WFOG
デバイスは w ベースのフォグをサポートします。w ベースのフォグは透視投影行列が指定されている場合に使用されますが、アフィン投影では引き続き z ベースのフォグが使用されます。システムは、[3][4] 要素に 0 以外の値を含む投影行列を透視投影行列とみなします。
D3DPRASTERCAPS_ZBUFFERLESSHSR
デバイスは、アプリケーションによるポリゴンのソートや深度バッファーの割り当てを必要とせずに、隠面消去 (HSR) を実行できます。これにより、テクスチャー用のビデオメモリをより多く確保できます。HSR の実行方法はハードウェアに依存し、アプリケーションからは透過的です。

z バッファーを使用しない HSR は、レンダリングターゲットサーフェスに深度バッファーサーフェスが関連付けられておらず、深度バッファーの比較テストが有効になっている場合 (すなわち D3DRS_ZENABLE 列挙定数に関連付けられた状態値が TRUE に設定されている場合) に実行されます。

D3DPRASTERCAPS_ZFOG
デバイスは z ベースのフォグをサポートします。
D3DPRASTERCAPS_ZTEST
デバイスは z テスト操作を実行できます。これにより実質的にプリミティブがレンダリングされ、z ピクセルがレンダリングされたかどうかが示されます。
ZCmpCapsDWORD4+40+40

z バッファーの比較機能です。このメンバーには次のフラグを 1 つ以上指定できます。

意味
D3DPCMPCAPS_ALWAYS
常に z テストに合格します。
D3DPCMPCAPS_EQUAL
新しい z が現在の z と等しい場合に z テストに合格します。
D3DPCMPCAPS_GREATER
新しい z が現在の z より大きい場合に z テストに合格します。
D3DPCMPCAPS_GREATEREQUAL
新しい z が現在の z 以上の場合に z テストに合格します。
D3DPCMPCAPS_LESS
新しい z が現在の z より小さい場合に z テストに合格します。
D3DPCMPCAPS_LESSEQUAL
新しい z が現在の z 以下の場合に z テストに合格します。
D3DPCMPCAPS_NEVER
常に z テストに不合格になります。
D3DPCMPCAPS_NOTEQUAL
新しい z が現在の z と等しくない場合に z テストに合格します。
SrcBlendCapsDWORD4+44+44

ソースブレンドの機能です。このメンバーには次のフラグを 1 つ以上指定できます。(ソースとデスティネーションの RGBA 値は、それぞれ添字 s と d で示されます。)

意味
D3DPBLENDCAPS_BLENDFACTOR
ドライバーは D3DBLEND_BLENDFACTORD3DBLEND_INVBLENDFACTOR の両方をサポートします。D3DBLEND を参照してください。
D3DPBLENDCAPS_BOTHINVSRCALPHA
ソースのブレンド係数は (1 - Aₛ, 1 - Aₛ, 1 - Aₛ, 1 - Aₛ)、デスティネーションのブレンド係数は (Aₛ, Aₛ, Aₛ, Aₛ) です。デスティネーション側のブレンドの選択は上書きされます。
D3DPBLENDCAPS_BOTHSRCALPHA
ドライバーは D3DBLEND_BOTHSRCALPHA ブレンドモードをサポートします。(このブレンドモードは廃止されています。詳細については D3DBLEND を参照してください。)
D3DPBLENDCAPS_DESTALPHA
ブレンド係数は (Ad, Ad, Ad, Ad) です。
D3DPBLENDCAPS_DESTCOLOR
ブレンド係数は (Rd, Gd, Bd, Ad) です。
D3DPBLENDCAPS_INVDESTALPHA
ブレンド係数は (1 - Ad, 1 - Ad, 1 - Ad, 1 - Ad) です。
D3DPBLENDCAPS_INVDESTCOLOR
ブレンド係数は (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad) です。
D3DPBLENDCAPS_INVSRCALPHA
ブレンド係数は (1 - Aₛ, 1 - Aₛ, 1 - Aₛ, 1 - Aₛ) です。
D3DPBLENDCAPS_INVSRCCOLOR
ブレンド係数は (1 - Rₛ, 1 - Gₛ, 1 - Bₛ, 1 - Aₛ) です。
D3DPBLENDCAPS_INVSRCCOLOR2
ブレンド係数は (1 - PSOutColor[1]r, 1 - PSOutColor[1]g, 1 - PSOutColor[1]b, 未使用)) です。Render Target Blending を参照してください。
Direct3D 9 と Direct3D 9Ex の違い:

このフラグは Direct3D 9Ex でのみ使用できます。

 
D3DPBLENDCAPS_ONE
ブレンド係数は (1, 1, 1, 1) です。
D3DPBLENDCAPS_SRCALPHA
ブレンド係数は (Aₛ, Aₛ, Aₛ, Aₛ) です。
D3DPBLENDCAPS_SRCALPHASAT
ブレンド係数は (f, f, f, 1) です。ここで f = min(Aₛ, 1 - Ad) です。
D3DPBLENDCAPS_SRCCOLOR
ブレンド係数は (Rₛ, Gₛ, Bₛ, Aₛ) です。
D3DPBLENDCAPS_SRCCOLOR2
ブレンド係数は (PSOutColor[1]r, PSOutColor[1]g, PSOutColor[1]b, 未使用) です。Render Target Blending を参照してください。
Direct3D 9 と Direct3D 9Ex の違い:

このフラグは Direct3D 9Ex でのみ使用できます。

 
D3DPBLENDCAPS_ZERO
ブレンド係数は (0, 0, 0, 0) です。
DestBlendCapsDWORD4+48+48デスティネーションブレンドの機能です。このメンバーには、SrcBlendCaps メンバーに定義されているものと同じ機能を指定できます。
AlphaCmpCapsDWORD4+52+52アルファテストの比較機能です。このメンバーには、ZCmpCaps メンバーに定義されているものと同じ機能フラグを含めることができます。このメンバーに D3DPCMPCAPS_ALWAYS 機能のみ、または D3DPCMPCAPS_NEVER 機能のみが含まれる場合、ドライバーはアルファテストをサポートしません。それ以外の場合、フラグはアルファテストでサポートされる個々の比較を示します。
ShadeCapsDWORD4+56+56

シェーディング操作の機能です。一般に、デバイスが特定のコマンドをサポートする場合は、(D3DSHADEMODE 列挙型で指定される) D3DSHADE_FLAT モードもサポートすると想定されます。このフラグは、ドライバーがグーローシェーディングもサポートできるかどうか、およびアルファカラー成分がサポートされるかどうかを指定します。アルファ成分がサポートされない場合、生成される色のアルファ値は暗黙的に 255 になります。これは指定可能な最大のアルファ値です (すなわち、アルファ成分が最大強度の状態です)。

三角形の色、スペキュラーハイライト、フォグ、アルファの各補間には、それぞれデバイスドライバーによる実装方法をアプリケーションが調べるための機能フラグがあります。

このメンバーには次のフラグを 1 つ以上指定できます。

意味
D3DPSHADECAPS_ALPHAGOURAUDBLEND
デバイスは、グーローブレンドによる透過処理 (D3DSHADEMODE 列挙型の D3DSHADE_GOURAUD 状態) 用のアルファ成分をサポートできます。このモードでは、プリミティブのアルファカラー成分は頂点で与えられ、他のカラー成分と共に面全体にわたって補間されます。
D3DPSHADECAPS_COLORGOURAUDRGB
デバイスはカラーのグーローシェーディングをサポートできます。このモードでは、頂点ごとのカラー成分 (赤、緑、青) が三角形の面全体にわたって補間されます。
D3DPSHADECAPS_FOGGOURAUD
デバイスはグーローシェーディングモードでのフォグをサポートできます。
D3DPSHADECAPS_SPECULARGOURAUDRGB
デバイスはスペキュラーハイライトのグーローシェーディングをサポートします。
TextureCapsDWORD4+60+60

その他のテクスチャーマッピング機能です。このメンバーには次のフラグを 1 つ以上指定できます。

意味
D3DPTEXTURECAPS_ALPHA
テクスチャーピクセル内のアルファがサポートされます。
D3DPTEXTURECAPS_ALPHAPALETTE
デバイスはテクスチャーパレットからアルファを描画できます。
D3DPTEXTURECAPS_CUBEMAP
キューブテクスチャーをサポートします。
D3DPTEXTURECAPS_CUBEMAP_POW2
デバイスは、キューブテクスチャーマップの各寸法が 2 の累乗で指定されていることを要求します。
D3DPTEXTURECAPS_MIPCUBEMAP
デバイスはミップマップされたキューブテクスチャーをサポートします。
D3DPTEXTURECAPS_MIPMAP
デバイスはミップマップされたテクスチャーをサポートします。
D3DPTEXTURECAPS_MIPVOLUMEMAP
デバイスはミップマップされたボリュームテクスチャーをサポートします。
D3DPTEXTURECAPS_NONPOW2CONDITIONAL
D3DPTEXTURECAPS_POW2 も設定されている場合、寸法が 2 の累乗でない 2D テクスチャーの使用を条件付きでサポートします。この機能を公開するデバイスは、次の要件をすべて満たす場合にそのようなテクスチャーを使用できます。
  • テクスチャーステージのテクスチャーアドレッシングモードが D3DTADDRESS_CLAMP に設定されている。
  • テクスチャーステージのテクスチャーラッピングが無効になっている (D3DRS_WRAP n が 0 に設定されている)。
  • ミップマッピングが使用されていない (拡大フィルターのみを使用する)。
  • テクスチャー形式が D3DFMT_DXT1 から D3DFMT_DXT5 のいずれかであってはならない。

このフラグが設定されておらず、D3DPTEXTURECAPS_POW2 も設定されていない場合、寸法が 2 の累乗でない 2D テクスチャーが無条件にサポートされます。

2 の累乗でないテクスチャーは、シェーダーでの計算に基づいて読み取られるステージ (ピクセルシェーダー バージョン 1_0 から 1_3 の bem - ps 命令や texm3x3 - ps 命令など) には設定できません。たとえば、これらのテクスチャーはテクスチャー読み取りに渡されるバンプの格納には使用できますが、texbem - pstexbeml - pstexm3x3spec - ps で使用される環境マップの格納には使用できません。つまり、寸法が 2 の累乗でないテクスチャーは、シェーダー内で計算されたテクスチャー座標を使用してアドレス指定したりサンプリングしたりすることはできません。この種の操作は従属読み取り (dependent read) と呼ばれ、これらの種類のテクスチャーでは実行できません。

D3DPTEXTURECAPS_NOPROJECTEDBUMPENV
デバイスは、プログラマブルシェーダーおよび固定機能シェーダーでの投影バンプ環境ルックアップ操作をサポートしません。
D3DPTEXTURECAPS_PERSPECTIVE
透視補正テクスチャリングがサポートされます。
D3DPTEXTURECAPS_POW2
D3DPTEXTURECAPS_NONPOW2CONDITIONAL が設定されていない場合、すべてのテクスチャーの幅と高さは 2 の累乗で指定されていなければなりません。この要件はキューブテクスチャーにもボリュームテクスチャーにも適用されません。

D3DPTEXTURECAPS_NONPOW2CONDITIONAL も設定されている場合、寸法が 2 の累乗でない 2D テクスチャーの使用を条件付きでサポートします。D3DPTEXTURECAPS_NONPOW2CONDITIONAL の説明を参照してください。

このフラグが設定されておらず、D3DPTEXTURECAPS_NONPOW2CONDITIONAL も設定されていない場合、寸法が 2 の累乗でない 2D テクスチャーが無条件にサポートされます。

D3DPTEXTURECAPS_PROJECTED
D3DTTFF_PROJECTED テクスチャー変換フラグをサポートします。これが適用されると、デバイスは変換後のテクスチャー座標を最後のテクスチャー座標で除算します。この機能がある場合、射影除算はピクセルごとに行われます。この機能がない場合でも射影除算が必要なときは、Direct3D ランタイムによって頂点単位で実行されます。
D3DPTEXTURECAPS_SQUAREONLY
すべてのテクスチャーは正方形でなければなりません。
D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE
テクスチャーインデックスは、補間の前にテクスチャーサイズでスケーリングされません。
D3DPTEXTURECAPS_VOLUMEMAP
デバイスはボリュームテクスチャーをサポートします。
D3DPTEXTURECAPS_VOLUMEMAP_POW2
デバイスは、ボリュームテクスチャーマップの各寸法が 2 の累乗で指定されていることを要求します。
TextureFilterCapsDWORD4+64+64テクスチャーに対するテクスチャーフィルタリング機能です。ステージごとのフィルタリング機能は、複数テクスチャーのブレンドを行う際にテクスチャーステージでサポートされるフィルタリングモードを表します。このメンバーには、D3DPTFILTERCAPS で定義されているステージごとのテクスチャーフィルタリングフラグを任意に組み合わせて指定できます。
CubeTextureFilterCapsDWORD4+68+68キューブテクスチャーに対するテクスチャーフィルタリング機能です。ステージごとのフィルタリング機能は、複数テクスチャーのブレンドを行う際にテクスチャーステージでサポートされるフィルタリングモードを表します。このメンバーには、D3DPTFILTERCAPS で定義されているステージごとのテクスチャーフィルタリングフラグを任意に組み合わせて指定できます。
VolumeTextureFilterCapsDWORD4+72+72ボリュームテクスチャーに対するテクスチャーフィルタリング機能です。ステージごとのフィルタリング機能は、複数テクスチャーのブレンドを行う際にテクスチャーステージでサポートされるフィルタリングモードを表します。このメンバーには、D3DPTFILTERCAPS で定義されているステージごとのテクスチャーフィルタリングフラグを任意に組み合わせて指定できます。
TextureAddressCapsDWORD4+76+76

テクスチャーオブジェクトのテクスチャーアドレッシング機能です。このメンバーには次のフラグを 1 つ以上指定できます。

意味
D3DPTADDRESSCAPS_BORDER
デバイスは、[0.0, 1.0] の範囲外の座標を、D3DSAMP_BORDERCOLOR テクスチャーステージ状態で指定される境界色に設定することをサポートします。
D3DPTADDRESSCAPS_CLAMP
デバイスはテクスチャーをアドレスにクランプできます。
D3DPTADDRESSCAPS_INDEPENDENTUV
デバイスは、テクスチャーの u 座標と v 座標のテクスチャーアドレッシングモードを個別に設定できます。この機能は D3DSAMP_ADDRESSU および D3DSAMP_ADDRESSV レンダー状態の値に対応します。
D3DPTADDRESSCAPS_MIRROR
デバイスはテクスチャーをアドレスにミラーリングできます。
D3DPTADDRESSCAPS_MIRRORONCE
デバイスはテクスチャー座標の絶対値を取り (これにより 0 を中心にミラーリングされます)、その後で最大値にクランプできます。
D3DPTADDRESSCAPS_WRAP
デバイスはテクスチャーをアドレスにラップできます。
VolumeTextureAddressCapsDWORD4+80+80ボリュームテクスチャーのテクスチャーアドレッシング機能です。このメンバーには、TextureAddressCaps メンバーに定義されているフラグを 1 つ以上指定できます。
LineCapsDWORD4+84+84

線描画プリミティブの機能を定義します。

意味
D3DLINECAPS_ALPHACMP
アルファテストの比較をサポートします。
D3DLINECAPS_ANTIALIAS
アンチエイリアス処理された線がサポートされます。
D3DLINECAPS_BLEND
ソースブレンドをサポートします。
D3DLINECAPS_FOG
フォグをサポートします。
D3DLINECAPS_TEXTURE
テクスチャーマッピングをサポートします。
D3DLINECAPS_ZTEST
z バッファーの比較をサポートします。
MaxTextureWidthDWORD4+88+88このデバイスの最大テクスチャー幅です。
MaxTextureHeightDWORD4+92+92このデバイスの最大テクスチャー高さです。
MaxVolumeExtentDWORD4+96+96ボリュームテクスチャーの 3 つの寸法 (幅、高さ、深さ) のいずれかに指定できる最大値です。
MaxTextureRepeatDWORD4+100+100

この数値は、正規化後のテクスチャー座標の整数部ビットが取り得る最大範囲を表します。テクスチャー座標は 32 ビット符号付き整数として格納され、整数部に 27 ビット、浮動小数点の小数部に 5 ビットが使用されます。最大の整数インデックスである 2²⁷ は、ハードウェアがテクスチャー座標のスケーリングをどのように行うかに応じて、最大のテクスチャー座標を決定するために使用されます。

一部のハードウェアは D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 機能を報告します。この場合、デバイスはテクスチャーサイズによるテクスチャー座標のスケーリングを、補間とテクスチャーアドレスモードの適用の後まで遅延させます。そのため、テクスチャーをラップできる回数は MaxTextureRepeat の整数値で与えられます。

これに対して望ましくないケースとして、一部のハードウェアでは D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE が設定されておらず、デバイスは補間の前に (最高の詳細レベルを使用して) テクスチャー座標をテクスチャーサイズでスケーリングします。この場合、テクスチャーをラップできる回数は MaxTextureRepeat / テクスチャーサイズ に制限されます。

たとえば、MaxTextureRepeat が 32k で、テクスチャーのサイズが 4k であるとします。ハードウェアが D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE を設定している場合、テクスチャーをラップできる回数は MaxTextureRepeat と等しく、この例では 32k になります。設定していない場合、テクスチャーをラップできる回数は MaxTextureRepeat をテクスチャーサイズで割った値と等しく、この例では 32k/4k になります。

MaxTextureAspectRatioDWORD4+104+104ハードウェアがサポートする最大のテクスチャーアスペクト比です。通常は 2 の累乗です。
MaxAnisotropyDWORD4+108+108D3DSAMP_MAXANISOTROPY テクスチャーステージ状態に指定できる最大の有効値です。
MaxVertexWFLOAT4+112+112デバイスがサポートする W ベースの最大深度値です。
GuardBandLeftFLOAT4+116+116ガードバンドクリッピング領域のスクリーン空間座標です。この矩形の内側かつビューポート矩形の外側にある座標は自動的にクリップされます。
GuardBandTopFLOAT4+120+120ガードバンドクリッピング領域のスクリーン空間座標です。この矩形の内側かつビューポート矩形の外側にある座標は自動的にクリップされます。
GuardBandRightFLOAT4+124+124ガードバンドクリッピング領域のスクリーン空間座標です。この矩形の内側かつビューポート矩形の外側にある座標は自動的にクリップされます。
GuardBandBottomFLOAT4+128+128ガードバンドクリッピング領域のスクリーン空間座標です。この矩形の内側かつビューポート矩形の外側にある座標は自動的にクリップされます。
ExtentsAdjustFLOAT4+132+132アンチエイリアスカーネルに対応するために、範囲矩形を外側へ広げるピクセル数です。
StencilCapsDWORD4+136+136

サポートされるステンシルバッファー操作を指定するフラグです。ステンシル操作は、3 つのステンシルバッファー操作レンダー状態 (D3DRS_STENCILFAILD3DRS_STENCILPASSD3DRS_STENCILZFAIL) のすべてで有効であると想定されます。

詳細については、D3DSTENCILCAPS を参照してください。

FVFCapsDWORD4+140+140

フレキシブル頂点フォーマット (FVF) の機能です。

意味
D3DFVFCAPS_DONOTSTRIPELEMENTS
頂点要素を取り除かないことが推奨されます。すなわち、頂点フォーマットに現在のレンダー状態で使用されない要素が含まれていても、頂点を再生成する必要はありません。この機能フラグが存在しない場合は、頂点フォーマットから不要な要素を取り除いた方がパフォーマンスが向上します。
D3DFVFCAPS_PSIZE
ポイントサイズはレンダー状態または頂点データのいずれかで決定されます。FVF を使用する場合、ポイントサイズは頂点宣言内のポイントサイズデータから取得できます。それ以外の場合、ポイントサイズはレンダー状態 D3DRS_POINTSIZE で決定されます。アプリケーションが両方 (レンダー状態と頂点宣言) でポイントサイズを指定した場合は、頂点データがレンダー状態のデータより優先されます。
D3DFVFCAPS_TEXCOORDCOUNTMASK
FVFCaps の下位 WORD をマスクします。これらのビットを WORD データ型にキャストした値は、デバイスが複数テクスチャーのブレンドに同時に使用できるテクスチャー座標セットの総数を表します。(1 つの頂点につき最大 8 個のテクスチャー座標セットを使用できますが、デバイスは指定された数のテクスチャー座標セットのみを使用してブレンドできます。)
TextureOpCapsDWORD4+144+144

このデバイスがサポートするテクスチャー操作を示すフラグの組み合わせです。次のフラグが定義されています。

意味
D3DTEXOPCAPS_ADD
D3DTOP_ADD テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_ADDSIGNED
D3DTOP_ADDSIGNED テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_ADDSIGNED2X
D3DTOP_ADDSIGNED2X テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_ADDSMOOTH
D3DTOP_ADDSMOOTH テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_BLENDCURRENTALPHA
D3DTOP_BLENDCURRENTALPHA テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_BLENDDIFFUSEALPHA
D3DTOP_BLENDDIFFUSEALPHA テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_BLENDFACTORALPHA
D3DTOP_BLENDFACTORALPHA テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_BLENDTEXTUREALPHA
D3DTOP_BLENDTEXTUREALPHA テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_BLENDTEXTUREALPHAPM
D3DTOP_BLENDTEXTUREALPHAPM テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_BUMPENVMAP
D3DTOP_BUMPENVMAP テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_BUMPENVMAPLUMINANCE
D3DTOP_BUMPENVMAPLUMINANCE テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_DISABLE
D3DTOP_DISABLE テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_DOTPRODUCT3
D3DTOP_DOTPRODUCT3 テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_LERP
D3DTOP_LERP テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_MODULATE
D3DTOP_MODULATE テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_MODULATE2X
D3DTOP_MODULATE2X テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_MODULATE4X
D3DTOP_MODULATE4X テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR
D3DTOP_MODULATEALPHA_ADDCOLOR テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA
D3DTOP_MODULATECOLOR_ADDALPHA テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR
D3DTOP_MODULATEINVALPHA_ADDCOLOR テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA
D3DTOP_MODULATEINVCOLOR_ADDALPHA テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_MULTIPLYADD
D3DTOP_MULTIPLYADD テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_PREMODULATE
D3DTOP_PREMODULATE テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_SELECTARG1
D3DTOP_SELECTARG1 テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_SELECTARG2
D3DTOP_SELECTARG2 テクスチャーブレンド操作がサポートされます。
D3DTEXOPCAPS_SUBTRACT
D3DTOP_SUBTRACT テクスチャーブレンド操作がサポートされます。
MaxTextureBlendStagesDWORD4+148+148固定機能パイプラインでサポートされるテクスチャーブレンドステージの最大数です。この値は利用可能なブレンダーの数です。プログラマブルピクセルパイプラインでは、ピクセルシェーダー命令が使用する一意のテクスチャーレジスターの数に相当します。
MaxSimultaneousTexturesDWORD4+152+152

固定機能パイプラインのサンプラーステージに同時にバインドできるテクスチャーの最大数です。同じテクスチャーが 2 つのサンプラーステージにバインドされている場合は、2 つのテクスチャーとして数えられます。

サンプラーステージの数が各ピクセルシェーダー バージョンによって決まるプログラマブルパイプラインでは、この値に意味はありません。テクスチャー宣言命令の数も各ピクセルシェーダー バージョンによって決まります。Pixel Shaders を参照してください。

VertexProcessingCapsDWORD4+156+156頂点処理の機能です。同じ物理デバイスであっても、この機能は CreateDevice に指定するパラメーターに応じて Direct3D デバイスごとに異なる場合があります。D3DVTXPCAPS を参照してください。
MaxActiveLightsDWORD4+160+160同時にアクティブにできるライトの最大数です。同じ物理デバイスであっても、この機能は CreateDevice に指定するパラメーターに応じて Direct3D デバイスごとに異なる場合があります。
MaxUserClipPlanesDWORD4+164+164サポートされるユーザー定義クリッピング平面の最大数です。このメンバーは 0 になる場合があります。同じ物理デバイスであっても、この機能は CreateDevice に指定するパラメーターに応じて Direct3D デバイスごとに異なる場合があります。
MaxVertexBlendMatricesDWORD4+168+168このデバイスがマルチマトリックス頂点ブレンドを実行する際に適用できる行列の最大数です。同じ物理デバイスであっても、この機能は CreateDevice に指定するパラメーターに応じて Direct3D デバイスごとに異なる場合があります。
MaxVertexBlendMatrixIndexDWORD4+172+172

頂点ごとのインデックスを使用してインデックス指定できる最大の行列インデックスを指定する DWORD 値です。行列の数は MaxVertexBlendMatrixIndex + 1 であり、これが行列パレットのサイズになります。ライティングのためにブレンドが必要な頂点データに法線が含まれる場合、行列の数はこの機能フラグで指定される数の半分になります。MaxVertexBlendMatrixIndex が 0 に設定されている場合、ドライバーはインデックス付き頂点ブレンドをサポートしません。この値が 0 でない場合、インデックスの有効な範囲は 0 から MaxVertexBlendMatrixIndex までです。

MaxVertexBlendMatrixIndex の値が 0 の場合、ドライバーがインデックス付き行列をサポートしていないことを示します。

ソフトウェア頂点処理を使用する場合は、法線のブレンドの有無にかかわらず、インデックス付き頂点ブレンドに 256 個の行列を使用できます。

同じ物理デバイスであっても、この機能は CreateDevice に指定するパラメーターに応じて Direct3D デバイスごとに異なる場合があります。

MaxPointSizeFLOAT4+176+176ポイントプリミティブの最大サイズです。1.0f に設定されている場合、デバイスはポイントサイズの制御をサポートしません。範囲は 1.0f 以上です。
MaxPrimitiveCountDWORD4+180+180

DrawPrimitive の呼び出しごとに指定できるプリミティブの最大数です。次の 2 つのケースがあります。

  • MaxPrimitiveCount が 0xffff と等しくない場合、1 回の描画呼び出しで最大 MaxPrimitiveCount 個のプリミティブを描画できます。
  • ただし、MaxPrimitiveCount が 0xffff と等しい場合も描画できるプリミティブは最大 MaxPrimitiveCount 個ですが、使用できる一意の頂点も MaxPrimitiveCount 個以下でなければなりません (各プリミティブが 3 つの異なる頂点を使用する可能性があるためです)。
MaxVertexIndexDWORD4+184+184ハードウェア頂点処理でサポートされるインデックスの最大サイズです。32 ビットのインデックスバッファーを作成することは可能ですが、この値が 0x0000FFFF より大きくない限り、そのインデックスバッファーを使用してレンダリングすることはできません。
MaxStreamsDWORD4+188+188SetStreamSource で同時に使用できるデータストリームの最大数です。有効な範囲は 1 から 16 です。この値が 0 の場合、そのドライバーは Direct3D 9 ドライバーではない点に注意してください。
MaxStreamStrideDWORD4+192+192SetStreamSource の最大ストライドです。
VertexShaderVersionDWORD4+196+196頂点シェーダーのメジャーバージョンとマイナーバージョンを表す 2 つの数値です。各頂点シェーダー バージョンでサポートされる命令の詳細については、Version 1_xVersion 2_0Version 2_0 ExtendedVersion 3_0 を参照してください。
MaxVertexShaderConstDWORD4+200+200定数用に予約されている頂点シェーダーの Vertex Shader Registers の数です。
PixelShaderVersionDWORD4+204+204ピクセルシェーダーのメジャーバージョンとマイナーバージョンを表す 2 つの数値です。各ピクセルシェーダー バージョンでサポートされる命令の詳細については、Version 1_xVersion 2_0Version 2_0 ExtendedVersion 3_0 を参照してください。
PixelShader1xMaxValueFLOAT4+208+208ピクセルシェーダーの演算成分の最大値です。この値は、ピクセルのカラーブレンド操作でサポートされる値の内部的な範囲を示します。実装は、報告した範囲内では、データを変更せずに (クランプせずに) ピクセル処理を通過させなければなりません。通常、このメンバーの値は絶対値です。たとえば 1.0 は範囲が -1.0 から 1 であることを示し、8.0 は範囲が -8.0 から 8.0 であることを示します。ピクセルシェーダーをサポートするハードウェアでは、この値は 1.0 以上 (>= 1.0) でなければなりません。
DevCaps2DWORD4+212+212アダプティブテセレーションに関するデバイスドライバーの機能です。詳細については、D3DDEVCAPS2 を参照してください
MaxNpatchTessellationLevelFLOAT4+216+216TBD
Reserved5DWORD4+220+220TBD
MasterAdapterOrdinalDWORD4+224+224

この従属アダプターに対してどのデバイスがマスターであるかを示す数値です。この数値はアダプター値と同じ空間から取得されます。

マルチヘッドのサポートでは、1 つのヘッドがマスターヘッドとされ、同じカード上の他のすべてのヘッドは従属ヘッドとされます。システムに複数のマルチヘッドアダプターが存在する場合、1 つのマルチヘッドアダプターに属するマスターとその従属ヘッドをグループと呼びます。

AdapterOrdinalInGroupDWORD4+228+228API がヘッドを参照する順序を示す数値です。マスターアダプターの値は常に 0 です。これらの値はアダプターの序数には対応しません。グループ内のヘッドにのみ適用されます。
NumberOfAdaptersInGroupDWORD4+232+232このアダプターグループ内のアダプターの数です (マスターの場合のみ)。通常のアダプターでは 1 になります。マルチヘッドカードのマスターアダプターでは 1 より大きい値になります。マルチヘッドカードの従属アダプターでは 0 になります。各カードが持てるマスターは最大 1 つですが、従属アダプターは複数持つことができます。
DeclTypesDWORD4+236+236頂点宣言に含まれる 1 つ以上のデータ型の組み合わせです。D3DDTCAPS を参照してください。
NumSimultaneousRTsDWORD4+240+240同時に使用できるレンダーターゲットの数です。この数は少なくとも 1 でなければなりません。
StretchRectFilterCapsDWORD4+244+244

StretchRect がサポートする操作を示す定数の組み合わせです。このフィールドに設定できるフラグは次のとおりです。

定数 説明
D3DPTFILTERCAPS_MINFPOINT デバイスは矩形の縮小に対するポイントサンプルフィルタリングをサポートします。このフィルターの種類は、D3DTEXF_POINT を使用して StretchRect を呼び出すことで要求します。
D3DPTFILTERCAPS_MAGFPOINT デバイスは矩形の拡大に対するポイントサンプルフィルタリングをサポートします。このフィルターの種類は、D3DTEXF_POINT を使用して StretchRect を呼び出すことで要求します。
D3DPTFILTERCAPS_MINFLINEAR デバイスは矩形の縮小に対するバイリニア補間フィルタリングをサポートします。このフィルターの種類は、D3DTEXF_LINEAR を使用して StretchRect を呼び出すことで要求します。
D3DPTFILTERCAPS_MAGFLINEAR デバイスは矩形の拡大に対するバイリニア補間フィルタリングをサポートします。このフィルターの種類は、D3DTEXF_LINEAR を使用して StretchRect を呼び出すことで要求します。
 

詳細については、D3DTEXTUREFILTERTYPE および D3DTEXTUREFILTERTYPE を参照してください。

VS20CapsD3DVSHADERCAPS2_016+248+248デバイスは頂点シェーダー バージョン 2_0 の拡張機能をサポートします。D3DVSHADERCAPS2_0 を参照してください。
PS20CapsD3DPSHADERCAPS2_020+264+264デバイスはピクセルシェーダー バージョン 2_0 の拡張機能をサポートします。D3DPSHADERCAPS2_0 を参照してください。
VertexTextureFilterCapsDWORD4+284+284デバイスは頂点シェーダーのテクスチャーフィルター機能をサポートします。D3DPTFILTERCAPS を参照してください。
MaxVShaderInstructionsExecutedDWORD4+288+288フロー制御を使用する場合に実行できる頂点シェーダー命令の最大数です。プログラムできる命令の最大数は MaxVertexShader30InstructionSlots です。
MaxPShaderInstructionsExecutedDWORD4+292+292フロー制御を使用する場合に実行できるピクセルシェーダー命令の最大数です。プログラムできる命令の最大数は MaxPixelShader30InstructionSlots です。
MaxVertexShader30InstructionSlotsDWORD4+296+296サポートされる頂点シェーダー命令スロットの最大数です。この機能に設定できる最大値は 32768 です。vs_3_0 をサポートするデバイスは、少なくとも 512 個の命令スロットをサポートする必要があります。
MaxPixelShader30InstructionSlotsDWORD4+300+300サポートされるピクセルシェーダー命令スロットの最大数です。この機能に設定できる最大値は 32768 です。ps_3_0 をサポートするデバイスは、少なくとも 512 個の命令スロットをサポートする必要があります。

公式ドキュメント

Direct3D オブジェクトを通じて公開されるハードウェアの機能を表します。

解説(Remarks)

MaxTextureBlendStages メンバーと MaxSimultaneousTextures メンバーは似ているように見えますが、含まれる情報は異なります。MaxTextureBlendStages メンバーは現在のデバイスがサポートするテクスチャーブレンドステージの総数を保持し、MaxSimultaneousTextures メンバーはそれらのステージのうち SetTexture メソッドを使用してテクスチャーをバインドできるステージ数を表します。

ドライバーがこの構造体を設定する際には、機能の取得に使用しているインターフェイス (IDirect3DDevice9 など) が実行バッファーをサポートしていない場合でも、実行バッファー関連の機能に値を設定することがあります。

一般に、テクスチャーを使用した後、シーンの途中でそれを変更するとパフォーマンス上の問題が発生する場合があります。現在の BeginSceneEndScene のブロック内で使用しているテクスチャーが、どうしても必要な場合を除いて破棄されないようにしてください。シーン内でのテクスチャー使用量が極端に多い場合、結果は未定義になります。これは、シーン内で使用したテクスチャーを変更し、かつ空きのテクスチャーメモリがない場合に発生します。そのようなシステムでは、EndScene の時点で z バッファーの内容が無効になります。この種のハードウェアでは、アプリケーションは BeginScene と EndScene の組の内側でバックバッファーとの間の UpdateSurface を呼び出さないでください。また、D3DPRASTERCAPS_ZBUFFERLESSHSR 機能フラグが設定されている場合、アプリケーションは z バッファーにアクセスしようとしないでください。さらに、アプリケーションは BeginScene と EndScene の組の内側でバックバッファーや z バッファーをロックしないでください。

ミップマップされたテクスチャーに関する次のフラグは、Direct3D 9 ではサポートされません。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// D3DVSHADERCAPS2_0  (x64 16 / x86 16 バイト)
typedef struct D3DVSHADERCAPS2_0 {
    DWORD Caps;
    INT DynamicFlowControlDepth;
    INT NumTemps;
    INT StaticFlowControlDepth;
} D3DVSHADERCAPS2_0;

// D3DPSHADERCAPS2_0  (x64 20 / x86 20 バイト)
typedef struct D3DPSHADERCAPS2_0 {
    DWORD Caps;
    INT DynamicFlowControlDepth;
    INT NumTemps;
    INT StaticFlowControlDepth;
    INT NumInstructionSlots;
} D3DPSHADERCAPS2_0;

// D3DCAPS9  (x64 304 / x86 304 バイト)
typedef struct D3DCAPS9 {
    D3DDEVTYPE DeviceType;
    DWORD AdapterOrdinal;
    DWORD Caps;
    DWORD Caps2;
    DWORD Caps3;
    DWORD PresentationIntervals;
    DWORD CursorCaps;
    DWORD DevCaps;
    DWORD PrimitiveMiscCaps;
    DWORD RasterCaps;
    DWORD ZCmpCaps;
    DWORD SrcBlendCaps;
    DWORD DestBlendCaps;
    DWORD AlphaCmpCaps;
    DWORD ShadeCaps;
    DWORD TextureCaps;
    DWORD TextureFilterCaps;
    DWORD CubeTextureFilterCaps;
    DWORD VolumeTextureFilterCaps;
    DWORD TextureAddressCaps;
    DWORD VolumeTextureAddressCaps;
    DWORD LineCaps;
    DWORD MaxTextureWidth;
    DWORD MaxTextureHeight;
    DWORD MaxVolumeExtent;
    DWORD MaxTextureRepeat;
    DWORD MaxTextureAspectRatio;
    DWORD MaxAnisotropy;
    FLOAT MaxVertexW;
    FLOAT GuardBandLeft;
    FLOAT GuardBandTop;
    FLOAT GuardBandRight;
    FLOAT GuardBandBottom;
    FLOAT ExtentsAdjust;
    DWORD StencilCaps;
    DWORD FVFCaps;
    DWORD TextureOpCaps;
    DWORD MaxTextureBlendStages;
    DWORD MaxSimultaneousTextures;
    DWORD VertexProcessingCaps;
    DWORD MaxActiveLights;
    DWORD MaxUserClipPlanes;
    DWORD MaxVertexBlendMatrices;
    DWORD MaxVertexBlendMatrixIndex;
    FLOAT MaxPointSize;
    DWORD MaxPrimitiveCount;
    DWORD MaxVertexIndex;
    DWORD MaxStreams;
    DWORD MaxStreamStride;
    DWORD VertexShaderVersion;
    DWORD MaxVertexShaderConst;
    DWORD PixelShaderVersion;
    FLOAT PixelShader1xMaxValue;
    DWORD DevCaps2;
    FLOAT MaxNpatchTessellationLevel;
    DWORD Reserved5;
    DWORD MasterAdapterOrdinal;
    DWORD AdapterOrdinalInGroup;
    DWORD NumberOfAdaptersInGroup;
    DWORD DeclTypes;
    DWORD NumSimultaneousRTs;
    DWORD StretchRectFilterCaps;
    D3DVSHADERCAPS2_0 VS20Caps;
    D3DPSHADERCAPS2_0 PS20Caps;
    DWORD VertexTextureFilterCaps;
    DWORD MaxVShaderInstructionsExecuted;
    DWORD MaxPShaderInstructionsExecuted;
    DWORD MaxVertexShader30InstructionSlots;
    DWORD MaxPixelShader30InstructionSlots;
} D3DCAPS9;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3DVSHADERCAPS2_0
{
    public uint Caps;
    public int DynamicFlowControlDepth;
    public int NumTemps;
    public int StaticFlowControlDepth;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3DPSHADERCAPS2_0
{
    public uint Caps;
    public int DynamicFlowControlDepth;
    public int NumTemps;
    public int StaticFlowControlDepth;
    public int NumInstructionSlots;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct D3DCAPS9
{
    public int DeviceType;
    public uint AdapterOrdinal;
    public uint Caps;
    public uint Caps2;
    public uint Caps3;
    public uint PresentationIntervals;
    public uint CursorCaps;
    public uint DevCaps;
    public uint PrimitiveMiscCaps;
    public uint RasterCaps;
    public uint ZCmpCaps;
    public uint SrcBlendCaps;
    public uint DestBlendCaps;
    public uint AlphaCmpCaps;
    public uint ShadeCaps;
    public uint TextureCaps;
    public uint TextureFilterCaps;
    public uint CubeTextureFilterCaps;
    public uint VolumeTextureFilterCaps;
    public uint TextureAddressCaps;
    public uint VolumeTextureAddressCaps;
    public uint LineCaps;
    public uint MaxTextureWidth;
    public uint MaxTextureHeight;
    public uint MaxVolumeExtent;
    public uint MaxTextureRepeat;
    public uint MaxTextureAspectRatio;
    public uint MaxAnisotropy;
    public float MaxVertexW;
    public float GuardBandLeft;
    public float GuardBandTop;
    public float GuardBandRight;
    public float GuardBandBottom;
    public float ExtentsAdjust;
    public uint StencilCaps;
    public uint FVFCaps;
    public uint TextureOpCaps;
    public uint MaxTextureBlendStages;
    public uint MaxSimultaneousTextures;
    public uint VertexProcessingCaps;
    public uint MaxActiveLights;
    public uint MaxUserClipPlanes;
    public uint MaxVertexBlendMatrices;
    public uint MaxVertexBlendMatrixIndex;
    public float MaxPointSize;
    public uint MaxPrimitiveCount;
    public uint MaxVertexIndex;
    public uint MaxStreams;
    public uint MaxStreamStride;
    public uint VertexShaderVersion;
    public uint MaxVertexShaderConst;
    public uint PixelShaderVersion;
    public float PixelShader1xMaxValue;
    public uint DevCaps2;
    public float MaxNpatchTessellationLevel;
    public uint Reserved5;
    public uint MasterAdapterOrdinal;
    public uint AdapterOrdinalInGroup;
    public uint NumberOfAdaptersInGroup;
    public uint DeclTypes;
    public uint NumSimultaneousRTs;
    public uint StretchRectFilterCaps;
    public D3DVSHADERCAPS2_0 VS20Caps;
    public D3DPSHADERCAPS2_0 PS20Caps;
    public uint VertexTextureFilterCaps;
    public uint MaxVShaderInstructionsExecuted;
    public uint MaxPShaderInstructionsExecuted;
    public uint MaxVertexShader30InstructionSlots;
    public uint MaxPixelShader30InstructionSlots;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3DVSHADERCAPS2_0
    Public Caps As UInteger
    Public DynamicFlowControlDepth As Integer
    Public NumTemps As Integer
    Public StaticFlowControlDepth As Integer
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3DPSHADERCAPS2_0
    Public Caps As UInteger
    Public DynamicFlowControlDepth As Integer
    Public NumTemps As Integer
    Public StaticFlowControlDepth As Integer
    Public NumInstructionSlots As Integer
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure D3DCAPS9
    Public DeviceType As Integer
    Public AdapterOrdinal As UInteger
    Public Caps As UInteger
    Public Caps2 As UInteger
    Public Caps3 As UInteger
    Public PresentationIntervals As UInteger
    Public CursorCaps As UInteger
    Public DevCaps As UInteger
    Public PrimitiveMiscCaps As UInteger
    Public RasterCaps As UInteger
    Public ZCmpCaps As UInteger
    Public SrcBlendCaps As UInteger
    Public DestBlendCaps As UInteger
    Public AlphaCmpCaps As UInteger
    Public ShadeCaps As UInteger
    Public TextureCaps As UInteger
    Public TextureFilterCaps As UInteger
    Public CubeTextureFilterCaps As UInteger
    Public VolumeTextureFilterCaps As UInteger
    Public TextureAddressCaps As UInteger
    Public VolumeTextureAddressCaps As UInteger
    Public LineCaps As UInteger
    Public MaxTextureWidth As UInteger
    Public MaxTextureHeight As UInteger
    Public MaxVolumeExtent As UInteger
    Public MaxTextureRepeat As UInteger
    Public MaxTextureAspectRatio As UInteger
    Public MaxAnisotropy As UInteger
    Public MaxVertexW As Single
    Public GuardBandLeft As Single
    Public GuardBandTop As Single
    Public GuardBandRight As Single
    Public GuardBandBottom As Single
    Public ExtentsAdjust As Single
    Public StencilCaps As UInteger
    Public FVFCaps As UInteger
    Public TextureOpCaps As UInteger
    Public MaxTextureBlendStages As UInteger
    Public MaxSimultaneousTextures As UInteger
    Public VertexProcessingCaps As UInteger
    Public MaxActiveLights As UInteger
    Public MaxUserClipPlanes As UInteger
    Public MaxVertexBlendMatrices As UInteger
    Public MaxVertexBlendMatrixIndex As UInteger
    Public MaxPointSize As Single
    Public MaxPrimitiveCount As UInteger
    Public MaxVertexIndex As UInteger
    Public MaxStreams As UInteger
    Public MaxStreamStride As UInteger
    Public VertexShaderVersion As UInteger
    Public MaxVertexShaderConst As UInteger
    Public PixelShaderVersion As UInteger
    Public PixelShader1xMaxValue As Single
    Public DevCaps2 As UInteger
    Public MaxNpatchTessellationLevel As Single
    Public Reserved5 As UInteger
    Public MasterAdapterOrdinal As UInteger
    Public AdapterOrdinalInGroup As UInteger
    Public NumberOfAdaptersInGroup As UInteger
    Public DeclTypes As UInteger
    Public NumSimultaneousRTs As UInteger
    Public StretchRectFilterCaps As UInteger
    Public VS20Caps As D3DVSHADERCAPS2_0
    Public PS20Caps As D3DPSHADERCAPS2_0
    Public VertexTextureFilterCaps As UInteger
    Public MaxVShaderInstructionsExecuted As UInteger
    Public MaxPShaderInstructionsExecuted As UInteger
    Public MaxVertexShader30InstructionSlots As UInteger
    Public MaxPixelShader30InstructionSlots As UInteger
End Structure
import ctypes
from ctypes import wintypes

class D3DVSHADERCAPS2_0(ctypes.Structure):
    _fields_ = [
        ("Caps", wintypes.DWORD),
        ("DynamicFlowControlDepth", ctypes.c_int),
        ("NumTemps", ctypes.c_int),
        ("StaticFlowControlDepth", ctypes.c_int),
    ]

class D3DPSHADERCAPS2_0(ctypes.Structure):
    _fields_ = [
        ("Caps", wintypes.DWORD),
        ("DynamicFlowControlDepth", ctypes.c_int),
        ("NumTemps", ctypes.c_int),
        ("StaticFlowControlDepth", ctypes.c_int),
        ("NumInstructionSlots", ctypes.c_int),
    ]

class D3DCAPS9(ctypes.Structure):
    _fields_ = [
        ("DeviceType", ctypes.c_int),
        ("AdapterOrdinal", wintypes.DWORD),
        ("Caps", wintypes.DWORD),
        ("Caps2", wintypes.DWORD),
        ("Caps3", wintypes.DWORD),
        ("PresentationIntervals", wintypes.DWORD),
        ("CursorCaps", wintypes.DWORD),
        ("DevCaps", wintypes.DWORD),
        ("PrimitiveMiscCaps", wintypes.DWORD),
        ("RasterCaps", wintypes.DWORD),
        ("ZCmpCaps", wintypes.DWORD),
        ("SrcBlendCaps", wintypes.DWORD),
        ("DestBlendCaps", wintypes.DWORD),
        ("AlphaCmpCaps", wintypes.DWORD),
        ("ShadeCaps", wintypes.DWORD),
        ("TextureCaps", wintypes.DWORD),
        ("TextureFilterCaps", wintypes.DWORD),
        ("CubeTextureFilterCaps", wintypes.DWORD),
        ("VolumeTextureFilterCaps", wintypes.DWORD),
        ("TextureAddressCaps", wintypes.DWORD),
        ("VolumeTextureAddressCaps", wintypes.DWORD),
        ("LineCaps", wintypes.DWORD),
        ("MaxTextureWidth", wintypes.DWORD),
        ("MaxTextureHeight", wintypes.DWORD),
        ("MaxVolumeExtent", wintypes.DWORD),
        ("MaxTextureRepeat", wintypes.DWORD),
        ("MaxTextureAspectRatio", wintypes.DWORD),
        ("MaxAnisotropy", wintypes.DWORD),
        ("MaxVertexW", ctypes.c_float),
        ("GuardBandLeft", ctypes.c_float),
        ("GuardBandTop", ctypes.c_float),
        ("GuardBandRight", ctypes.c_float),
        ("GuardBandBottom", ctypes.c_float),
        ("ExtentsAdjust", ctypes.c_float),
        ("StencilCaps", wintypes.DWORD),
        ("FVFCaps", wintypes.DWORD),
        ("TextureOpCaps", wintypes.DWORD),
        ("MaxTextureBlendStages", wintypes.DWORD),
        ("MaxSimultaneousTextures", wintypes.DWORD),
        ("VertexProcessingCaps", wintypes.DWORD),
        ("MaxActiveLights", wintypes.DWORD),
        ("MaxUserClipPlanes", wintypes.DWORD),
        ("MaxVertexBlendMatrices", wintypes.DWORD),
        ("MaxVertexBlendMatrixIndex", wintypes.DWORD),
        ("MaxPointSize", ctypes.c_float),
        ("MaxPrimitiveCount", wintypes.DWORD),
        ("MaxVertexIndex", wintypes.DWORD),
        ("MaxStreams", wintypes.DWORD),
        ("MaxStreamStride", wintypes.DWORD),
        ("VertexShaderVersion", wintypes.DWORD),
        ("MaxVertexShaderConst", wintypes.DWORD),
        ("PixelShaderVersion", wintypes.DWORD),
        ("PixelShader1xMaxValue", ctypes.c_float),
        ("DevCaps2", wintypes.DWORD),
        ("MaxNpatchTessellationLevel", ctypes.c_float),
        ("Reserved5", wintypes.DWORD),
        ("MasterAdapterOrdinal", wintypes.DWORD),
        ("AdapterOrdinalInGroup", wintypes.DWORD),
        ("NumberOfAdaptersInGroup", wintypes.DWORD),
        ("DeclTypes", wintypes.DWORD),
        ("NumSimultaneousRTs", wintypes.DWORD),
        ("StretchRectFilterCaps", wintypes.DWORD),
        ("VS20Caps", D3DVSHADERCAPS2_0),
        ("PS20Caps", D3DPSHADERCAPS2_0),
        ("VertexTextureFilterCaps", wintypes.DWORD),
        ("MaxVShaderInstructionsExecuted", wintypes.DWORD),
        ("MaxPShaderInstructionsExecuted", wintypes.DWORD),
        ("MaxVertexShader30InstructionSlots", wintypes.DWORD),
        ("MaxPixelShader30InstructionSlots", wintypes.DWORD),
    ]
#[repr(C)]
pub struct D3DVSHADERCAPS2_0 {
    pub Caps: u32,
    pub DynamicFlowControlDepth: i32,
    pub NumTemps: i32,
    pub StaticFlowControlDepth: i32,
}

#[repr(C)]
pub struct D3DPSHADERCAPS2_0 {
    pub Caps: u32,
    pub DynamicFlowControlDepth: i32,
    pub NumTemps: i32,
    pub StaticFlowControlDepth: i32,
    pub NumInstructionSlots: i32,
}

#[repr(C)]
pub struct D3DCAPS9 {
    pub DeviceType: i32,
    pub AdapterOrdinal: u32,
    pub Caps: u32,
    pub Caps2: u32,
    pub Caps3: u32,
    pub PresentationIntervals: u32,
    pub CursorCaps: u32,
    pub DevCaps: u32,
    pub PrimitiveMiscCaps: u32,
    pub RasterCaps: u32,
    pub ZCmpCaps: u32,
    pub SrcBlendCaps: u32,
    pub DestBlendCaps: u32,
    pub AlphaCmpCaps: u32,
    pub ShadeCaps: u32,
    pub TextureCaps: u32,
    pub TextureFilterCaps: u32,
    pub CubeTextureFilterCaps: u32,
    pub VolumeTextureFilterCaps: u32,
    pub TextureAddressCaps: u32,
    pub VolumeTextureAddressCaps: u32,
    pub LineCaps: u32,
    pub MaxTextureWidth: u32,
    pub MaxTextureHeight: u32,
    pub MaxVolumeExtent: u32,
    pub MaxTextureRepeat: u32,
    pub MaxTextureAspectRatio: u32,
    pub MaxAnisotropy: u32,
    pub MaxVertexW: f32,
    pub GuardBandLeft: f32,
    pub GuardBandTop: f32,
    pub GuardBandRight: f32,
    pub GuardBandBottom: f32,
    pub ExtentsAdjust: f32,
    pub StencilCaps: u32,
    pub FVFCaps: u32,
    pub TextureOpCaps: u32,
    pub MaxTextureBlendStages: u32,
    pub MaxSimultaneousTextures: u32,
    pub VertexProcessingCaps: u32,
    pub MaxActiveLights: u32,
    pub MaxUserClipPlanes: u32,
    pub MaxVertexBlendMatrices: u32,
    pub MaxVertexBlendMatrixIndex: u32,
    pub MaxPointSize: f32,
    pub MaxPrimitiveCount: u32,
    pub MaxVertexIndex: u32,
    pub MaxStreams: u32,
    pub MaxStreamStride: u32,
    pub VertexShaderVersion: u32,
    pub MaxVertexShaderConst: u32,
    pub PixelShaderVersion: u32,
    pub PixelShader1xMaxValue: f32,
    pub DevCaps2: u32,
    pub MaxNpatchTessellationLevel: f32,
    pub Reserved5: u32,
    pub MasterAdapterOrdinal: u32,
    pub AdapterOrdinalInGroup: u32,
    pub NumberOfAdaptersInGroup: u32,
    pub DeclTypes: u32,
    pub NumSimultaneousRTs: u32,
    pub StretchRectFilterCaps: u32,
    pub VS20Caps: D3DVSHADERCAPS2_0,
    pub PS20Caps: D3DPSHADERCAPS2_0,
    pub VertexTextureFilterCaps: u32,
    pub MaxVShaderInstructionsExecuted: u32,
    pub MaxPShaderInstructionsExecuted: u32,
    pub MaxVertexShader30InstructionSlots: u32,
    pub MaxPixelShader30InstructionSlots: u32,
}
import "golang.org/x/sys/windows"

type D3DVSHADERCAPS2_0 struct {
	Caps uint32
	DynamicFlowControlDepth int32
	NumTemps int32
	StaticFlowControlDepth int32
}

type D3DPSHADERCAPS2_0 struct {
	Caps uint32
	DynamicFlowControlDepth int32
	NumTemps int32
	StaticFlowControlDepth int32
	NumInstructionSlots int32
}

type D3DCAPS9 struct {
	DeviceType int32
	AdapterOrdinal uint32
	Caps uint32
	Caps2 uint32
	Caps3 uint32
	PresentationIntervals uint32
	CursorCaps uint32
	DevCaps uint32
	PrimitiveMiscCaps uint32
	RasterCaps uint32
	ZCmpCaps uint32
	SrcBlendCaps uint32
	DestBlendCaps uint32
	AlphaCmpCaps uint32
	ShadeCaps uint32
	TextureCaps uint32
	TextureFilterCaps uint32
	CubeTextureFilterCaps uint32
	VolumeTextureFilterCaps uint32
	TextureAddressCaps uint32
	VolumeTextureAddressCaps uint32
	LineCaps uint32
	MaxTextureWidth uint32
	MaxTextureHeight uint32
	MaxVolumeExtent uint32
	MaxTextureRepeat uint32
	MaxTextureAspectRatio uint32
	MaxAnisotropy uint32
	MaxVertexW float32
	GuardBandLeft float32
	GuardBandTop float32
	GuardBandRight float32
	GuardBandBottom float32
	ExtentsAdjust float32
	StencilCaps uint32
	FVFCaps uint32
	TextureOpCaps uint32
	MaxTextureBlendStages uint32
	MaxSimultaneousTextures uint32
	VertexProcessingCaps uint32
	MaxActiveLights uint32
	MaxUserClipPlanes uint32
	MaxVertexBlendMatrices uint32
	MaxVertexBlendMatrixIndex uint32
	MaxPointSize float32
	MaxPrimitiveCount uint32
	MaxVertexIndex uint32
	MaxStreams uint32
	MaxStreamStride uint32
	VertexShaderVersion uint32
	MaxVertexShaderConst uint32
	PixelShaderVersion uint32
	PixelShader1xMaxValue float32
	DevCaps2 uint32
	MaxNpatchTessellationLevel float32
	Reserved5 uint32
	MasterAdapterOrdinal uint32
	AdapterOrdinalInGroup uint32
	NumberOfAdaptersInGroup uint32
	DeclTypes uint32
	NumSimultaneousRTs uint32
	StretchRectFilterCaps uint32
	VS20Caps D3DVSHADERCAPS2_0
	PS20Caps D3DPSHADERCAPS2_0
	VertexTextureFilterCaps uint32
	MaxVShaderInstructionsExecuted uint32
	MaxPShaderInstructionsExecuted uint32
	MaxVertexShader30InstructionSlots uint32
	MaxPixelShader30InstructionSlots uint32
}
type
  D3DVSHADERCAPS2_0 = record
    Caps: DWORD;
    DynamicFlowControlDepth: Integer;
    NumTemps: Integer;
    StaticFlowControlDepth: Integer;
  end;

  D3DPSHADERCAPS2_0 = record
    Caps: DWORD;
    DynamicFlowControlDepth: Integer;
    NumTemps: Integer;
    StaticFlowControlDepth: Integer;
    NumInstructionSlots: Integer;
  end;

  D3DCAPS9 = record
    DeviceType: Integer;
    AdapterOrdinal: DWORD;
    Caps: DWORD;
    Caps2: DWORD;
    Caps3: DWORD;
    PresentationIntervals: DWORD;
    CursorCaps: DWORD;
    DevCaps: DWORD;
    PrimitiveMiscCaps: DWORD;
    RasterCaps: DWORD;
    ZCmpCaps: DWORD;
    SrcBlendCaps: DWORD;
    DestBlendCaps: DWORD;
    AlphaCmpCaps: DWORD;
    ShadeCaps: DWORD;
    TextureCaps: DWORD;
    TextureFilterCaps: DWORD;
    CubeTextureFilterCaps: DWORD;
    VolumeTextureFilterCaps: DWORD;
    TextureAddressCaps: DWORD;
    VolumeTextureAddressCaps: DWORD;
    LineCaps: DWORD;
    MaxTextureWidth: DWORD;
    MaxTextureHeight: DWORD;
    MaxVolumeExtent: DWORD;
    MaxTextureRepeat: DWORD;
    MaxTextureAspectRatio: DWORD;
    MaxAnisotropy: DWORD;
    MaxVertexW: Single;
    GuardBandLeft: Single;
    GuardBandTop: Single;
    GuardBandRight: Single;
    GuardBandBottom: Single;
    ExtentsAdjust: Single;
    StencilCaps: DWORD;
    FVFCaps: DWORD;
    TextureOpCaps: DWORD;
    MaxTextureBlendStages: DWORD;
    MaxSimultaneousTextures: DWORD;
    VertexProcessingCaps: DWORD;
    MaxActiveLights: DWORD;
    MaxUserClipPlanes: DWORD;
    MaxVertexBlendMatrices: DWORD;
    MaxVertexBlendMatrixIndex: DWORD;
    MaxPointSize: Single;
    MaxPrimitiveCount: DWORD;
    MaxVertexIndex: DWORD;
    MaxStreams: DWORD;
    MaxStreamStride: DWORD;
    VertexShaderVersion: DWORD;
    MaxVertexShaderConst: DWORD;
    PixelShaderVersion: DWORD;
    PixelShader1xMaxValue: Single;
    DevCaps2: DWORD;
    MaxNpatchTessellationLevel: Single;
    Reserved5: DWORD;
    MasterAdapterOrdinal: DWORD;
    AdapterOrdinalInGroup: DWORD;
    NumberOfAdaptersInGroup: DWORD;
    DeclTypes: DWORD;
    NumSimultaneousRTs: DWORD;
    StretchRectFilterCaps: DWORD;
    VS20Caps: D3DVSHADERCAPS2_0;
    PS20Caps: D3DPSHADERCAPS2_0;
    VertexTextureFilterCaps: DWORD;
    MaxVShaderInstructionsExecuted: DWORD;
    MaxPShaderInstructionsExecuted: DWORD;
    MaxVertexShader30InstructionSlots: DWORD;
    MaxPixelShader30InstructionSlots: DWORD;
  end;
const D3DVSHADERCAPS2_0 = extern struct {
    Caps: u32,
    DynamicFlowControlDepth: i32,
    NumTemps: i32,
    StaticFlowControlDepth: i32,
};

const D3DPSHADERCAPS2_0 = extern struct {
    Caps: u32,
    DynamicFlowControlDepth: i32,
    NumTemps: i32,
    StaticFlowControlDepth: i32,
    NumInstructionSlots: i32,
};

const D3DCAPS9 = extern struct {
    DeviceType: i32,
    AdapterOrdinal: u32,
    Caps: u32,
    Caps2: u32,
    Caps3: u32,
    PresentationIntervals: u32,
    CursorCaps: u32,
    DevCaps: u32,
    PrimitiveMiscCaps: u32,
    RasterCaps: u32,
    ZCmpCaps: u32,
    SrcBlendCaps: u32,
    DestBlendCaps: u32,
    AlphaCmpCaps: u32,
    ShadeCaps: u32,
    TextureCaps: u32,
    TextureFilterCaps: u32,
    CubeTextureFilterCaps: u32,
    VolumeTextureFilterCaps: u32,
    TextureAddressCaps: u32,
    VolumeTextureAddressCaps: u32,
    LineCaps: u32,
    MaxTextureWidth: u32,
    MaxTextureHeight: u32,
    MaxVolumeExtent: u32,
    MaxTextureRepeat: u32,
    MaxTextureAspectRatio: u32,
    MaxAnisotropy: u32,
    MaxVertexW: f32,
    GuardBandLeft: f32,
    GuardBandTop: f32,
    GuardBandRight: f32,
    GuardBandBottom: f32,
    ExtentsAdjust: f32,
    StencilCaps: u32,
    FVFCaps: u32,
    TextureOpCaps: u32,
    MaxTextureBlendStages: u32,
    MaxSimultaneousTextures: u32,
    VertexProcessingCaps: u32,
    MaxActiveLights: u32,
    MaxUserClipPlanes: u32,
    MaxVertexBlendMatrices: u32,
    MaxVertexBlendMatrixIndex: u32,
    MaxPointSize: f32,
    MaxPrimitiveCount: u32,
    MaxVertexIndex: u32,
    MaxStreams: u32,
    MaxStreamStride: u32,
    VertexShaderVersion: u32,
    MaxVertexShaderConst: u32,
    PixelShaderVersion: u32,
    PixelShader1xMaxValue: f32,
    DevCaps2: u32,
    MaxNpatchTessellationLevel: f32,
    Reserved5: u32,
    MasterAdapterOrdinal: u32,
    AdapterOrdinalInGroup: u32,
    NumberOfAdaptersInGroup: u32,
    DeclTypes: u32,
    NumSimultaneousRTs: u32,
    StretchRectFilterCaps: u32,
    VS20Caps: D3DVSHADERCAPS2_0,
    PS20Caps: D3DPSHADERCAPS2_0,
    VertexTextureFilterCaps: u32,
    MaxVShaderInstructionsExecuted: u32,
    MaxPShaderInstructionsExecuted: u32,
    MaxVertexShader30InstructionSlots: u32,
    MaxPixelShader30InstructionSlots: u32,
};
type
  D3DVSHADERCAPS2_0 {.bycopy.} = object
    Caps: uint32
    DynamicFlowControlDepth: int32
    NumTemps: int32
    StaticFlowControlDepth: int32

  D3DPSHADERCAPS2_0 {.bycopy.} = object
    Caps: uint32
    DynamicFlowControlDepth: int32
    NumTemps: int32
    StaticFlowControlDepth: int32
    NumInstructionSlots: int32

  D3DCAPS9 {.bycopy.} = object
    DeviceType: int32
    AdapterOrdinal: uint32
    Caps: uint32
    Caps2: uint32
    Caps3: uint32
    PresentationIntervals: uint32
    CursorCaps: uint32
    DevCaps: uint32
    PrimitiveMiscCaps: uint32
    RasterCaps: uint32
    ZCmpCaps: uint32
    SrcBlendCaps: uint32
    DestBlendCaps: uint32
    AlphaCmpCaps: uint32
    ShadeCaps: uint32
    TextureCaps: uint32
    TextureFilterCaps: uint32
    CubeTextureFilterCaps: uint32
    VolumeTextureFilterCaps: uint32
    TextureAddressCaps: uint32
    VolumeTextureAddressCaps: uint32
    LineCaps: uint32
    MaxTextureWidth: uint32
    MaxTextureHeight: uint32
    MaxVolumeExtent: uint32
    MaxTextureRepeat: uint32
    MaxTextureAspectRatio: uint32
    MaxAnisotropy: uint32
    MaxVertexW: float32
    GuardBandLeft: float32
    GuardBandTop: float32
    GuardBandRight: float32
    GuardBandBottom: float32
    ExtentsAdjust: float32
    StencilCaps: uint32
    FVFCaps: uint32
    TextureOpCaps: uint32
    MaxTextureBlendStages: uint32
    MaxSimultaneousTextures: uint32
    VertexProcessingCaps: uint32
    MaxActiveLights: uint32
    MaxUserClipPlanes: uint32
    MaxVertexBlendMatrices: uint32
    MaxVertexBlendMatrixIndex: uint32
    MaxPointSize: float32
    MaxPrimitiveCount: uint32
    MaxVertexIndex: uint32
    MaxStreams: uint32
    MaxStreamStride: uint32
    VertexShaderVersion: uint32
    MaxVertexShaderConst: uint32
    PixelShaderVersion: uint32
    PixelShader1xMaxValue: float32
    DevCaps2: uint32
    MaxNpatchTessellationLevel: float32
    Reserved5: uint32
    MasterAdapterOrdinal: uint32
    AdapterOrdinalInGroup: uint32
    NumberOfAdaptersInGroup: uint32
    DeclTypes: uint32
    NumSimultaneousRTs: uint32
    StretchRectFilterCaps: uint32
    VS20Caps: D3DVSHADERCAPS2_0
    PS20Caps: D3DPSHADERCAPS2_0
    VertexTextureFilterCaps: uint32
    MaxVShaderInstructionsExecuted: uint32
    MaxPShaderInstructionsExecuted: uint32
    MaxVertexShader30InstructionSlots: uint32
    MaxPixelShader30InstructionSlots: uint32
struct D3DVSHADERCAPS2_0
{
    uint Caps;
    int DynamicFlowControlDepth;
    int NumTemps;
    int StaticFlowControlDepth;
}

struct D3DPSHADERCAPS2_0
{
    uint Caps;
    int DynamicFlowControlDepth;
    int NumTemps;
    int StaticFlowControlDepth;
    int NumInstructionSlots;
}

struct D3DCAPS9
{
    int DeviceType;
    uint AdapterOrdinal;
    uint Caps;
    uint Caps2;
    uint Caps3;
    uint PresentationIntervals;
    uint CursorCaps;
    uint DevCaps;
    uint PrimitiveMiscCaps;
    uint RasterCaps;
    uint ZCmpCaps;
    uint SrcBlendCaps;
    uint DestBlendCaps;
    uint AlphaCmpCaps;
    uint ShadeCaps;
    uint TextureCaps;
    uint TextureFilterCaps;
    uint CubeTextureFilterCaps;
    uint VolumeTextureFilterCaps;
    uint TextureAddressCaps;
    uint VolumeTextureAddressCaps;
    uint LineCaps;
    uint MaxTextureWidth;
    uint MaxTextureHeight;
    uint MaxVolumeExtent;
    uint MaxTextureRepeat;
    uint MaxTextureAspectRatio;
    uint MaxAnisotropy;
    float MaxVertexW;
    float GuardBandLeft;
    float GuardBandTop;
    float GuardBandRight;
    float GuardBandBottom;
    float ExtentsAdjust;
    uint StencilCaps;
    uint FVFCaps;
    uint TextureOpCaps;
    uint MaxTextureBlendStages;
    uint MaxSimultaneousTextures;
    uint VertexProcessingCaps;
    uint MaxActiveLights;
    uint MaxUserClipPlanes;
    uint MaxVertexBlendMatrices;
    uint MaxVertexBlendMatrixIndex;
    float MaxPointSize;
    uint MaxPrimitiveCount;
    uint MaxVertexIndex;
    uint MaxStreams;
    uint MaxStreamStride;
    uint VertexShaderVersion;
    uint MaxVertexShaderConst;
    uint PixelShaderVersion;
    float PixelShader1xMaxValue;
    uint DevCaps2;
    float MaxNpatchTessellationLevel;
    uint Reserved5;
    uint MasterAdapterOrdinal;
    uint AdapterOrdinalInGroup;
    uint NumberOfAdaptersInGroup;
    uint DeclTypes;
    uint NumSimultaneousRTs;
    uint StretchRectFilterCaps;
    D3DVSHADERCAPS2_0 VS20Caps;
    D3DPSHADERCAPS2_0 PS20Caps;
    uint VertexTextureFilterCaps;
    uint MaxVShaderInstructionsExecuted;
    uint MaxPShaderInstructionsExecuted;
    uint MaxVertexShader30InstructionSlots;
    uint MaxPixelShader30InstructionSlots;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; D3DCAPS9 サイズ: 304 バイト(x64)
dim st, 76    ; 4byte整数×76(構造体サイズ 304 / 4 切り上げ)
; DeviceType : D3DDEVTYPE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; AdapterOrdinal : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; Caps : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; Caps2 : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; Caps3 : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; PresentationIntervals : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; CursorCaps : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; DevCaps : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; PrimitiveMiscCaps : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; RasterCaps : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ZCmpCaps : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; SrcBlendCaps : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; DestBlendCaps : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; AlphaCmpCaps : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ShadeCaps : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; TextureCaps : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; TextureFilterCaps : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; CubeTextureFilterCaps : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; VolumeTextureFilterCaps : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; TextureAddressCaps : DWORD (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; VolumeTextureAddressCaps : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; LineCaps : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; MaxTextureWidth : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; MaxTextureHeight : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; MaxVolumeExtent : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; MaxTextureRepeat : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; MaxTextureAspectRatio : DWORD (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; MaxAnisotropy : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; MaxVertexW : FLOAT (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; GuardBandLeft : FLOAT (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; GuardBandTop : FLOAT (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; GuardBandRight : FLOAT (+124, 4byte)  st.31 = 値  /  値 = st.31   (lpoke/lpeek も可)
; GuardBandBottom : FLOAT (+128, 4byte)  st.32 = 値  /  値 = st.32   (lpoke/lpeek も可)
; ExtentsAdjust : FLOAT (+132, 4byte)  st.33 = 値  /  値 = st.33   (lpoke/lpeek も可)
; StencilCaps : DWORD (+136, 4byte)  st.34 = 値  /  値 = st.34   (lpoke/lpeek も可)
; FVFCaps : DWORD (+140, 4byte)  st.35 = 値  /  値 = st.35   (lpoke/lpeek も可)
; TextureOpCaps : DWORD (+144, 4byte)  st.36 = 値  /  値 = st.36   (lpoke/lpeek も可)
; MaxTextureBlendStages : DWORD (+148, 4byte)  st.37 = 値  /  値 = st.37   (lpoke/lpeek も可)
; MaxSimultaneousTextures : DWORD (+152, 4byte)  st.38 = 値  /  値 = st.38   (lpoke/lpeek も可)
; VertexProcessingCaps : DWORD (+156, 4byte)  st.39 = 値  /  値 = st.39   (lpoke/lpeek も可)
; MaxActiveLights : DWORD (+160, 4byte)  st.40 = 値  /  値 = st.40   (lpoke/lpeek も可)
; MaxUserClipPlanes : DWORD (+164, 4byte)  st.41 = 値  /  値 = st.41   (lpoke/lpeek も可)
; MaxVertexBlendMatrices : DWORD (+168, 4byte)  st.42 = 値  /  値 = st.42   (lpoke/lpeek も可)
; MaxVertexBlendMatrixIndex : DWORD (+172, 4byte)  st.43 = 値  /  値 = st.43   (lpoke/lpeek も可)
; MaxPointSize : FLOAT (+176, 4byte)  st.44 = 値  /  値 = st.44   (lpoke/lpeek も可)
; MaxPrimitiveCount : DWORD (+180, 4byte)  st.45 = 値  /  値 = st.45   (lpoke/lpeek も可)
; MaxVertexIndex : DWORD (+184, 4byte)  st.46 = 値  /  値 = st.46   (lpoke/lpeek も可)
; MaxStreams : DWORD (+188, 4byte)  st.47 = 値  /  値 = st.47   (lpoke/lpeek も可)
; MaxStreamStride : DWORD (+192, 4byte)  st.48 = 値  /  値 = st.48   (lpoke/lpeek も可)
; VertexShaderVersion : DWORD (+196, 4byte)  st.49 = 値  /  値 = st.49   (lpoke/lpeek も可)
; MaxVertexShaderConst : DWORD (+200, 4byte)  st.50 = 値  /  値 = st.50   (lpoke/lpeek も可)
; PixelShaderVersion : DWORD (+204, 4byte)  st.51 = 値  /  値 = st.51   (lpoke/lpeek も可)
; PixelShader1xMaxValue : FLOAT (+208, 4byte)  st.52 = 値  /  値 = st.52   (lpoke/lpeek も可)
; DevCaps2 : DWORD (+212, 4byte)  st.53 = 値  /  値 = st.53   (lpoke/lpeek も可)
; MaxNpatchTessellationLevel : FLOAT (+216, 4byte)  st.54 = 値  /  値 = st.54   (lpoke/lpeek も可)
; Reserved5 : DWORD (+220, 4byte)  st.55 = 値  /  値 = st.55   (lpoke/lpeek も可)
; MasterAdapterOrdinal : DWORD (+224, 4byte)  st.56 = 値  /  値 = st.56   (lpoke/lpeek も可)
; AdapterOrdinalInGroup : DWORD (+228, 4byte)  st.57 = 値  /  値 = st.57   (lpoke/lpeek も可)
; NumberOfAdaptersInGroup : DWORD (+232, 4byte)  st.58 = 値  /  値 = st.58   (lpoke/lpeek も可)
; DeclTypes : DWORD (+236, 4byte)  st.59 = 値  /  値 = st.59   (lpoke/lpeek も可)
; NumSimultaneousRTs : DWORD (+240, 4byte)  st.60 = 値  /  値 = st.60   (lpoke/lpeek も可)
; StretchRectFilterCaps : DWORD (+244, 4byte)  st.61 = 値  /  値 = st.61   (lpoke/lpeek も可)
; VS20Caps : D3DVSHADERCAPS2_0 (+248, 16byte)  varptr(st)+248 を基点に操作(16byte:入れ子/配列)
; PS20Caps : D3DPSHADERCAPS2_0 (+264, 20byte)  varptr(st)+264 を基点に操作(20byte:入れ子/配列)
; VertexTextureFilterCaps : DWORD (+284, 4byte)  st.71 = 値  /  値 = st.71   (lpoke/lpeek も可)
; MaxVShaderInstructionsExecuted : DWORD (+288, 4byte)  st.72 = 値  /  値 = st.72   (lpoke/lpeek も可)
; MaxPShaderInstructionsExecuted : DWORD (+292, 4byte)  st.73 = 値  /  値 = st.73   (lpoke/lpeek も可)
; MaxVertexShader30InstructionSlots : DWORD (+296, 4byte)  st.74 = 値  /  値 = st.74   (lpoke/lpeek も可)
; MaxPixelShader30InstructionSlots : DWORD (+300, 4byte)  st.75 = 値  /  値 = st.75   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global D3DVSHADERCAPS2_0
    #field int Caps
    #field int DynamicFlowControlDepth
    #field int NumTemps
    #field int StaticFlowControlDepth
#endstruct

#defstruct global D3DPSHADERCAPS2_0
    #field int Caps
    #field int DynamicFlowControlDepth
    #field int NumTemps
    #field int StaticFlowControlDepth
    #field int NumInstructionSlots
#endstruct

#defstruct global D3DCAPS9
    #field int DeviceType
    #field int AdapterOrdinal
    #field int Caps
    #field int Caps2
    #field int Caps3
    #field int PresentationIntervals
    #field int CursorCaps
    #field int DevCaps
    #field int PrimitiveMiscCaps
    #field int RasterCaps
    #field int ZCmpCaps
    #field int SrcBlendCaps
    #field int DestBlendCaps
    #field int AlphaCmpCaps
    #field int ShadeCaps
    #field int TextureCaps
    #field int TextureFilterCaps
    #field int CubeTextureFilterCaps
    #field int VolumeTextureFilterCaps
    #field int TextureAddressCaps
    #field int VolumeTextureAddressCaps
    #field int LineCaps
    #field int MaxTextureWidth
    #field int MaxTextureHeight
    #field int MaxVolumeExtent
    #field int MaxTextureRepeat
    #field int MaxTextureAspectRatio
    #field int MaxAnisotropy
    #field float MaxVertexW
    #field float GuardBandLeft
    #field float GuardBandTop
    #field float GuardBandRight
    #field float GuardBandBottom
    #field float ExtentsAdjust
    #field int StencilCaps
    #field int FVFCaps
    #field int TextureOpCaps
    #field int MaxTextureBlendStages
    #field int MaxSimultaneousTextures
    #field int VertexProcessingCaps
    #field int MaxActiveLights
    #field int MaxUserClipPlanes
    #field int MaxVertexBlendMatrices
    #field int MaxVertexBlendMatrixIndex
    #field float MaxPointSize
    #field int MaxPrimitiveCount
    #field int MaxVertexIndex
    #field int MaxStreams
    #field int MaxStreamStride
    #field int VertexShaderVersion
    #field int MaxVertexShaderConst
    #field int PixelShaderVersion
    #field float PixelShader1xMaxValue
    #field int DevCaps2
    #field float MaxNpatchTessellationLevel
    #field int Reserved5
    #field int MasterAdapterOrdinal
    #field int AdapterOrdinalInGroup
    #field int NumberOfAdaptersInGroup
    #field int DeclTypes
    #field int NumSimultaneousRTs
    #field int StretchRectFilterCaps
    #field D3DVSHADERCAPS2_0 VS20Caps
    #field D3DPSHADERCAPS2_0 PS20Caps
    #field int VertexTextureFilterCaps
    #field int MaxVShaderInstructionsExecuted
    #field int MaxPShaderInstructionsExecuted
    #field int MaxVertexShader30InstructionSlots
    #field int MaxPixelShader30InstructionSlots
#endstruct

stdim st, D3DCAPS9        ; NSTRUCT 変数を確保
st->DeviceType = 100
mes "DeviceType=" + st->DeviceType