> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XG_USAGE (família XBOX One)

> Identifica o uso esperado de recursos durante a renderização. O uso reflete diretamente se um recurso é acessível pela CPU e/ou pela GPU.

Identifica o uso esperado de recursos durante a renderização. O uso reflete diretamente se um recurso é acessível pela CPU e/ou pela GPU (unidade de processamento gráfico).

<a id="syntaxSection" />

## Sintaxe

```cpp theme={null}
enum XG_USAGE
{
    XG_USAGE_DEFAULT = 0,
    XG_USAGE_IMMUTABLE = 1,
    XG_USAGE_DYNAMIC = 2,
    XG_USAGE_STAGING = 3
}  
```

<a id="ID4EDC" />

## Constantes

| Constante | Descrição |
| - | - |
| XG\_USAGE\_DEFAULT | Um recurso que requer acesso de leitura e gravação pela GPU. Essa provavelmente será a opção de uso mais comum. |
| XG\_USAGE\_IMMUTABLE | Um recurso que só pode ser lido pela GPU. Ele não pode ser gravado pela GPU e não pode ser acessado de forma alguma pela CPU. Como esse tipo de recurso não pode ser alterado após ser criado, ele deve ser inicializado quando for criado. |
| XG\_USAGE\_DYNAMIC | Um recurso acessível pela GPU (somente leitura) e pela CPU (somente gravação). Um recurso dinâmico é uma boa opção para um recurso que será atualizado pela CPU pelo menos uma vez por quadro. Para atualizar um recurso dinâmico, use um método **Map**. XG\_USAGE\_DYNAMIC não tem suporte para recursos offline e de posicionamento. Se você tentar usar essa constante de enumeração para recursos offline e de posicionamento, as funções de criação de computador de textura (como [XGCreateTexture1DComputer](/pt-BR/reference/graphics/xg__NR/functions/xgcreatetexture1dcomputer)) ou as funções de cálculo de layout de textura (como [XGComputeTexture1DLayout](/pt-BR/reference/graphics/xg__NR/functions/xgcomputetexture1dlayout)) retornarão E\_INVALIDARGS. |
| XG\_USAGE\_STAGING | Um recurso que dá suporte a transferências de dados (cópia) da GPU para a CPU. |

<a id="remarks" />

## Comentários

Um aplicativo identifica como um recurso deve ser usado (seu uso) em uma descrição de recurso. Há várias estruturas para criar recursos, incluindo [XG\_TEXTURE1D\_DESC](/pt-BR/reference/graphics/xg__NR/structs/xg_texture1d_desc), [XG\_TEXTURE2D\_DESC](/pt-BR/reference/graphics/xg__NR/structs/xg_texture2d_desc), [XG\_TEXTURE3D\_DESC](/pt-BR/reference/graphics/xg__NR/structs/xg_texture3d_desc) e [XG\_BUFFER\_DESC](/pt-BR/reference/graphics/xg__NR/structs/xg_buffer_desc).

Um aplicativo não especifica o tipo de memória (o pool) no qual um  recurso deve ser criado. Em vez disso, você especifica o uso pretendido do recurso e permite que o runtime (em conjunto com o driver e um gerenciador de memória) escolha o tipo de memória que alcançará o melhor desempenho.

<a id="Restrictions" />

### Restrições de uso de recursos

Cada uso determina uma compensação entre a acessibilidade para a CPU e/ou a GPU. Em geral, um acesso de maior desempenho para um desses dois processadores significa um acesso de menor desempenho para o outro. Nos extremos estão os usos **XG\_USAGE\_DEFAULT** e **XG\_USAGE\_STAGING**. **XG\_USAGE\_DEFAULT** restringe o acesso quase inteiramente à GPU. **XG\_USAGE\_STAGING** restringe o acesso quase inteiramente à CPU e permite apenas uma transferência de dados (cópia) de um recurso entre a GPU e a CPU.

