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 |