CEDEC 2006 - NVIDIA Developer Zone

developer.nvidia.com

CEDEC 2006 - NVIDIA Developer Zone

DX10の 紹 介

ブライアン・デゥダーシュ(Bryan Dudash)

NVIDIA Developer Technology

CEDEC 2006


今 日 のセッション

本 セッション DX10の 紹 介

ブライアン・デゥダーシュ(Bryan Dudash)NVIDIA

14:50 – 15:00 休 憩

15:00 – 16:50 DX10のエフェクトとパフォーマンスならび 使 用 法

ブライアン・デゥダーシュ(Bryan Dudash)NVIDIA

16:50 – 17:00 休 憩

17:00 – 18:30 NVIDIA GPUでの 物 理 演 算

サイモン・グリーン(Simon Green)NVIDIA

Copyright © NVIDIA Corporation 2004

CEDEC 2006


D3D10アジェンダ

D3D9レビュー

D3D10パイプラインおよびコンセプト

D3D10への 移 行

新 しいD3D10アイデアの 用 途

状 態 オブジェクト

リソースタイプおよびアレイ

リソースの 表 示

プレディケートレンダリング

Copyright © NVIDIA Corporation 2004

CEDEC 2006


ここで 話 題 にしない 内 容

エンジンをかっこよくしてくれ ( 凸 凹 をピカピカに)

まずは 基 礎 から。エフェクトは 後 で

バッチ、バッチ、バッチ (パフォーマンス)

パフォーマンスの 話 も 後 ほど !

Copyright © NVIDIA Corporation 2004

CEDEC 2006


D3D10のこれから

D3D10はMicrosoftの 次 の API

新 しいドライバモデル

IHVが 管 理 するカーネルおよびユーザモードドライバ

Vistaが 必 要

リソースの 仮 想 化 をOSが 処 理

D3D10

新 しいプログラマビリティを 導 入

プログラムで 利 用 できるデータが 大 幅 に 増 加

HLSL 専 用

もちろん、プリコンパイル 可 能

Copyright © NVIDIA Corporation 2004

CEDEC 2006


D3D9パイプライン

バーテックスシェーダ

VB/IBメモリ

ラスタライザ

ビデオメモリ

ピクセルシェーダ

テクスチャ

ROP

Copyright © NVIDIA Corporation 2004

CEDEC 2006


D3D10パイプライン

入 力 アセンブラ

バーテックスシェーダ

ジオメトリシェーダ

ラスタライザ

ストリーム 出 力

ビデオメモリ

(バッファ

テクスチャ、

固 定 バッファ)

ピクセルシェーダ

出 力 マージャ

Copyright © NVIDIA Corporation 2004

CEDEC 2006


D3D10 命 名 規 則

ID3D10(IDirect3D10ではない)

ID3D10Device::IA*___( 入 力 アセンブラ)

ID3D10Device::VS*___(バーテックスシェーダ)

ID3D10Device::GS*___(ジオメトリシェーダ)

ID3D10Device::SO*___(ストリームアウト)

ID3D10Device::RS*___(ラスタライザステージ)

ID3D10Device::PS*___(ピクセルシェーダ)

ID3D10Device::OM*___( 出 力 マージャ)

Copyright © NVIDIA Corporation 2004

CEDEC 2006


命 名 規 則 ( 追 加 )

D3D

Direct3D API

DXGI

DirectXグラフィックスインフラストラクチャ

D3DX

D3D 拡 張 ユーティリティ 機 能

HLSL

高 レベルシェーディング 言 語

Copyright © NVIDIA Corporation 2004

CEDEC 2006


D3D9のイニシャライズ

IDirect3D9の 取 得

互 換 デバイスの 確 認

IDirect3DDevice9の 作 成

デバイスキャップのクエリ

DEFAULT_POOLリソースの 作 成

MANAGED_POOLリソースの 作 成

Copyright © NVIDIA Corporation 2004

