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

# SetShaderScratchSpaceX (consoles XBOX Series)

> Permite o controle direto dos registros SPI_TMPRING_SIZE e COMPUTE_TMPRING_SIZE e dos anéis de gráficos e de computação, respectivamente.

Permite o controle direto dos registros SPI\_TMPRING\_SIZE e COMPUTE\_TMPRING\_SIZE e dos anéis de gráficos e de computação, respectivamente.

## Sintaxe

```cpp theme={null}
void SetShaderScratchSpaceX(  
         D3D12XBOX_SET_SHADER_SCRATCH_SPACE_FLAGS Flags,  
         D3D12_GPU_VIRTUAL_ADDRESS Destination,  
         UINT64 SizeBytes,  
         UINT SizePerWaveInBytes  
)  
```

### Parâmetros

*Flags*   \_In\_\
Tipo: [D3D12XBOX\_SET\_SHADER\_SCRATCH\_SPACE\_FLAGS](/pt-BR/reference/graphics/d3d12_xs/enums/d3d12xbox_set_shader_scratch_space_flags_xs)

Escolha computação, gráficos ou ambos.

*Destination*   \_In\_\
Tipo: D3D12\_GPU\_VIRTUAL\_ADDRESS

Endereço base do espaço de rascunho (scratch); deve estar alinhado a 1KB ou ser nulo. Definir esse valor como nulo reprograma os padrões do driver definidos no momento.

*SizeBytes*   \_In\_\
Tipo: UINT64

Tamanho do espaço de rascunho, alinhado a 1KB; deve ser 0 se o endereço for nulo.

*SizePerWaveInBytes*   \_In\_\
Tipo: UINT

Tamanho do espaço de rascunho por wave; deve estar alinhado a 1KB, deve ser menor ou igual ao tamanho total do espaço de rascunho e deve ser 0 se o endereço for nulo.

### Valor retornado

Tipo: void

## Comentários

Nosso hardware oferece suporte a alterações em pipeline nos registros tmpring\_size, mas uma liberação completa do pipeline é necessária quando o endereço de memória subjacente do espaço de rascunho é reutilizado. Isso leva ao seguinte: por padrão, o driver gráfico aloca um único espaço de rascunho para gráficos e computação e define os registros tmpring\_size para acomodar apenas algumas waves por SIMD. Isso significa que a ocupação é baixa quando o scratch nos shaders está habilitado. Por padrão, devido a haver apenas uma única alocação de computação, a computação assíncrona não pode ser usada simultaneamente com a computação gráfica, o que significa que shaders com scratch não podem ser usados na computação assíncrona de forma alguma. Os desenvolvedores podem substituir os tamanhos de scratch por meio da API especializada de criação de dispositivo do XBOX, mas não podem substituir esse comportamento.

Esta API permite reprogramar esse comportamento padrão de modo que seja possível obter maior ocupação e sobreposição de trabalho em gráficos e na computação assíncrona. Nenhuma sincronização é executada internamente e nenhuma verificação é feita nos ponteiros de memória para evitar reutilização; portanto, é muito importante que os usuários implementem sua própria sincronização para garantir que não ocorra reutilização de memória quando o registro tmpring\_size for reprogramado.

É possível consultar o tamanho de scratch necessário por wave usando as seguintes APIs

```cpp theme={null}
UINT GetScratchSize(
    ID3D12PipelineState* pPso)
{
    ComPtr<ID3DBlob> blob;

    // Retrieve scratch size, if present
    HRESULT hr = pPso->GetInformationX(D3D12XBOX_PIPELINE_STATE_INFORMATION_TYPE_SCRATCH_SIZE_PER_WAVE_IN_UNITS_OF_256DW, 0, &blob);
    if (FAILED(hr))
        return 0;

    const UINT* pValue = (UINT*)blob->GetBufferPointer();

    return *pValue * 1024;
}
```

E aqui está um exemplo de como ele pode ser definido, permitindo, por exemplo, que 8 waves compartilhem o espaço de rascunho (observe que, na prática, esse número de waves é pequeno demais)

```cpp theme={null}
    const UINT scratchSizePerWaveBytes = GetScratchSize(pso.Get());
    const UINT scratchSize = scratchSizePerWaveBytes * 8;

    pCmdList->SetShaderScratchSpaceX(D3D12XBOX_SET_SHADER_SCRATCH_SPACE_FLAGS_GRAPHICS,
        pScratch0->GetGPUVirtualAddress(),
        scratchSize,
        scratchSizePerWaveBytes);
    pCmdList->SetPipelineState(pso.Get());
    pCmdList->DrawInstanced(128, 1, 0, 0);
```

Por fim, o hardware não oferece suporte a ocupação superior a 16 quando SCRATCH\_EN está habilitado, pois a programação de tmpring\_size não permite especificar mais de 32 waves por unidade de computação.

## Requisitos

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

**Biblioteca:** d3d12\_xs.lib

**Plataformas compatíveis**: XBOX Series X|S

## Confira também

[ID3D12GraphicsCommandList6](/pt-BR/reference/graphics/d3d12_xs/interfaces/ID3D12GraphicsCommandList6/id3d12graphicscommandlist6)


## Related topics

- [Répertoire des rubriques NDA : liens actifs vers Microsoft Learn](/fr/nda/nda-topic-directory.md)
- [Diretório de tópicos NDA: links ativos do Microsoft Learn](/pt-BR/nda/nda-topic-directory.md)
- [Scratch page](/tools/tools-console/wdp/windows-device-portal-on-xbox-scratch.md)
- [RSSetShadingRateImage (XBOX Series consoles)](/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist5/methods/id3d12graphicscommandlist5_rssetshadingrateimage_public.md)
- [GetShaderStackSize (XBOX Series consoles)](/reference/graphics/d3d12/interfaces/id3d12stateobjectproperties/methods/id3d12stateobjectproperties_getshaderstacksize_public.md)
