PFND3D10DDI_RESOURCEMAP función de devolución de llamada (d3d10umddi.h)
La función ResourceMap asigna un subrecurso de un recurso.
Sintaxis
PFND3D10DDI_RESOURCEMAP Pfnd3d10ddiResourcemap;
void Pfnd3d10ddiResourcemap(
D3D10DDI_HDEVICE unnamedParam1,
D3D10DDI_HRESOURCE unnamedParam2,
UINT unnamedParam3,
D3D10_DDI_MAP unnamedParam4,
UINT unnamedParam5,
D3D10DDI_MAPPED_SUBRESOURCE *unnamedParam6
)
{...}
Parámetros
unnamedParam1
hDevice [in]
Identificador del dispositivo de visualización (contexto de gráficos).
unnamedParam2
hResource [in]
Identificador del recurso que se va a asignar.
unnamedParam3
subresource [in]
Índice que indica el subrecurso que se va a asignar.
unnamedParam4
DDIMap [in]
Valor de tipo D3D10_DDI_MAPque indica el nivel de acceso al que asignar el subrecurso.
unnamedParam5
marcas [in]
Valor de tipo D3D10_DDI_MAP_FLAGque indica cómo asignar el subrecurso.
unnamedParam6
pMappedSubResource [out]
Puntero a una estructura D3D10DDI_MAPPED_SUBRESOURCE que recibe la información sobre el subrecurso asignado.
Valor devuelto
Ninguno
Observaciones
El controlador puede usar el pfnSetErrorCb función de devolución de llamada para establecer un código de error.
El controlador puede llamar a pfnSetErrorCb para establecer el código de error D3DDDIERR_DEVICEREMOVED.
Normalmente, inmediatamente después de que el tiempo de ejecución reciba el código de error de D3DDDIERR_DEVICEREMOVED, el tiempo de ejecución ya no llamará al controlador de pantalla en modo de usuario para mucho (excepto para desenlace, destrucción y otras operaciones de limpieza).
Normalmente, cada llamada al controlador de pantalla en modo de usuario función resourceMap se acompaña con una llamada a la función ResourceUnmap del controlador; sin embargo, después de que el tiempo de ejecución reciba el código de error D3DDDIERR_DEVICEREMOVED, no llamará a ResourceUnmap.
Si el tiempo de ejecución pasó la marca de D3D10_DDI_MAP_FLAG_DONOTWAIT en el parámetro flags de, el controlador puede llamar a pfnSetErrorCb para establecer el código de error DXGI_DDI_ERR_WASSTILLDRAWING.
El controlador puede implementar un par de ResourceMap y funciones de ResourceUnmap que pueden contener instrucciones de cambio de para procesar diversas funcionalidades. Es decir, el controlador puede implementar un par de ResourceMap-ResourceUnmap y puede establecer los siguientes miembros de la estructura de D3D10DDI_DEVICEFUNCS para que apunten a este par de implementación:
pfnDynamicIABufferMapDiscard-pfnDynamicIABufferUnmap
pfnDynamicIABufferMapNoOverwrite-pfnDynamicIABufferUnmap
pfnDynamicConstantBufferMapDiscard-pfnDynamicConstantBufferUnmap
pfnDynamicResourceMapDiscard-pfnDynamicResourceUnmap
pfnStagingResourceMap-pfnStagingResourceUnmap
Sin embargo, para mejorar el rendimiento, el controlador puede implementar pares independientes de funciones de mapa sin asignar. El tiempo de ejecución de Microsoft Direct3D llama al par de funciones de asignación y a mapa adecuado en función del tipo de recurso (por ejemplo, un búfer o textura) y el tipo de D3D10_DDI_RESOURCE_USAGE, D3D10_DDI_RESOURCE_BIND_FLAGy D3D10_DDI_MAP valores especificados cuando se crea y asigna el recurso.
Nota
Si el tipo de recurso que se va a asignar y desasignación es un búfer, el tiempo de ejecución de Direct3D establece el parámetro subrecurso en cero.
Aunque el tiempo de ejecución de Direct3D normalmente llama al pfnDynamicResourceMapDiscard-par de función pfnDynamicResourceUnmap para texturas dinámicas, el tiempo de ejecución también llama a este par de funciones para los búferes dinámicos que se crearon con el conjunto de marcas de enlace de D3D10_DDI_BIND_SHADER_RESOURCE.
En el código de ejemplo siguiente se muestran los valores que se establecen cuando el tiempo de ejecución de Direct3D llama a una función específica de asignación o mapa:
//-----------------------------------------------
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 );
}
Restricciones en los valores de entrada
En el caso de los controladores de windows Display Driver Model (WDDM) 1.3 y versiones posteriores, el entorno de ejecución de Microsoft Direct3D proporciona un conjunto restringido de valores de entrada usados por esta función. Para obtener una lista de todos los valores restringidos, consulte mejoras de rendimiento de representación de Direct3D.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Disponible en Windows Vista y versiones posteriores de los sistemas operativos Windows. |
de la plataforma de destino de | Escritorio |
encabezado de | d3d10umddi.h (incluya D3d10umddi.h) |