Compartilhar via


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

Permite que o sistema operacional libere a memória de vídeo dos recursos, incluindo descartar o conteúdo e descompanhá-lo.

Sintaxe

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

Parâmetros

[in] NumResources

Tipo: UINT

O número de recursos na matriz de argumentos ppResources .

[in] ppResources

Tipo: IDXGIResource*

Uma matriz de ponteiros para interfaces IDXGIResource para os recursos a serem oferecidos.

[in] Priority

Tipo: DXGI_OFFER_RESOURCE_PRIORITY

Um valor do tipo DXGI_OFFER_RESOURCE_PRIORITY que indica o quão valiosos são os dados.

[in] Flags

Tipo: UINT

Especifica o DXGI_OFFER_RESOURCE_FLAGS.

Valor retornado

Tipo: HRESULT

Esse método retorna um código de erro ou êxito HRESULT, que pode incluir E_INVALIDARG se um recurso na matriz ou a prioridade for inválido.

Comentários

OfferResources1 (uma extensão da API IDXGIDevice2::OfferResources original) permite que aplicativos baseados em D3D permitam a descompanhamento do repositório de backup de uma alocação para reduzir a confirmação do sistema em condições de memória baixa. Uma alocação despromitida não pode ser reutilizado, portanto, aceitar o novo sinalizador DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT significa que os novos resultados de recuperação devem ser tratados corretamente. Veja as descrições do sinalizador em DXGI_RECLAIM_RESOURCE_RESULTS e o Exemplo abaixo.

OfferResources1 e ReclaimResources1 podem não ser usados de forma intercambiável com OfferResources e ReclaimResources.

O valor de prioridade especificado pelo parâmetro Priority descreve o quão valioso o chamador considera o conteúdo. O sistema operacional usa o valor de prioridade para descartar recursos em ordem de prioridade. O sistema operacional descarta um recurso que é oferecido com baixa prioridade antes de descartar um recurso que é oferecido com prioridade mais alta.

Se você chamar OfferResources1 para oferecer um recurso enquanto o recurso estiver associado ao pipeline, o recurso será desvinculado. Você não pode chamar OfferResources1 em um recurso mapeado. Depois de oferecer um recurso, o recurso não poderá ser mapeado ou vinculado ao pipeline até que você chame o método ReclaimResources1 para recuperar o recurso. Você não pode chamar OfferResources1 para oferecer recursos imutáveis.

Para oferecer recursos compartilhados, chame OfferResources1 em apenas um dos dispositivos de compartilhamento. Para garantir o acesso exclusivo aos recursos, você deve usar um objeto IDXGIKeyedMutex e chamar OfferResources1 somente enquanto mantém o mutex. Na verdade, você não pode oferecer recursos compartilhados a menos que use IDXGIKeyedMutex porque não há suporte para a oferta de recursos compartilhados sem o uso de IDXGIKeyedMutex .

O driver de exibição do modo de usuário pode não oferecer imediatamente os recursos especificados em uma chamada para OfferResources1. O driver pode adiar a oferta até a próxima chamada para IDXGISwapChain::P resent, IDXGISwapChain1::P resent1 ou ID3D11DeviceContext::Flush.

Exemplos

Um aplicativo baseado em UWP está sendo suspenso em segundo plano e deseja oferecer seus recursos gráficos de volta ao sistema, caso outro aplicativo os queira. O aplicativo recuperará esses recursos quando for retomado. O aplicativo também percebe que a confirmação total do sistema disponível é pequena nessa plataforma e está disposta a permitir que seus recursos sejam removidos do commit do sistema. Se o processo de recuperação falhar porque o sistema está sem memória, o aplicativo manipula a condição de erro.

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
Cabeçalho dxgi1_5.h
Biblioteca Dxgi.lib
DLL Dxgi.dll

Confira também

DXGI_RECLAIM_RESOURCE_RESULTS

IDXGIDevice4