2012-03-29 13 views
1

lassen, habe ich zwei Geräte, zuerst ist von DirectX9 und zweitens von DirectX11. was ich tue ist, Partikel zu berechnen und speichern ihre Daten in einer D3D11 Textur von D3D11 Compute Shader und dann möchte ich diese D3D11 Textur in meinem D3D9 Gerät verwenden, um es anzuzeigen. ich verwende folgenden Code ..Share Ressource von DirectX11 zu Directx9

In D3D11 Gerät .. (m_pBuffer ist ID3D11Buffer)

IDXGIResource* pTempResource(NULL); 
hr = m_pBuffer->QueryInterface(__uuidof(IDXGIResource), (void**)&pTempResource); 
hr = pTempResource->GetSharedHandle(&SharedHandle); //successful 

Dann in D3D9 Gerät ...

hr = g_pd3dDevice->CreateTexture(width, height, 1, D3DUSAGE_RENDERTARGET,D3DFMT_A32B32G32R32F,D3DPOOL_DEFAULT,&pSharedTexture9,&SharedHandle); 

Der Fehler ich habe, ist " Direct3D9: (ERROR): Geöffnete und erstellte Ressourcen stimmen nicht überein, die freigegebene Ressource kann nicht geöffnet werden. "

EDITED: Ok, es funktionierte, wenn ich Textur mit D3DFMT_A16B16G16R16F in DX9 und DXGI_FORMAT_R16G16B16A16_FLOAT in DX11 erstellen. aber mit D3DFMT_A32B32G32R32F und DXGI_FORMAT_R32G32B32A32_FLOAT gibt es den obigen Fehler.

Antwort

3

Sie erhalten diesen Fehler, weil diese Texturformate nicht zulässig sind.

Texturen von D3D9 zu D3D11 geteilt werden die folgenden Einschränkungen:

  • Texturen müssen 2D sein wird
  • Nur 1 mip Ebene
  • erlaubt Texture Standardverwendung
  • Texture Muss haben muss nur schreiben
  • MSAA Texturen sind nicht erlaubt
  • Bin d Fahnen SHADER_RESOURCE haben muss und RENDER_TARGET gesetzt
  • Nur R10G10B10A2_UNORM, R16G16B16A16_FLOAT und R8G8B8A8_UNORM Formate erlaubt

Von http://msdn.microsoft.com/en-us/library/windows/desktop/ff476531%28v=vs.85%29.aspx

So Texturen für den Austausch, die Sie zu den oben genannten drei Formate beschränkt. Wenn Sie die Textur als Backbuffer in Direct3D9 verwenden möchten, sind Sie außerdem auf R8G8B8A8_UNORM und R10G10B10A2_UNORM beschränkt. Quelle: http://msdn.microsoft.com/en-us/library/windows/desktop/bb172558%28v=vs.85%29.aspx#BackBuffer_or_Display_Formats

+1

SORRY aber sogar R16G16B16A16_FLOAT funktioniert nicht, ich war falsch.Ich denke, es ist ein nicht funktionierendes Feature wie die meisten Beiträge in anderen Foren sagt es. Hat jemand es funktioniert? – YAHOOOOO

+1

Das Problem ist, dass, obwohl es ein gültiges Format für die Freigabe ist, Sie in Direct3D9 keinen 64-Bit-Backbuffer haben können. –