CEDEC 2006


D3D10のイニシャライズ

IDXGIFactoryの 作 成

IDXDGIOutputの 確 認

IDXGIOutput::FindClosestMatchingMode

ID3D10Deviceの 作 成

SwapChain 使 用

リソースの 作 成

Copyright © NVIDIA Corporation 2004

CEDEC 2006


D3D10 – キャップなし

機 能 セットを 保 証

だいたい。

すべてのフォーマットがファーストクラス

いたるところどこでも 使 用 可

例 外 はほとんどない

RGB32Fブレンディングは 任 意 (RGBA32Fは 必 須 )

フォーマットサポートのチェック

ID3D10Device::CheckFormatSupport

D3D10_FORMAT_SUPPORTが 返 される

Copyright © NVIDIA Corporation 2004

ほとんどのフォーマットと 用 途 が 必 須 。

CEDEC 2006


ID3D10Deviceの 作 成

HRESULT D3D10CreateDeviceAndSwapChain(

IDXGIAdapter * pAdapter,

D3D10_DRIVER_TYPE DriverType,

HMODULE Software,

UINT Flags, Flags |= D3D10_CREATE_DEVICE_DEBUG

UINT SDKVersion,

DXGI_SWAP_CHAIN_DESC * pSwapChainDesc,

IDXGISwapChain ** ppSwapChain,

ID3D10Device ** ppDevice );

Copyright © NVIDIA Corporation 2004

CEDEC 2006


DXGI_SWAP_CHAIN_DESC

typedef struct DXGI_SWAP_CHAIN_DESC {

DXGI_MODE_DESC BackBufferDesc;

DXGI_SAMPLE_DESC SampleDesc;

DXGI_SHARED_RESOURCE Sharing;

DXGI_USAGE BackBufferUsage;

UINT BackBufferCount;

UINT MaxFrameLatency;

HWND OutputWindow;

BOOL Windowed;

DXGI_SWAP_EFFECT SwapEffect;

DXGI_MODE_ROTATION BackBufferRotation;

} DXGI_SWAP_CHAIN_DESC, *LPDXGI_SWAP_CHAIN_DESC;

新 しい 内 容 あり

用 途

シェーダ 入 力 またはRT

レイテンシ

Backbufferローテーション

AutoDepthStencilなし

レイテンシが 可 能

– Multi GPU を 考 慮

Copyright © NVIDIA Corporation 2004

CEDEC 2006


D3D9プログラムフロー

IDirect3DDevice9::BeginSceneeを 呼 び 出 し

VBのアップデートと 設 定

IBの 設 定

バーテックス 宣 言 の 設 定

バーテックスおよびピクセルシェーダの 設 定

VSおよびPS 定 数 のアップデート

テクスチャの 設 定

レンダリング 状 態 の 設 定

アルファテスト/アルファブレンド

深 度 テスト/ 書 き 込 み

適 応 的 テセレーションはいかが


Copyright © NVIDIA Corporation 2004

CEDEC 2006


D3D10プログラムフロー

VBをIASetVertexBuffers()でアップデート

IBをIASetIndexBuffer()で 設 定

バーテックス、ジオメトリおよびピクセルシェーダの 設 定

ID3D10::(VS/GS/PS)SetShader()

(VS/GS/PS)SetConstantBuffers

SetShaderResources()

状 態 オブジェクトの 設 定

IDXGISwapChain::Present()の 呼 び 出 し

Copyright © NVIDIA Corporation 2004

CEDEC 2006


シェーダへのデータ 入 力

入 力 アセンブラ

バーテックスシェーダ

ジオメトリシェーダ

ラスタライザ

ピクセルシェーダ

出 力 マージャ

ストリーム 出 力

ビデオメモリ

(バッファ

テクスチャ、

固 定 バッファ)

SetShaderResources()

テクスチャバッファ

(VS/GS/PS)SetConstantBuffers()

