PFND3D10DDI_RESOURCEMAP Rückruffunktion (d3d10umddi.h)

Die ResourceMap--Funktion ordnet eine Unterressource einer Ressource zu.

Syntax

PFND3D10DDI_RESOURCEMAP Pfnd3d10ddiResourcemap;

void Pfnd3d10ddiResourcemap(
  D3D10DDI_HDEVICE unnamedParam1,
  D3D10DDI_HRESOURCE unnamedParam2,
  UINT unnamedParam3,
  D3D10_DDI_MAP unnamedParam4,
  UINT unnamedParam5,
  D3D10DDI_MAPPED_SUBRESOURCE *unnamedParam6
)
{...}

Parameter

unnamedParam1

hDevice [in]

Ein Handle für das Anzeigegerät (Grafikkontext).

unnamedParam2

hResource- [in]

Ein Handle für die Ressource, die zugeordnet werden soll.

unnamedParam3

Unterressource [in]

Ein Index, der die zuzuordnende Unterressource angibt.

unnamedParam4

DDIMap- [in]

Ein D3D10_DDI_MAP-typed-Wert, der die Zugriffsebene angibt, der die Unterressource zugeordnet werden soll.

unnamedParam5

Flags [in]

Ein D3D10_DDI_MAP_FLAG-typed-Wert, der angibt, wie die Unterressource zugeordnet wird.

unnamedParam6

pMappedSubResource [out]

Ein Zeiger auf eine D3D10DDI_MAPPED_SUBRESOURCE Struktur, die die Informationen über die zugeordnete Unterressource empfängt.

Rückgabewert

Nichts

Bemerkungen

Der Treiber kann die pfnSetErrorCb Rückruffunktion verwenden, um einen Fehlercode festzulegen.

Der Treiber kann pfnSetErrorCb- aufrufen, um den D3DDDIERR_DEVICEREMOVED Fehlercode festzulegen.

In der Regel ruft die Laufzeit unmittelbar nach Erhalt des D3DDDIERR_DEVICEREMOVED Fehlercodes den Anzeigetreiber für den Benutzermodus nicht mehr auf (abgesehen von Nichtbindung, Zerstörung und anderen Bereinigungsvorgängen).

In der Regel wird jeder Aufruf der ResourceMap-Funktion des Benutzermodus mit einem Aufruf der ResourceUnmap-Funktion des Treibers begleitet; Nachdem die Laufzeit jedoch den D3DDDIERR_DEVICEREMOVED Fehlercode empfängt, wird ResourceUnmap-nicht aufgerufen.

Wenn die Laufzeit das D3D10_DDI_MAP_FLAG_DONOTWAIT Flag im Flags Parameter übergeben hat, kann der Treiber pfnSetErrorCb- aufrufen, um den DXGI_DDI_ERR_WASSTILLDRAWING Fehlercode festzulegen.

Der Treiber kann ein paar ResourceMap- und ResourceUnmap- Funktionen implementieren, die Switch--Anweisungen enthalten können, um verschiedene Funktionen zu verarbeiten. Das heißt, der Treiber kann ein ResourceMap-ResourceUnmap Paar implementieren und die folgenden Member der D3D10DDI_DEVICEFUNCS-Struktur so festlegen, dass es auf dieses Implementierungspaar verweist:

  • pfnDynamicIABufferMapDiscard-pfnDynamicIABufferUnmap

  • pfnDynamicIABufferMapNoOverwrite-pfnDynamicIABufferUnmap

  • pfnDynamicConstantBufferMapDiscard-pfnDynamicConstantBufferUnmap

  • pfnDynamicResourceMapDiscard-pfnDynamicResourceUnmap

  • pfnStagingResourceMap-pfnStagingResourceUnmap

Um die Leistung zu verbessern, kann der Treiber jedoch separate Zuordnungs-unmap-Funktionspaare implementieren. Die Microsoft Direct3D-Laufzeit ruft je nach Ressourcentyp (z. B. Puffer oder Textur) und dem Typ von D3D10_DDI_RESOURCE_USAGE, D3D10_DDI_RESOURCE_BIND_FLAGund D3D10_DDI_MAP Werten auf, die beim Erstellen und Zuordnen der Ressource angegeben werden.

