> ## 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.

# CreatePlacedResource1 (consoles XBOX Series)

> Cria um recurso posicionado.

Cria um recurso posicionado.

## Sintaxe

```cpp theme={null}
HRESULT CreatePlacedResource1(  
         ID3D12Heap* pHeap,  
         UINT64 HeapOffset,  
         const D3D12_RESOURCE_DESC1* pDesc,  
         D3D12_RESOURCE_STATES InitialState,  
         const D3D12_CLEAR_VALUE* pOptimizedClearValue,  
         REFIID riid,  
         void** ppvResource  
)  
```

### Parâmetros

*pHeap*   \_In\_\
Tipo: ID3D12Heap\*

Um ponteiro para a interface ID3D12Heap que representa o heap no qual o recurso é posicionado.

*HeapOffset*   \
Tipo: UINT64

O deslocamento, em bytes, até o recurso. HeapOffset deve ser um múltiplo do alinhamento do recurso, e HeapOffset mais o tamanho do recurso deve ser menor ou igual ao tamanho do heap. GetResourceAllocationInfo deve ser usado para conhecer os tamanhos dos recursos de textura.

*pDesc*   \_In\_\
Tipo: [D3D12\_RESOURCE\_DESC1\*](/pt-BR/reference/graphics/d3d12_xs/structs/d3d12_resource_desc1)

Um ponteiro para uma estrutura D3D12\_RESOURCE\_DESC1 que descreve o recurso.

*InitialState*   \
Tipo: [D3D12\_RESOURCE\_STATES](/pt-BR/reference/graphics/d3d12_x/enums/d3d12_resource_states)

O estado inicial do recurso, como uma combinação OR bit a bit de constantes de enumeração D3D12\_RESOURCE\_STATES.

Quando um recurso é criado junto com um heap D3D12\_HEAP\_TYPE\_UPLOAD, InitialState deve ser D3D12\_RESOURCE\_STATE\_GENERIC\_READ. Quando um recurso é criado junto com um heap D3D12\_HEAP\_TYPE\_READBACK, InitialState deve ser D3D12\_RESOURCE\_STATE\_COPY\_DEST.

*pOptimizedClearValue*   \_In\_opt\_\
Tipo: D3D12\_CLEAR\_VALUE\*

Especifica um D3D12\_CLEAR\_VALUE que descreve o valor padrão de uma cor de limpeza.

pOptimizedClearValue especifica um valor para o qual as operações de limpeza são mais otimizadas. Quando o recurso criado é uma textura com os sinalizadores D3D12\_RESOURCE\_FLAG\_ALLOW\_RENDER\_TARGET ou D3D12\_RESOURCE\_FLAG\_ALLOW\_DEPTH\_STENCIL, seu aplicativo deve escolher o valor com o qual a operação de limpeza será chamada com mais frequência.

As operações de limpeza podem ser chamadas com outros valores, mas essas operações não serão tão eficientes quanto quando o valor corresponde ao que foi passado na criação do recurso.

pOptimizedClearValue deve ser NULL quando usado com D3D12\_RESOURCE\_DIMENSION\_BUFFER.

*riid*   \_In\_\
Tipo: REFIID

O identificador global exclusivo (GUID) da interface do recurso. Este é um parâmetro de entrada.

O REFIID, ou GUID, da interface para o recurso pode ser obtido usando a macro \_\_uuidof. Por exemplo, \_\_uuidof(ID3D12Resource) obtém o GUID da interface para um recurso. Embora riid seja, mais comumente, o GUID de ID3D12Resource, ele pode ser qualquer GUID de qualquer interface. Se o objeto de recurso não der suporte à interface desse GUID, a criação falhará com E\_NOINTERFACE.

*ppvResource*   \_COM\_Outptr\_\
Tipo: void\*\*

Um ponteiro para um bloco de memória que recebe um ponteiro para o recurso. ppvResource pode ser NULL, para permitir o teste de capacidade. Quando ppvResource é NULL, nenhum objeto será criado e S\_FALSE será retornado quando pResourceDesc e os outros parâmetros forem válidos.

### Valor retornado

Tipo: HRESULT

Esse método retorna E\_OUTOFMEMORY se não houver memória suficiente para criar o recurso. Consulte Códigos de retorno do Direct3D 12 para outros valores de retorno possíveis.

## Comentários

CreatePlacedResource é semelhante a mapear totalmente um recurso reservado para um deslocamento dentro de um heap; porém, o espaço de endereço virtual associado a um heap também pode ser reutilizado.

Recursos posicionados são mais leves de criar e destruir do que recursos confirmados. Isso ocorre porque nenhum heap é criado nem destruído durante essas operações. Além disso, os recursos posicionados permitem uma técnica ainda mais leve de reutilização de memória do que a criação e a destruição de recursos, ou seja, a reutilização por meio de aliasing e de barreiras de aliasing. Vários recursos posicionados podem se sobrepor simultaneamente no mesmo heap, mas apenas um único recurso sobreposto pode ser usado por vez.

Há duas semânticas de uso de recursos posicionados: um modelo simples e um modelo avançado. Recomendamos que você escolha o modelo simples (ele maximiza o suporte das ferramentas gráficas em todo o ecossistema diversificado de GPUs), a menos que e até que você descubra que precisa do modelo avançado para seu aplicativo.

### Modelo simples

Nesse modelo, você pode considerar que um recurso posicionado está em um de dois estados: ativo ou inativo. É inválido a GPU ler ou gravar em um recurso inativo. Os recursos posicionados são criados no estado inativo.