O uso **XG\_USAGE\_DYNAMIC** é um caso especial que otimiza o fluxo de dados da CPU para a GPU quando a CPU gera esses dados dinamicamente e os envia com alta frequência. **XG\_USAGE\_DYNAMIC** normalmente é usado em recursos com dados de vértice e em buffers de constantes.

O uso **XG\_USAGE\_IMMUTABLE** é outro caso especial que faz com que a GPU gere dados apenas uma vez, quando você cria um recurso. **XG\_USAGE\_IMMUTABLE** é adequado para dados como texturas, porque esses dados normalmente são lidos na memória a partir de algum formato de arquivo. Portanto, quando você cria uma textura com **XG\_USAGE\_IMMUTABLE**, a GPU lê essa textura diretamente na memória.

Use a tabela a seguir para escolher o uso que melhor descreve como o recurso deve ser acessado pela CPU e pela GPU. Há compensações de desempenho.

| Uso do recurso | Padrão | Dinâmico | Imutável | Preparo |
| - | - | - | - | - |
| Leitura da GPU | sim | sim | sim | sim<sup>1</sup> |
| Gravação da GPU | sim | | | sim<sup>1</sup> |
| Leitura da CPU | | | | sim<sup>1</sup> |
| Gravação da CPU | | sim | | sim<sup>1</sup> |

1: As leituras e gravações da GPU de um recurso com o uso **XG\_USAGE\_STAGING** são restritas a operações de cópia.   Além disso, como os formatos de profundidade e estêncil e os layouts de multiamostragem são detalhes de implementação de um design de GPU específico, em geral, o sistema operacional não pode expor esses formatos e layouts à CPU. Portanto, os recursos de preparo não podem ser buffers de profundidade e estêncil nem destinos de renderização com multiamostragem.

Como os recursos **XG\_USAGE\_DYNAMIC** consomem recursos de hardware específicos, use-os com moderação. O driver de vídeo normalmente aloca memória para recursos **XG\_USAGE\_DYNAMIC** com um algoritmo de cache que favorece as gravações da CPU e prejudica as leituras da CPU.  Portanto, não espere alto desempenho ou mesmo leituras consistentes da CPU a partir de recursos **XG\_USAGE\_DYNAMIC**.

<a id="Bind" />

### Opções de associação de recursos

Para maximizar o desempenho, nem todas as opções de uso de recursos podem ser usadas como recursos de entrada ou saída para o pipeline. Esta tabela identifica essas limitações.

| O recurso pode ser associado como | Padrão | Dinâmico | Imutável | Preparo |
| - | - | - | - | - |
| Entrada para um estágio | sim<sup>2</sup> | sim<sup>3</sup> | sim | |
| Saída de um estágio | sim<sup>2</sup> | | | |

* 2: Se associado como entrada e saída usando exibições diferentes, cada exibição deve usar sub-recursos diferentes.
* 3: O recurso só pode ser criado com um único sub-recurso, não pode ser uma matriz de texturas e não pode ser uma cadeia de mipmaps.

<a id="requirements" />

## Requisitos

**Cabeçalho:** xg.h

**Biblioteca:** xg\_x.lib

**Plataformas com suporte:** família XBOX One

## Confira também

[Referência do XG](/pt-BR/reference/graphics/xg__NR/xg_members)


## Related topics

- [Diretório de tópicos NDA: links ativos do Microsoft Learn](/pt-BR/nda/nda-topic-directory.md)
- [Índice de tópicos sob NDA para desenvolvimento de console com o XBOX GDK](/pt-BR/nda/nda-overview.md)
- [GameInputUsage](/pt-BR/reference/input/gameinput/structs/gameinputusage.md)
- [XNetworkingTcpQueuedReceivedBufferUsageStatistics](/pt-BR/reference/networking/xnetworking/structs/xnetworkingtcpqueuedreceivedbufferusagestatistics.md)
- [Documentação de desenvolvimento de jogos XBOX](/pt-BR/index.md)
