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 zu zuordnende Ressource.

unnamedParam3

Unterressource [in]

Ein Index, der die zuzuordnende Unterressource angibt.

unnamedParam4

DDIMap [in]

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

unnamedParam5

Flaggen [in]

Ein D3D10_DDI_MAP_FLAG typisierter 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

Keine

Bemerkungen

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

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

In der Regel ruft die Runtime unmittelbar nach Dem Empfang des D3DDDIERR_DEVICEREMOVED Fehlercodes den Anzeigetreiber für den Benutzermodus nicht mehr auf (außer für Das Aufheben der Bindung, Zerstörung und andere Bereinigungsvorgänge).

In der Regel wird jeder Aufruf der ResourceMap-Funktion des Benutzermodusanzeigetreibers mit einem Aufruf der ResourceUnmap-Funktion des Treibers begleitet. Nachdem die Runtime jedoch den D3DDDIERR_DEVICEREMOVED Fehlercode empfangen hat, wird ResourceUnmap nicht aufgerufen.

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

Der Treiber kann ein Paar von ResourceMap - und ResourceUnmap-Funktionen implementieren, das Switch-Anweisungen zum Verarbeiten verschiedener Funktionen enthalten kann. Das heißt, der Treiber kann ein ResourceMap-ResourceUnmap-Paar implementieren und die folgenden Member der D3D10DDI_DEVICEFUNCS-Struktur so festlegen, dass sie auf dieses Implementierungspaar verweisen:

  • pfnDynamicIABufferMapDiscard-pfnDynamicIABufferUnmap

  • pfnDynamicIABufferMapNoOverwrite-pfnDynamicIABufferUnmap

  • pfnDynamicConstantBufferMapDiscard-pfnDynamicConstantBufferUnmap

  • pfnDynamicResourceMapDiscard-pfnDynamicResourceUnmap

  • pfnStagingResourceMap-pfnStagingResourceUnmap

Um die Leistung zu verbessern, kann der Treiber jedoch separate Map-unmap-Funktionspaare implementieren. Die Microsoft Direct3D-Runtime ruft je nach Ressourcentyp (z. B. einem Puffer oder einer Textur) und dem Typ der D3D10_DDI_RESOURCE_USAGE, D3D10_DDI_RESOURCE_BIND_FLAG und D3D10_DDI_MAP Werte auf, die beim Erstellen und Zugeordneten der Ressource angegeben werden.

Hinweis

Wenn der Zu- und Aufheben der Zuordnung zuzuordnende Ressourcentyp ein Puffer ist, legt die Direct3D-Runtime den Subresource-Parameter auf 0 (null) fest.
Obwohl die Direct3D-Runtime in der Regel das PfnDynamicResourceMapDiscard-pfnDynamicResourceUnmap-Funktionspaar für dynamische Texturen aufruft, ruft die Runtime dieses Funktionspaar auch für dynamische Puffer auf, die mit dem D3D10_DDI_BIND_SHADER_RESOURCE Bindungsflag erstellt wurden.

Der folgende Beispielcode zeigt die Werte, die festgelegt werden, wenn die Direct3D-Runtime eine 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 für Eingabewerte

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

Anforderungen

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

Weitere Informationen

D3D10DDI_DEVICEFUNCS

D3D10DDI_MAPPED_SUBRESOURCE

D3D10_DDI_MAP

D3D10_DDI_MAP_FLAG

D3D10_DDI_RESOURCE_BIND_FLAG

D3D10_DDI_RESOURCE_USAGE

ResourceUnmap

pfnSetErrorCb