[DX10] PSSetShaderResources / OMSetRenderTargets Warnings

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
keepcoding
Beiträge: 30
Registriert: 28.11.2003, 17:19
Kontaktdaten:

[DX10] PSSetShaderResources / OMSetRenderTargets Warnings

Beitrag von keepcoding »

Hi

Nach längerem probieren und suchen möchte ich mein Problem mal hier anbringen. Ich blick da nicht ganz durch, wozu brauch ich eigentlich PSSetShaderResources, wenn ich alles über die Effektschnittstelle setzen kann?
Kann ich über die Effektschnittstelle mittels SetResource(NULL) ein gesetztes Render-Target unbinden?
Ausserdem krieg ich folgende Warnungen nicht weg:
  • D3D10: INFO: ID3D10Device::DrawIndexed: The Pixel Shader unit expects a Shader Resource View at Slot 1, but none is bound. This is OK, as reads of an unbound Shader Resource View are defined to return 0. It is also possible the developer knows the data will not be used anyway. This is only a problem if the developer actually intended to bind a Shader Resource View here. [ EXECUTION INFO #353: DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET ]
    D3D10: WARNING: ID3D10Device::OMSetRenderTargets: Resource being set to OM RenderTarget slot 0 is still bound on input! [ STATE_SETTING WARNING #9: DEVICE_OMSETRENDERTARGETS_HAZARD ]
    D3D10: WARNING: ID3D10Device::OMSetRenderTargets: Forcing PS shader resource slot 1 to NULL. [ STATE_SETTING WARNING #7: DEVICE_PSSETSHADERRESOURCES_HAZARD ]
    D3D10: WARNING: ID3D10Device::PSSetShaderResources: Resource being set to PS shader resource slot 1 is still bound on output! Forcing to NULL. [ STATE_SETTING WARNING #7: DEVICE_PSSETSHADERRESOURCES_HAZARD ]
Im Code siehts etwa so aus:

Code: Alles auswählen

GetVariableByName("g_TexReflection")->AsShaderResource()->SetResource(NULL)  // für RT-SRV
...
m_pD3DDevice->OMSetRenderTargets(1, pRTViews, pDSView);  // View für RT-ArraySlice 0
RenderScene()
...
m_pD3DDevice->OMSetRenderTargets(1, pRTViews, pDSView);  // View für RT-ArraySlice 1
RenderScene()
...
SetBackBuffer()
GetVariableByName("g_TexReflection")->AsShaderResource()->SetResource(kcResourceManager::GetRenderTargetSRV())
...
RenderScene()
Ach ja, das RT ist ein Texture2DArray. Im Shader krieg ich zwar den Inhalt des 0. ArraySlices, nicht aber den Inhalt des 1. ArraySlices des Render-Targets.
keepcoding
Beiträge: 30
Registriert: 28.11.2003, 17:19
Kontaktdaten:

Re: [DX10] PSSetShaderResources / OMSetRenderTargets Warning

Beitrag von keepcoding »

weiss das echt niemand oder ist die Frage einfach zu blöd?

diese Warnings kommen und gehen, weiss nicht genau, woran es liegt.
  • D3D10: WARNING: ID3D10Device::OMSetRenderTargets: Resource being set to OM RenderTarget slot 0 is still bound on input! [ STATE_SETTING WARNING #9: DEVICE_OMSETRENDERTARGETS_HAZARD ]
    D3D10: WARNING: ID3D10Device::OMSetRenderTargets: Forcing PS shader resource slot 0 to NULL. [ STATE_SETTING WARNING #7: DEVICE_PSSETSHADERRESOURCES_HAZARD ]
Wird über die Effektschnittstelle nicht alles automatisch erledigt? Muss ich denn nun Texturen explizit mittels SetResource(NULL) unbinden?? Gibt's da vllt sonst noch was zu wissen, das mir durch die Lappen gegangen sein könnte?
AlClemento
Beiträge: 12
Registriert: 16.04.2010, 20:01

Re: [DX10] PSSetShaderResources / OMSetRenderTargets Warning

Beitrag von AlClemento »

Würd mich auch interessieren, nur das mit SetResource(NULL) hat nichts gebracht, wie du auch schon festgestellt hast.
keepcoding
Beiträge: 30
Registriert: 28.11.2003, 17:19
Kontaktdaten:

Re: [DX10] PSSetShaderResources / OMSetRenderTargets Warning

Beitrag von keepcoding »

Doch, klappt tatsächlich. Allerdings muss die Änderung auch noch "applied" werden:

pVar->AsShaderResource()->SetResource(NULL);
pTechnique->GetPassByIndex(0)->Apply(0);

Bei mir sind jetzt alle Warnungen weg :)

Ach ja, und PSSetShaderResources scheint man wirklich nicht zu brauchen, es sei denn, man möchte alles selbst managen (was durchaus effizienter sein kann).
Antworten