Anmerkung

Wenn der ressourcentyp, der zugeordnet und die Zuordnung aufgehoben werden soll, ein Puffer ist, legt die Direct3D-Laufzeit den Subresource Parameter auf Null fest.
Obwohl die Direct3D-Laufzeit in der Regel die pfnDynamicResourceMapDiscard-pfnDynamicResourceUnmap Funktionspaar für dynamische Texturen aufruft, ruft die Laufzeit dieses Funktionspaar auch für dynamische Puffer auf, die mit dem D3D10_DDI_BIND_SHADER_RESOURCE Bindungskennzeichnungssatz erstellt wurden.

Der folgende Beispielcode zeigt die Werte, die festgelegt werden, wenn die Direct3D-Laufzeit bestimmte Zuordnungs- oder Unmap-Funktion aufruft:

//-----------------------------------------------
void APIENTRY UMDevice::DynamicIABufferMapNoOverwrite_Default(
    D3D10DDI_HDEVICE hDevice,
    D3D10DDI_HRESOURCE hResource,
    UINT Subresource,
    D3D10_DDI_MAP MapType,
    UINT MapFlags,
    D3D10DDI_MAPPED_SUBRESOURCE* pMappedSubresource )
{
    UMDevice* pThis = UMDevice::CastFrom( hDevice );
    UMResource* pResource = UMResource::CastFrom( hResource );
 
    assert( pResource->m_DDICreateResource.ResourceDimension == D3D10DDIRESOURCE_BUFFER &&
        pResource->m_DDICreateResource.Usage == D3D10_DDI_USAGE_DYNAMIC &&
        (pResource->m_DDICreateResource.BindFlags & (D3D10_DDI_BIND_VERTEX_BUFFER | D3D10_DDI_BIND_INDEX_BUFFER)) &&
        !(pResource->m_DDICreateResource.BindFlags & ~(D3D10_DDI_BIND_VERTEX_BUFFER | D3D10_DDI_BIND_INDEX_BUFFER)) &&
        Subresource == 0 &&
        MapType == D3D10_DDI_MAP_WRITE_NOOVERWRITE &&
        MapFlags == 0 );
 
    pResource->Map( Subresource, MapType, MapFlags, pMappedSubresource );
}
 
//------------------------------------------------
void APIENTRY UMDevice::DynamicIABufferMapDiscard_Default(
    D3D10DDI_HDEVICE hDevice,
    D3D10DDI_HRESOURCE hResource,
    UINT Subresource,
    D3D10_DDI_MAP MapType,
    UINT MapFlags,
    D3D10DDI_MAPPED_SUBRESOURCE* pMappedSubresource )
{
    UMDevice* pThis = UMDevice::CastFrom( hDevice );
    UMResource* pResource = UMResource::CastFrom( hResource );
 
    assert( pResource->m_DDICreateResource.ResourceDimension == D3D10DDIRESOURCE_BUFFER &&
        pResource->m_DDICreateResource.Usage == D3D10_DDI_USAGE_DYNAMIC &&
        (pResource->m_DDICreateResource.BindFlags & (D3D10_DDI_BIND_VERTEX_BUFFER | D3D10_DDI_BIND_INDEX_BUFFER)) &&
        !(pResource->m_DDICreateResource.BindFlags & ~(D3D10_DDI_BIND_VERTEX_BUFFER | D3D10_DDI_BIND_INDEX_BUFFER)) &&
        Subresource == 0 &&
        MapType == D3D10_DDI_MAP_WRITE_DISCARD &&
        MapFlags == 0 );
 
    pResource->Map( Subresource, MapType, MapFlags, pMappedSubresource );
}
 