定 数 バッファ

Copyright © NVIDIA Corporation 2004

CEDEC 2006


IASetVertexBuffers()

IASetIndexBuffers()

ID3D10Bufferオブジェクトをバーテックスバッファ

としてバインド

ID3D10Texture*オブジェクトのバインドは 不 可

現 在 バッファは 出 力 としてバインドできない

循 環 バインドなし

バッファはResourceViewと 関 連 付 け 可 能

リソース 表 示 ではリソースのバインドが 可 能

ただし、 表 示 が 別 ステージへの 入 力 の 場 合

出 力 表 示 は 存 在 するが、バインドは 不 可

Copyright © NVIDIA Corporation 2004

CEDEC 2006


バーテックスレイアウト/InputLayout

typedef struct D3D10_INPUT_ELEMENT_DESC {

LPCWSTR SemanticName;

UINT SemanticIndex;

DXGI_FORMAT Format;

UINT InputSlot;

UINT AlignedByteOffset;

D3D10_INPUT_CLASSIFICATION InputSlotClass;

UINT InstanceDataStepRate;

} D3D10_INPUT_ELEMENT_DESC, *LPD3D10_INPUT_ELEMENT_DESC;

const D3D10_INPUT_ELEMENT_DESC groundLayout[] =

{

{ "POSITION",0, DXGI_FORMAT_R32G32B32_FLOAT,0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 },

{ "NORMAL“ ,0, DXGI_FORMAT_R32G32B32_FLOAT,0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0 },

{ "TEXCOORD",0, DXGI_FORMAT_R32G32_FLOAT ,0, 24, D3D10_INPUT_PER_VERTEX_DATA, 0 },

{ "TEXCOORD",1, DXGI_FORMAT_R32G32_FLOAT ,0, 36, D3D10_INPUT_PER_VERTEX_DATA, 0 },

};

ID3D10Device::IASetInputLayout を 呼 び 出 して 設 定

Copyright © NVIDIA Corporation 2004

CEDEC 2006


状 態 オブジェクトの 設 定

バーテックス 入 力 レイアウト - ID3D10InputLayout

D3D10_INPUT_LAYOUT_DESC

ラスタライザオブジェクト - ID3D10RasterizerState

D3D10_RASTERIZER_DESC

DepthStencilオブジェクト - ID3D10DepthStencilState

D3D10_DEPTH_STENCIL_DESC

ブレンドオブジェクト - ID3D10BlendState

D3D10_BLEND_DESC

サンプラオブジェクト - ID3D10SamplerState

D3D10_SAMPLER_DESC

Copyright © NVIDIA Corporation 2004

CEDEC 2006


状 態 オブジェクトの 作 成

pD3D10Device->CreateSamplerState( &SamplerDesc, &pSamplerState);

不 変 オブジェクト

リソースの 制 限

入 力 アセンブラを 除 く

D3D10_REQ_type_OBJECT_COUNT_PER_CONTEXT

– すべて4096に 定 義

重 複 状 態 オブジェクトは 古 いオブジェクトに 新 しいインタフェースを 取 得

Copyright © NVIDIA Corporation 2004

CEDEC 2006


typedef struct D3D10_RASTERIZER_DESC {

D3D10_FILL_MODE FillMode;

D3D10_CULL_MODE CullMode;

BOOL FrontCounterClockwise;

INT DepthBias;

FLOAT DepthBiasClamp;

FLOAT SlopeScaledDepthBias;

BOOL DepthClipEnable;

BOOL ScissorEnable;

BOOL MultisampleEnable;

BOOL AntialiasedLineEnable;

} D3D10_RASTERIZER_DESC,*LPD3D10_RASTERIZER_DESC;

Copyright © NVIDIA Corporation 2004

CEDEC 2006


typedef struct D3D10_RASTERIZER_DESC {

D3D10_FILL_MODE FillMode;

D3D10_CULL_MODE CullMode;

BOOL FrontCounterClockwise;

INT DepthBias;

FLOAT DepthBiasClamp;

FLOAT SlopeScaledDepthBias;

BOOL DepthClipEnable;

BOOL ScissorEnable;

BOOL MultisampleEnable;

BOOL AntialiasedLineEnable;

ID3D10Device::RSSetState

を 呼 び 出 して 設 定

} D3D10_RASTERIZER_DESC,*LPD3D10_RASTERIZER_DESC;

Copyright © NVIDIA Corporation 2004

CEDEC 2006


typedef struct D3D10_DEPTH_STENCIL_DESC {

BOOL DepthEnable;

D3D10_DEPTH_WRITE_MASK DepthWriteMask;

D3D10_COMPARISON_FUNC DepthFunc;

BOOL StencilEnable;

UINT8 StencilReadMask;

UINT8 StencilWriteMask;

D3D10_DEPTH_STENCILOP_DESC FrontFace;

D3D10_DEPTH_STENCILOP_DESC BackFace;

} D3D10_DEPTH_STENCIL_DESC, *LPD3D10_DEPTH_STENCIL_DESC;

ID3D10Device::OMSetDepthStencilState

を 呼 び 出 して 設 定

Copyright © NVIDIA Corporation 2004

CEDEC 2006


typedef struct D3D10_BLEND_DESC {

BOOL AlphaToCoverageEnable;

BOOL BlendEnable[8];

D3D10_BLEND SrcBlend;

D3D10_BLEND DestBlend;

D3D10_BLEND_OP BlendOp;

D3D10_BLEND SrcBlendAlpha;

D3D10_BLEND DestBlendAlpha;

D3D10_BLEND_OP BlendOpAlpha;

UINT8 RenderTargetWriteMask[8];

} D3D10_BLEND_DESC, *LPD3D10_BLEND_DESC;

ID3D10Device::SetBlendState

を 呼 び 出 して 設 定

トランスペアレンシにより

アンチエイリアス 処 理 !

Copyright © NVIDIA Corporation 2004

CEDEC 2006


typedef struct D3D10_SAMPLER_DESC {

D3D10_FILTER Filter;

D3D10_TEXTURE_ADDRESS_MODE AddressU;

D3D10_TEXTURE_ADDRESS_MODE AddressV;

D3D10_TEXTURE_ADDRESS_MODE AddressW;

FLOAT MipLODBias;

UINT MaxAnisotropy;

D3D10_COMPARISON_FUNC ComparisonFunc;

FLOAT BorderColor[4];

FLOAT MinLOD; FLOAT MaxLOD;

} D3D10_SAMPLER_DESC, *LPD3D10_SAMPLER_DESC;

Copyright © NVIDIA Corporation 2004

ID3D10Device::VSSetSamplers

::GSSetSamplers

::PSSetSamplers

を 呼 び 出 して 設 定

CEDEC 2006


D3D10のドローコール

Draw

DrawInstanced

0

1

バーテックスデータバッファ

(x 0 y 0 z 0 ) (n x0 n y0 n z0 )

(x 1 y 1 z 1 ) (n x1 n y1 n z1 )



DrawIndexed

DrawIndexedInstanced

(x 99 y 99 z 99) (n x99 n y99 n z99 )

インスタンスデータバッファ

DrawAuto

ストリームアウト

0

1


worldMatrix 0

worldMatrix 1


worldMatrix 49

Copyright © NVIDIA Corporation 2004

CEDEC 2006


描 画 してみましょう!

待 って、アートはどうする!

固 定 機 能 なし

「 管 理 リソース」なし

リソース 表 示 とは

D3DXは

Copyright © NVIDIA Corporation 2004

CEDEC 2006


DX10 – 固 定 機 能 なし

すべてユーザが 決 定

つまり

フォグなし

ポイントスプライトなし

クリッププレーンなし

アルファテストなし

アルファテストはPSクリップの 指 示 により 処 理

Copyright © NVIDIA Corporation 2004

CEDEC 2006


GSポイントスプライト

DX10にはポイントサイズなし

ポイントは1ピクセル

スプライトの 生 成

1ポイントを2つの 三 角 に 拡 張

Tri ポイント

スプライト Tri

Copyright © NVIDIA Corporation 2004

CEDEC 2006


クリッププレーン

クリッププレーンはクリップ 距 離 で 処 理

VSおよびGSが 逆 クリップ 距 離 を 定 義

MS FixedFuncEMUサンプルをチェック

Copyright © NVIDIA Corporation 2004

CEDEC 2006


リソース

ID3D10Resource

すべてのリソースに 対 する 親 インタフェース

ID3D10Buffer

ID3D10Texture1D

ID3D10Texture2D

ID3D10Texture3D

ID3D10TextureCube

Copyright © NVIDIA Corporation 2004

CEDEC 2006


リソース

リソースを 作 成 する 方 法

ID3D10Device::CreateBuffer

ID3D10Device::CreateTexture1D


リソースの 保 存 場 所

Vidmem

リソースの 管 理 方 法

リソースはOSにより 仮 想 化

失 われたデバイスの 心 配 は 不 要

弱 い 参 照 の 保 持 を 強 制

Copyright © NVIDIA Corporation 2004

CEDEC 2006


リソース 管 理

ユーザが 決 定 !

用 途 をドライバに 通 知

D3D10_USAGE

D3D10_USAGE_IMMUTABLE

D3D10_USAGE_DEFAULT

D3D10_USAGE_DYNAMIC

D3D10_USAGE_STAGING

D3D10_CPU_ACCESS_FLAG

D3D10_CPU_ACCESS_WRITE

D3D10_CPU_ACCESS_READ

Copyright © NVIDIA Corporation 2004

CEDEC 2006


リソース 管 理

ユーザが 決 定 !

用 途 をドライバに 通 知

D3D10_USAGE

D3D10_USAGE_IMMUTABLE

D3D10_USAGE_DEFAULT

D3D10_USAGE_DYNAMIC

D3D10_USAGE_STAGING

DX9と 相 互 に 関 連

D3D10_CPU_ACCESS_FLAG

D3D10_CPU_ACCESS_WRITE

D3D10_CPU_ACCESS_READ

Copyright © NVIDIA Corporation 2004

CEDEC 2006


リソースの 適 切 な 定 義

変 化 しないリソース

D3D9

D3DPOOL_DEFAULT

D3D10

用 途 フラグなし

D3D10_USAGE_IMMUTABLE

– アップデートなし

– 作 成 時 のみ 定 義

Copyright © NVIDIA Corporation 2004

CEDEC 2006


リソースの 適 切 な 定 義

まれに 変 化 するリソース

D3D9

D3DPOOL_DEFAULT

D3DUSAGE_DYNAMIC

– NO_OVERWRITEおよびDISCARDを 使 用 して

ロック

D3D10

D3D10_USAGE_DEFAULT

CPUアクセスなし

– 間 接 的 アップデートのみ 可 能

Copyright © NVIDIA Corporation 2004

CEDEC 2006


リソースの 適 切 な 定 義

常 に 変 化 するリソース

D3D9

D3D10

D3DPOOL_MANAGED

D3D10_USAGE_DYNAMIC

D3D10_CPU_ACCESS_WRITE

D3D10_CPU_ACCESS_READ( 使 用 しないこと)

– NO_OVERWRITEおよびDISCARDを 使 用 してマップ

Copyright © NVIDIA Corporation 2004

CEDEC 2006


D3D10ステージバッファ

D3D10_USAGE_STAGING

D3D10_CPU_ACCESS_READのみ

CPUにデータをリードバックする 最 善 の 方 法

Copyright © NVIDIA Corporation 2004

CEDEC 2006


表 示 バインド

データの 再 解 釈 が 可 能

ID3D10ShaderResourceView

ID3D10RenderTargetView

ID3D10DepthStencilView

すべてがID3D10Resourceを 使 用 –

ID3D10Buffer

ID3D10Texture1D

ID3D10Texture2D

ID3D10Texture3D

ID3D10TextureCube

Copyright © NVIDIA Corporation 2004

CEDEC 2006


表 示 バインド

データの 再 解 釈 が 可 能

ID3D10ShaderResourceView

ID3D10RenderTargetView

ID3D10DepthStencilView

すべてがID3D10Resourceを 使 用 –

ID3D10Buffer

ID3D10Texture1D

ID3D10Texture2D

ID3D10Texture3D

ID3D10TextureCube

バーテックスシェーダステージ

ジオメトリシェーダステージ

ピクセルシェーダステージ

にバインド 可 能

出 力 マージャステージに

バインド 可 能

DepthStencilView

は、1D、2Dおよびキューブ

テクスチャをバインド 可 能

Copyright © NVIDIA Corporation 2004

CEDEC 2006


DX10についての 質 問

同 じものはどれ

D3D10_QUERY_OCCLUSION

D3D10_QUERY_EVENT

D3D10_QUERY_TIMESTAMP

D3D10_QUERY_TIMESTAMP_DISJOINT

Copyright © NVIDIA Corporation 2004

CEDEC 2006


DX10についての 質 問

変 化 したものはどれ

D3DQUERYTYPE_VCACHE

現 在 は ID3D10Device::CheckVertexCache

D3DQUERYTYPE_TIMESTAMPFREQ

D3D10_QUERY_TIMESTAMP で 返 された

Copyright © NVIDIA Corporation 2004

CEDEC 2006


DX10についての 質 問

新 しいものはどれ

D3D10_QUERY_SO_STATISTICS

書 き 込 まれたプリミティブ、および 書 き 込 まれた 可 能 性 がある

プリミティブ

D3D10_QUERY_SO_OVERFLOW_PREDICATE

D3D10_QUERY_OCCLUSION_PREDICATE

Copyright © NVIDIA Corporation 2004

CEDEC 2006


プレディケートレンダリング

非 常 に 興 味 深 いので 別 のスライドで 詳 しく 説 明 !

ドローコールのプレディケート 可 能

オクルージョンで

LOD

ストリームアウトオーバーフローで

データの 依 存 性

Copyright © NVIDIA Corporation 2004

CEDEC 2006


プレディケートレンダリング

m_pPredicateQuery->Begin();

//Render simple geometry


m_pPredicateQuery->End(NULL);

//Now render complex geometry

pD3D10Device->SetPredication( m_pPredicateQuery, FALSE);


pD3D10Device->SetPredication( NULL, FALSE);

Copyright © NVIDIA Corporation 2004

CEDEC 2006


D3DX

数 学 ユーティリティ 機 能

構 文 的 にはD3D9と 同 じ

複 数 のインタフェースはそのまま

ID3DX10Font

ID3DX10Mesh

ID3DX10Sprite


大 幅 に 縮 小

新 しく 興 味 深 い ID3DX10ThreadPump

Copyright © NVIDIA Corporation 2004

CEDEC 2006


ID3DX10ThreadPump

リソースの 非 同 期 読 み 込 みが 可 能

D3DX10CreateTextureFromFile

D3DX10CompileShaderFromFile


機 能 はポンプオブジェクトを 使 用

ID3DX10ThreadPump::WaitForAllItems

を 呼 び 出 し

Copyright © NVIDIA Corporation 2004

CEDEC 2006


ブライアン・デゥダーシュ(Bryan Dudash)

bdudash@nvidia.com

CEDEC 2006


Copyright © NVIDIA Corporation 2004

CEDEC 2006

More magazines by this user
Similar magazines