PFND3D10DDI_RESOURCEMAP funzione di callback (d3d10umddi.h)
La funzione resourcemap esegue il mapping di una sottorisorsa di una risorsa.
Sintassi
PFND3D10DDI_RESOURCEMAP Pfnd3d10ddiResourcemap;
void Pfnd3d10ddiResourcemap(
D3D10DDI_HDEVICE unnamedParam1,
D3D10DDI_HRESOURCE unnamedParam2,
UINT unnamedParam3,
D3D10_DDI_MAP unnamedParam4,
UINT unnamedParam5,
D3D10DDI_MAPPED_SUBRESOURCE *unnamedParam6
)
{...}
Parametri
unnamedParam1
hDevice [in]
Handle per il dispositivo di visualizzazione (contesto grafico).
unnamedParam2
hResource [in]
Handle per la risorsa di cui eseguire il mapping.
unnamedParam3
sottorisorsa [in]
Indice che indica la sottorisorsa di cui eseguire il mapping.
unnamedParam4
DDIMap [in]
Valore D3D10_DDI_MAP-typed che indica il livello di accesso a cui eseguire il mapping della sottorisorsa.
unnamedParam5
flag [in]
Valore D3D10_DDI_MAP_FLAG-typed che indica come eseguire il mapping della sottorisorsa.
unnamedParam6
pMappedSubResource [out]
Puntatore a una struttura di D3D10DDI_MAPPED_SUBRESOURCE che riceve le informazioni sulla sottorisorsa mappata.
Valore restituito
Nessuno
Osservazioni
Il driver può usare il pfnSetErrorCb funzione di callback per impostare un codice di errore.
Il driver può chiamare pfnSetErrorCb per impostare il codice di errore D3DDDIERR_DEVICEREMOVED.
In genere, subito dopo che il runtime riceve il codice di errore D3DDDIERR_DEVICEREMOVED, il runtime non chiamerà più nel driver di visualizzazione in modalità utente per molto (diverso da per l'associazione, la distruzione e altre operazioni di pulizia).
In genere, ogni chiamata al driver di visualizzazione in modalità utente funzione di ResourceMap è accompagnata da una chiamata alla funzione ResourceUnmap del driver; Tuttavia, dopo che il runtime riceve il codice di errore D3DDDIERR_DEVICEREMOVED, non chiamerà ResourceUnmap.
Se il runtime ha passato il flag di D3D10_DDI_MAP_FLAG_DONOTWAIT nel parametro flag, il driver può chiamare pfnSetErrorCb per impostare il codice di errore DXGI_DDI_ERR_WASSTILLDRAWING.
Il driver può implementare una coppia di ResourceMap e funzioni di ResourceUnmap che possono contenere istruzioni switch per elaborare varie funzionalità. Ovvero, il driver può implementare una coppia di ResourceMap-ResourceUnmap e può impostare i membri seguenti della struttura D3D10DDI_DEVICEFUNCS in modo che punti a questa coppia di implementazione:
pfnDynamicIABufferMapDiscard-pfnDynamicIABufferUnmap
pfnDynamicIABufferMapNoOverwrite-pfnDynamicIABufferUnmap
pfnDynamicConstantBufferMapDiscard-pfnDynamicConstantBufferUnmap
pfnDynamicResourceMapDiscard-pfnDynamicResourceUnmap
pfnStagingResourceMap-pfnStagingResourceUnmap
Tuttavia, per migliorare le prestazioni, il driver può implementare coppie di funzioni map-unmap separate. Il runtime Di Microsoft Direct3D chiama la coppia di funzioni map-unmap appropriata a seconda del tipo di risorsa (ad esempio, di un buffer o di una trama) e del tipo di D3D10_DDI_RESOURCE_USAGE, D3D10_DDI_RESOURCE_BIND_FLAGe dei valori D3D10_DDI_MAP specificati al momento della creazione e del mapping della risorsa.
Nota
Se il tipo di risorsa per eseguire il mapping e l'unmap è un buffer, il runtime Direct3D imposta il parametro subresource su zero.
Anche se il runtime Direct3D chiama in genere la pfnDynamicResourceMapDiscard-pfnDynamicResourceUnmap coppia di funzioni per le trame dinamiche, il runtime chiama anche questa coppia di funzioni per i buffer dinamici creati con il set di flag di associazione D3D10_DDI_BIND_SHADER_RESOURCE.
Il codice di esempio seguente mostra i valori impostati quando il runtime Direct3D chiama una funzione map o unmap specifica:
//-----------------------------------------------
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 );
}
Restrizioni sui valori di input
Per i driver Windows Display Driver Model (WDDM) 1.3 e versioni successive, il runtime di Microsoft Direct3D fornisce un set limitato di valori di input usati da questa funzione. Per un elenco di tutti i valori limitati, vedere miglioramenti delle prestazioni di rendering Direct3D.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Disponibile in Windows Vista e versioni successive dei sistemi operativi Windows. |
piattaforma di destinazione | Desktop |
intestazione | d3d10umddi.h (include D3d10umddi.h) |