//------------------------------------------------
void APIENTRY UMDevice::DynamicIABufferUnmap_Default(
    D3D10DDI_HDEVICE hDevice,
    D3D10DDI_HRESOURCE hResource,
    UINT Subresource )
{
    UMDevice* pThis = UMDevice::CastFrom( hDevice );
    UMResource* pResource = UMResource::CastFrom( hResource );
 
    assert( pResource->m_DDICreateResource.ResourceDimension == D3D10DDIRESOURCE_BUFFER &&
        pResource->m_DDICreateResource.Usage == D3D10_DDI_USAGE_DYNAMIC &&
        (pResource->m_DDICreateResource.BindFlags & (D3D10_DDI_BIND_VERTEX_BUFFER | D3D10_DDI_BIND_INDEX_BUFFER)) &&
        !(pResource->m_DDICreateResource.BindFlags & ~(D3D10_DDI_BIND_VERTEX_BUFFER | D3D10_DDI_BIND_INDEX_BUFFER)) &&
        Subresource == 0 );
 
    pResource->Unmap( Subresource );
}
 
//------------------------------------------------
void APIENTRY UMDevice::DynamicConstantBufferMapDiscard_Default(
    D3D10DDI_HDEVICE hDevice,
    D3D10DDI_HRESOURCE hResource,
    UINT Subresource,
    D3D10_DDI_MAP MapType,
    UINT MapFlags,
    D3D10DDI_MAPPED_SUBRESOURCE* pMappedSubresource )
{
    UMDevice* pThis = UMDevice::CastFrom( hDevice );
    UMResource* pResource = UMResource::CastFrom( hResource );
 
    assert( pResource->m_DDICreateResource.ResourceDimension == D3D10DDIRESOURCE_BUFFER &&
        pResource->m_DDICreateResource.Usage == D3D10_DDI_USAGE_DYNAMIC &&
        (pResource->m_DDICreateResource.BindFlags & D3D10_DDI_BIND_CONSTANT_BUFFER) &&
        !(pResource->m_DDICreateResource.BindFlags & ~D3D10_DDI_BIND_CONSTANT_BUFFER) &&
        Subresource == 0 &&
        MapType == D3D10_DDI_MAP_WRITE_DISCARD &&
        MapFlags == 0 );
 
    pResource->Map( Subresource, MapType, MapFlags, pMappedSubresource );
}
 
//------------------------------------------------
void APIENTRY UMDevice::DynamicConstantBufferUnmap_Default(
    D3D10DDI_HDEVICE hDevice,
    D3D10DDI_HRESOURCE hResource,
    UINT Subresource )
{
    UMDevice* pThis = UMDevice::CastFrom( hDevice );
    UMResource* pResource = UMResource::CastFrom( hResource );
 
    assert( pResource->m_DDICreateResource.ResourceDimension == D3D10DDIRESOURCE_BUFFER &&
        pResource->m_DDICreateResource.Usage == D3D10_DDI_USAGE_DYNAMIC &&
        (pResource->m_DDICreateResource.BindFlags & D3D10_DDI_BIND_CONSTANT_BUFFER) &&
        !(pResource->m_DDICreateResource.BindFlags & ~D3D10_DDI_BIND_CONSTANT_BUFFER) &&
        Subresource == 0 );
 
    pResource->Unmap( Subresource );
}
 
//------------------------------------------------
void APIENTRY UMDevice::DynamicResourceMapDiscard_Default(
    D3D10DDI_HDEVICE hDevice,
    D3D10DDI_HRESOURCE hResource,
    UINT Subresource,
    D3D10_DDI_MAP MapType,
    UINT MapFlags,
    D3D10DDI_MAPPED_SUBRESOURCE* pMappedSubresource )
{
    UMDevice* pThis = UMDevice::CastFrom( hDevice );
    UMResource* pResource = UMResource::CastFrom( hResource );
 
    assert( pResource->m_DDICreateResource.Usage == D3D10_DDI_USAGE_DYNAMIC &&
        pResource->m_DDICreateResource.Subresources == 1 &&
        Subresource == 0 &&
        MapType == D3D10_DDI_MAP_WRITE_DISCARD &&
        MapFlags == 0 );
 
    pResource->Map( Subresource, MapType, MapFlags, pMappedSubresource );
}
 
//------------------------------------------------
void APIENTRY UMDevice::DynamicResourceUnmap_Default(
    D3D10DDI_HDEVICE hDevice,
    D3D10DDI_HRESOURCE hResource,
    UINT Subresource )
{
    UMDevice* pThis = UMDevice::CastFrom( hDevice );
    UMResource* pResource = UMResource::CastFrom( hResource );
 
    assert( pResource->m_DDICreateResource.Usage == D3D10_DDI_USAGE_DYNAMIC &&
        pResource->m_DDICreateResource.Subresources == 1 &&
        Subresource == 0 );
 
    pResource->Unmap( Subresource );
}
 
