0

KeyedMutexを介してDirectX11でDirect2Dを使用しています。ハードウェアデバイスを使用している場合は、すべてがうまく機能します。デフォルトでWarpデバイスを使用すると、Texture2Dオブジェクトを作成するときに問題が発生し、「Direct3D11Exception:E_OUTOFMEMORY:Ranoutofmemory」というエラーメッセージが表示されます。

これらは責任がある行です:

    SlimDX.Direct3D11.Texture2DDescription tds = SlimDX.Direct3D11.Texture2D.FromSwapChain(swapChain, 0).Description;
    tds.BindFlags |= BindFlags.ShaderResource;
    tds.SampleDescription = new SampleDescription(1, 0);
    tds.OptionFlags |= ResourceOptionFlags.KeyedMutex;
    textureD3D11 = new SlimDX.Direct3D11.Texture2D(device, tds);

繰り返しますが、ワープではなく、ハードウェアデバイスを使用してすべてがうまく機能します。PIXに対して実行すると、次のように表示されます。

<0x09033390> ID3D11Device:CreateTexture2D(0x0FD1E330、NULL、0x0FD1E32C-> NULL)

これはWarpドライバーを使用していますが、最後のNULLがNULLではないハードウェアを使用すると、D3D11Texture2Dオブジェクトを指す実際のポインターになります。

何かご意見は?ここに多くのコードを含めていないことは知っていますが、DXルーチン全体を投稿しなくても、誰かがこれが何であるかを知ってくれることを望んでいました。必要に応じて行います。

私はデバッグと10.1DXを使用します。デバッグ出力は次のとおりです。

DXX32: Warn: Registry value too long: MainVideo_SET in SYSTEM\ControlSet001\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\0000\UMD
DXX32: Warn: Registry value too long: MainVideo_SET in SYSTEM\ControlSet001\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\0000\UMD
D3D11: WARNING: ID3D11Device::SetPrivateData: Possible re-use of existing private data GUID for different data (size has changed). [ STATE_SETTING WARNING #55: SETPRIVATEDATA_CHANGINGPARAMS ]
D3D11: WARNING: ID3D11Texture2D::SetPrivateData: Existing private data of same name with different size found! [ STATE_SETTING WARNING #55: SETPRIVATEDATA_CHANGINGPARAMS ]
Unable to load D2D debug layer
First-chance exception at 0x7558d36f in nART.exe: Microsoft C++ exception: _com_error at memory location 0x068ec964..
First-chance exception at 0x7558d36f in nART.exe: Microsoft C++ exception: _com_error at memory location 0x068eccf8..
First-chance exception at 0x7558d36f in nART.exe: Microsoft C++ exception: _com_error at memory location 0x068ece3c..
First-chance exception at 0x7558d36f in nART.exe: Microsoft C++ exception: _com_error at memory location 0x068edfb4..
D3D11: ERROR: ID3D11Device::CreateTexture2D: Returning E_OUTOFMEMORY, meaning memory was exhausted. [ STATE_CREATION ERROR #105: CREATETEXTURE2D_OUTOFMEMORY_RETURN ]
D3D11: WARNING: Live Device: Name="device", Addr=0x00097D58, ExtRef=4 [ STATE_CREATION WARNING #2097297: LIVE_DEVICE ]
D3D11: WARNING: Live Device Child Summary: Device Addr=0x00097D58
Using ID3D11Debug::ReportLiveDeviceObjects with D3D11_RLDO_DETAIL will help drill into object lifetimes. Objects with ExtRef=0 and IntRef=0 will be eventually destroyed through typical Immediate Context usage. However, if the application requires these objects to be destroyed sooner, ClearState followed by Flush on the Immediate Context will realize their destruction.
Live              Context:      1
Live               Buffer:      0
Live            Texture1D:      0
Live            Texture2D:      1
Live            Texture3D:      0
Live   ShaderResourceView:      0
Live     RenderTargetView:      1
Live     DepthStencilView:      0
Live         VertexShader:      0
Live       GeometryShader:      0
Live          PixelShader:      0
Live          InputLayout:      0
Live              Sampler:      1
Live           BlendState:      1
Live    DepthStencilState:      1
Live      RasterizerState:      1
Live                Query:      1
Live            Predicate:      0
Live              Counter:      0
Live          CommandList:      0
Live           HullShader:      0
Live         DomainShader:      0
Live        ClassInstance:      0
Live         ClassLinkage:      0
Live        ComputeShader:      0
Live  UnorderedAccessView:      0
 [ STATE_CREATION WARNING #2097298: LIVE_OBJECT_SUMMARY ]
A first chance exception of type 'SlimDX.Direct3D11.Direct3D11Exception' occurred in SlimDX.dll
An unhandled exception of type 'SlimDX.Direct3D11.Direct3D11Exception' occurred in SlimDX.dll

Additional information: E_OUTOFMEMORY: Ran out of memory (-2147024882)
4

1 に答える 1

0

ワープデバイスは、Windows7の機能レベル10.1までしかサポートできません。

http://msdn.microsoft.com/en-us/library/windows/desktop/ff728764(v=vs.85).aspx

また、適切なエラーメッセージが必要な場合は、デバッグオプションフラグを使用してデバイスを作成します。

次に、プロジェクトプロパティの[デバッグ]タブで、[アンマネージコードのデバッグを有効にする]にチェックマークを付けます。

これで、デバッグすると、デバッグ出力でより明確な通知が得られます。

于 2012-10-03T15:00:34.163 に答える