Para ativar um recurso com uma barreira de aliasing em uma lista de comandos, seu aplicativo deve passar o recurso em D3D12\_RESOURCE\_ALIASING\_BARRIER::pResourceAfter. pResourceBefore pode ser deixado como NULL durante uma ativação. Todos os recursos que compartilham memória física com o recurso ativado passam a ficar inativos, o que inclui recursos posicionados e reservados sobrepostos.

As barreiras de aliasing devem ser agrupadas e enviadas em conjunto, para maximizar a eficiência.

Após a ativação, os recursos com os sinalizadores de destino de renderização ou de estêncil de profundidade devem ser inicializados adicionalmente. Consulte as observações sobre a inicialização de recursos necessária abaixo.

#### Observações sobre a inicialização de recursos necessária

Certos tipos de recursos ainda exigem inicialização. Os recursos com os sinalizadores de destino de renderização ou de estêncil de profundidade devem ser inicializados com uma operação de limpeza ou com uma coleção de cópias completas de sub-recursos. Se uma barreira de aliasing tiver sido usada para indicar a transição entre dois recursos com alias, a inicialização deverá ocorrer após a barreira de aliasing. Essa inicialização ainda é necessária sempre que um recurso seria ativado no modelo simples.

Os recursos posicionados e reservados com os sinalizadores de destino de renderização ou de estêncil de profundidade devem ser inicializados com uma das operações a seguir antes que outras operações sejam suportadas.

Uma operação Clear; por exemplo, ClearRenderTargetView ou ClearDepthStencilView.
Uma operação DiscardResource.
Uma operação Copy; por exemplo, CopyBufferRegion, CopyTextureRegion ou CopyResource.
Os aplicativos devem preferir a operação mais explícita que resulte na menor quantidade de texels modificados. Considere os exemplos a seguir.

Usar um buffer de profundidade para resolver a visibilidade de pixels normalmente exige que cada texel de profundidade comece em 1.0 ou 0. Portanto, uma operação Clear deve ser a opção mais eficiente para a inicialização de buffers de profundidade com alias.
Um aplicativo pode usar um destino de renderização com alias como destino para mapeamento de tons. Como o aplicativo renderizará sobre cada pixel durante o mapeamento de tons, DiscardResource deve ser a opção mais eficiente para a inicialização.

### Modelo avançado

Nesse modelo, você pode ignorar a abstração de estado ativo/inativo. Em vez disso, você deve respeitar estas regras de nível mais baixo.

Uma barreira de aliasing deve existir entre dois acessos diferentes de recursos da GPU à mesma memória física, desde que esses acessos estejam na mesma chamada a ExecuteCommandLists.
A primeira operação de renderização em certos tipos de recursos com alias ainda deve ser uma inicialização, assim como no modelo simples.
As operações de inicialização devem ocorrer em um sub-recurso inteiro ou em uma granularidade de 64 KB. A inicialização de um sub-recurso inteiro é suportada para todos os tipos de recursos. Uma granularidade de inicialização de 64 KB, alinhada em um deslocamento de 64 KB, é suportada para buffers e texturas com o layout de textura 64KB\_UNDEFINED\_SWIZZLE ou 64KB\_STANDARD\_SWIZZLE (consulte D3D12\_TEXTURE\_LAYOUT).

#### Observações sobre a barreira de aliasing

A barreira de aliasing pode definir NULL tanto para pResourceAfter quanto para pResourceBefore. A definição de coerência de memória de ExecuteCommandLists e de uma barreira de aliasing é a mesma, de modo que dois acessos com alias à mesma memória física não precisam de barreira de aliasing quando os acessos estão em duas invocações diferentes de ExecuteCommandLists.

Para os modelos de uso avançado do D3D12, a definição de sincronização de ExecuteCommandLists é equivalente a uma barreira de aliasing. Portanto, os aplicativos podem inserir uma barreira de aliasing entre reutilizações de memória física ou garantir que os dois usos com alias da memória física ocorram em duas chamadas separadas a ExecuteCommandLists.

A quantidade de inativação varia de acordo com as propriedades do recurso. Texturas com layouts de memória indefinidos são o pior caso, pois a textura inteira deve ser inativada atomicamente. Para dois recursos sobrepostos com layouts definidos, a inativação pode resultar apenas nas regiões alinhadas sobrepostas de um recurso. A herança de dados pode até ser bem definida. Para obter mais detalhes, consulte Aliasing de memória e herança de dados.

## Requisitos

**Cabeçalho:** d3d12\_xs.h

**Biblioteca:** d3d12\_xs.lib\
**Plataformas compatíveis**: consoles XBOX Series

## Confira também

[ID3D12Device8](/pt-BR/reference/graphics/d3d12_xs/interfaces/ID3D12Device8/id3d12device8)


## Related topics

- [CreateReservedResource1 (XBOX Series consoles)](/reference/graphics/d3d12/interfaces/id3d12device4/methods/id3d12device4_createreservedresource1_public.md)
- [CreateReservedResource1 (XBOX Series 콘솔)](/ko/reference/graphics/d3d12/interfaces/id3d12device4/methods/id3d12device4_createreservedresource1_public.md)
- [CreateReservedResource1 (XBOX Series 主机)](/zh-CN/reference/graphics/d3d12/interfaces/id3d12device4/methods/id3d12device4_createreservedresource1_public.md)
- [CreateReservedResource1 (consolas XBOX Series)](/es/reference/graphics/d3d12/interfaces/id3d12device4/methods/id3d12device4_createreservedresource1_public.md)
- [CreateReservedResource1 (XBOX Series 本体)](/ja-jp/reference/graphics/d3d12/interfaces/id3d12device4/methods/id3d12device4_createreservedresource1_public.md)