//------------------------------------------------
void APIENTRY UMDevice::StagingResourceMap_Default(
    D3D10DDI_HDEVICE hDevice,
    D3D10DDI_HRESOURCE hResource,
    UINT Subresource,
    D3D10_DDI_MAP MapType,
    UINT MapFlags,
    D3D10DDI_MAPPED_SUBRESOURCE* pMappedSubresource )
{
    UMDevice* pThis = UMDevice::CastFrom( hDevice );
    UMResource* pResource = UMResource::CastFrom( hResource );
 
    assert( pResource->m_DDICreateResource.Usage == D3D10_DDI_USAGE_STAGING &&
        (MapType == D3D10_DDI_MAP_READ || MapType == D3D10_DDI_MAP_WRITE || MapType == D3D10_DDI_MAP_READWRITE) );
 
    pResource->Map( Subresource, MapType, MapFlags, pMappedSubresource );
}
 
//------------------------------------------------
void APIENTRY UMDevice::StagingResourceUnmap_Default(
    D3D10DDI_HDEVICE hDevice,
    D3D10DDI_HRESOURCE hResource,
    UINT Subresource )
{
    UMDevice* pThis = UMDevice::CastFrom( hDevice );
    UMResource* pResource = UMResource::CastFrom( hResource );
 
    assert( pResource->m_DDICreateResource.Usage == D3D10_DDI_USAGE_STAGING );
 
    pResource->Unmap( Subresource );
}
 
//------------------------------------------------
void APIENTRY UMDevice::ResourceMap_Default(
    D3D10DDI_HDEVICE hDevice,
    D3D10DDI_HRESOURCE hResource,
    UINT Subresource,
    D3D10_DDI_MAP MapType,
    UINT MapFlags,
    D3D10DDI_MAPPED_SUBRESOURCE* pMappedSubresource )
{
    UMDevice* pThis = UMDevice::CastFrom( hDevice );
    UMResource* pResource = UMResource::CastFrom( hResource );
 
    assert( pResource->m_DDICreateResource.Usage != D3D10_DDI_USAGE_DYNAMIC &&
        pResource->m_DDICreateResource.Usage != D3D10_DDI_USAGE_STAGING );
 
    // Generally true; but allow last second change:
    assert( false );
 
    pResource->Map( Subresource, MapType, MapFlags, pMappedSubresource );
}
 
//------------------------------------------------
void APIENTRY UMDevice::ResourceUnmap_Default(
    D3D10DDI_HDEVICE hDevice,
    D3D10DDI_HRESOURCE hResource,
    UINT Subresource )
{
    UMDevice* pThis = UMDevice::CastFrom( hDevice );
    UMResource* pResource = UMResource::CastFrom( hResource );
 
    assert( pResource->m_DDICreateResource.Usage != D3D10_DDI
_USAGE_DYNAMIC &&
        pResource->m_DDICreateResource.Usage != D3D10_DDI_USAGE_STAGING );
 
    // Generally true; but allow last second change:
    assert( false );
 
    pResource->Unmap( Subresource );
}

Einschränkungen bei Eingabewerten

Für Windows Display Driver Model (WDDM) 1.3 und höhere Treiber stellt die Microsoft Direct3D-Laufzeit einen eingeschränkten Satz von Eingabewerten zur Verfügung, die von dieser Funktion verwendet werden. Eine Liste aller eingeschränkten Werte finden Sie unter Verbesserungen der Direct3D-Renderingleistung.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar in Windows Vista und höheren Versionen der Windows-Betriebssysteme.
Zielplattform- Desktop
Header- d3d10umddi.h (include D3d10umddi.h)

Siehe auch

D3D10DDI_DEVICEFUNCS

D3D10DDI_MAPPED_SUBRESOURCE

D3D10_DDI_MAP

D3D10_DDI_MAP_FLAG

D3D10_DDI_RESOURCE_BIND_FLAG

D3D10_DDI_RESOURCE_USAGE

ResourceUnmap-

pfnSetErrorCb