Compartir a través de


Método IDXGIDevice4::OfferResources1 (dxgi1_5.h)

Permite que el sistema operativo libere la memoria de vídeo de los recursos, lo que incluye descartar el contenido y anular la confirmación de la memoria.

Sintaxis

HRESULT OfferResources1(
  [in] UINT                         NumResources,
  [in] IDXGIResource                * const *ppResources,
  [in] DXGI_OFFER_RESOURCE_PRIORITY Priority,
  [in] UINT                         Flags
);

Parámetros

[in] NumResources

Tipo: UINT

Número de recursos de la matriz de argumentos ppResources .

[in] ppResources

Tipo: IDXGIResource*

Matriz de punteros a interfaces IDXGIResource para los recursos que se van a ofrecer.

[in] Priority

Tipo: DXGI_OFFER_RESOURCE_PRIORITY

Valor de tipo DXGI_OFFER_RESOURCE_PRIORITY que indica qué tan valiosos son los datos.

[in] Flags

Tipo: UINT

Especifica el DXGI_OFFER_RESOURCE_FLAGS.

Valor devuelto

Tipo: HRESULT

Este método devuelve un código de error o correcto HRESULT, que puede incluir E_INVALIDARG si un recurso de la matriz, o la prioridad, no es válido.

Comentarios

OfferResources1 (una extensión de la API IDXGIDevice2::OfferResources original) permite que las aplicaciones basadas en D3D permitan la cancelación de la confirmación del almacén de respaldo de una asignación para reducir la confirmación del sistema en condiciones de memoria baja. No se puede volver a usar una asignación de confirmación, por lo que participar en la nueva marca de DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT significa que los nuevos resultados de reclamación deben controlarse correctamente. Consulte las descripciones de marcas en DXGI_RECLAIM_RESOURCE_RESULTS y el ejemplo siguiente.

OfferResources1 y ReclaimResources1no se pueden usar indistintamente con OfferResources y ReclaimResources.

El valor de prioridad que especifica el parámetro Priority describe lo valioso que considera que el autor de la llamada tiene en cuenta el contenido. El sistema operativo usa el valor de prioridad para descartar los recursos en orden de prioridad. El sistema operativo descarta un recurso que se ofrece con prioridad baja antes de descartar un recurso que se ofrece con una prioridad más alta.

Si llama a OfferResources1 para ofrecer un recurso mientras el recurso está enlazado a la canalización, el recurso no está enlazado. No se puede llamar a OfferResources1 en un recurso asignado. Después de ofrecer un recurso, el recurso no se puede asignar ni enlazar a la canalización hasta que llame al método ReclaimResources1 para reclamar el recurso. No se puede llamar a OfferResources1 para ofrecer recursos inmutables.

Para ofrecer recursos compartidos, llame a OfferResources1 solo en uno de los dispositivos que comparten. Para garantizar el acceso exclusivo a los recursos, debe usar un objeto IDXGIKeyedMutex y, a continuación, llamar a OfferResources1 solo mientras mantiene la exclusión mutua. De hecho, no puede ofrecer recursos compartidos a menos que use IDXGIKeyedMutex porque no se admite la oferta de recursos compartidos sin usar IDXGIKeyedMutex .

Es posible que el controlador de pantalla en modo de usuario no ofrezca inmediatamente los recursos especificados en una llamada a OfferResources1. El controlador puede posponerlos hasta la siguiente llamada a IDXGISwapChain::P resent, IDXGISwapChain1::P resent1 o ID3D11DeviceContext::Flush.

Ejemplos

Se suspende una aplicación basada en UWP en segundo plano y desea devolver sus recursos gráficos al sistema, en caso de que otra aplicación los quiera. La aplicación reclamará estos recursos cuando se reanude. La aplicación también se da cuenta de que la confirmación total del sistema disponible es pequeña en esta plataforma y está dispuesta a permitir que sus recursos se quiten de la confirmación del sistema. Si se produce un error en el proceso de reclamación porque el sistema no tiene memoria, la aplicación controla la condición de error.

struct Texture 
{ 
    UINT32 Width; 
    UINT32 Height; 
    UINT32 Mips; 
    ID3D11Texture2D* pResource; 
};  

void Application::OfferInterfaceResources(ID3D11Device* pD3D11Device) 
{ 
    CComPtr<IDXGIDevice4> pDXGIDevice; 
    ThrowIfFailed(pD3D11Device->QueryInterface(&pDXGIDevice)); 

    for(Texture& t : m_Textures) 
    { 
        CComPtr<IDXGIResource> pDXGIResource; 
        ThrowIfFailed(t.pResource->QueryInterface(&pDXGIResource));   
        ThrowIfFailed(pDXGIDevice->OfferResources1(1, &pDXGIResource, DXGI_OFFER_RESOURCE_PRIORITY_NORMAL, 
											DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT)); 
    } 
} 

void Application::ReclaimInterfaceResources (ID3D11Device* pD3D11Device) 
{ 
    CComPtr<IDXGIDevice4> pDXGIDevice; 
    ThrowIfFailed(pD3D11Device->QueryInterface(&pDXGIDevice));  

    for(Texture& t : m_Textures) 
    { 
        CComPtr<IDXGIResource> pDXGIResource; 
        ThrowIfFailed(t.pResource->QueryInterface(&pDXGIResource));       

        DXGI_RECLAIM_RESOURCE_RESULTS Result; 
        ThrowIfFailed(pDXGIDevice->ReclaimResources1(1, &pDXGIResource, &Result)); 

        // If the surface lost its backing commitment, it must be recreated. 

        if(Result == DXGI_RECLAIM_RESOURCE_RESULT_NOT_COMMITTED) 
        { 
            t.pResource->Release(); 
            t.pResource = CreateTexture(t.Width, t.Height, t.Mips); 
        }  

        // If the surface lost its content (either because it was discarded, or recreated 
        // due to lost commitment), we must regenerate the content. 

        if(Result != DXGI_RECLAIM_RESOURCE_RESULT_OK) 
        { 
            PopulateContent(t); 
        } 
    } 
} 

Requisitos

   
Plataforma de destino Windows
Encabezado dxgi1_5.h
Library Dxgi.lib
Archivo DLL Dxgi.dll

Consulte también

DXGI_RECLAIM_RESOURCE_RESULTS

IDXGIDevice4