Compartilhar via


Método ID3D11DeviceContext2::ResizeTilePool (d3d11_2.h)

Redimensiona um pool de blocos.

Sintaxe

HRESULT ResizeTilePool(
  [in] ID3D11Buffer *pTilePool,
  [in] UINT64       NewSizeInBytes
);

Parâmetros

[in] pTilePool

Tipo: ID3D11Buffer*

Um ponteiro para um ID3D11Buffer para o pool de blocos redimensionar.

[in] NewSizeInBytes

Tipo: UINT64

O novo tamanho em bytes do pool de blocos. O tamanho deve ser um múltiplo de 64 KB ou 0.

Retornar valor

Tipo: HRESULT

Retorna S_OK se tiver êxito; caso contrário, retorna um dos seguintes:

  • Retorna E_INVALIDARG se o novo tamanho do pool de blocos não for um múltiplo de 64 KB ou 0.
  • Retorna E_OUTOFMEMORY se a chamada resultar na necessidade de alocar espaço para novos mapeamentos de tabela de página, mas ficando sem memória.
  • Retorna DXGI_ERROR_DEVICE_REMOVED se o cartão de vídeo foi fisicamente removido do sistema ou se ocorreu uma atualização de driver para o cartão de vídeo.
Por E_INVALIDARG ou E_OUTOFMEMORY, o pool de blocos existente permanece inalterado, o que inclui mapeamentos existentes.

Comentários

ResizeTilePool aumenta ou diminui o tamanho do pool de blocos, dependendo se o aplicativo precisa de mais ou menos conjunto de trabalho para os recursos lado a lado mapeados nele. Um aplicativo pode alocar pools de blocos adicionais para novos recursos lado a lado, mas se qualquer recurso lado a lado precisar de mais espaço do que o disponível inicialmente em seu pool de blocos, o aplicativo poderá aumentar o tamanho do pool de blocos do recurso. Um recurso lado a lado não pode ter mapeamentos em vários pools de blocos simultaneamente.

Quando você aumenta o tamanho de um pool de blocos, blocos adicionais são adicionados ao final do pool de blocos por meio de uma ou mais novas alocações pelo driver; seu aplicativo não pode detectar a divisão nas novas alocações. A memória existente no pool de blocos é deixada intocada e os mapeamentos de recursos lado a lado existentes nessa memória permanecem intactos.

Quando você diminui o tamanho de um pool de blocos, os blocos são removidos do final (isso é permitido mesmo abaixo do tamanho de alocação inicial, até 0). Isso significa que novos mapeamentos não podem ser feitos além do novo tamanho. Porém, os mapeamentos existentes após o final do novo tamanho permanecem intactos e utilizáveis. A memória é mantida ativa, desde que os mapeamentos para qualquer parte das alocações que estão sendo usadas para a memória do pool de blocos permaneçam. Se, após a diminuição, alguma memória tiver sido mantida ativa porque os mapeamentos de bloco estão apontando para ela e o pool de blocos será aumentado novamente (por qualquer quantidade), a memória existente será reutilizado primeiro antes que quaisquer alocações adicionais ocorram para atender ao tamanho do aumento.

Para poder economizar memória, um aplicativo precisa não apenas diminuir um pool de blocos, mas também remover e remapear mapeamentos existentes após o final do novo tamanho menor do pool de blocos.

O ato de diminuir (e remover mapeamentos) não necessariamente produz economia de memória imediata. A liberação de memória depende de quão granulares são as alocações subjacentes do driver para o pool de blocos. Quando uma diminuição no tamanho de um pool de blocos é suficiente para tornar uma alocação de driver não usada, o driver pode liberar a alocação. Se um pool de blocos foi aumentado e, se você diminuir para tamanhos anteriores (e remover e remapear mapeamentos de bloco correspondentemente), provavelmente gerará economia de memória. No entanto, esse cenário não é garantido caso os tamanhos não estejam exatamente alinhados com os tamanhos de alocação subjacentes escolhidos pelo driver.

Para obter mais informações sobre recursos lado a lado, consulte Recursos lado a lado.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8.1 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2012 R2 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho d3d11_2.h
Biblioteca D3D11.lib

Confira também

ID3D11DeviceContext2