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

# SetPredication

> Définit un prédicat de rendu.

Définit un prédicat de rendu.

## Syntaxe

```cpp theme={null}
void SetPredication(
    ID3D12Resource  pBuffer,
    UINT64 AlignedBufferOffset,
    D3D12_PREDICATION_OP Operation
)
```

### Paramètres

*pBuffer \[in, optional]*\
Type : ID3D12Resource \*

Mémoire tampon, sous forme d'[ID3D12Resource](/fr/reference/graphics/d3d12_xs/interfaces/ID3D12Resource/id3d12resource_xs), qui doit être dans l'état [**D3D12\_RESOURCE\_STATE\_PREDICATION**](/fr/reference/graphics/d3d12_x/enums/d3d12_resource_states) ou [**D3D21\_RESOURCE\_STATE\_INDIRECT\_ARGUMENT**](/fr/reference/graphics/d3d12_x/enums/d3d12_resource_states) (les deux valeurs sont identiques et sont fournies comme alias par souci de clarté), ou **NULL** pour désactiver la prédication.

*AlignedBufferOffset \[in]*\
Type : UINT64

Décalage aligné de la mémoire tampon, sous forme de UINT64.

*Operation \[in]*\
Type : D3D12\_PREDICATION\_OP

Spécifie un [D3D12\_PREDICATION\_OP](/fr/reference/graphics/d3d12/enums/d3d12_predication_op_public), tel que D3D12\_PREDICATION\_OP\_EQUAL\_ZERO ou D3D12\_PREDICATION\_OP\_NOT\_EQUAL\_ZERO.

### Valeur de retour

Type : void

Aucune.

## Notes

Utilisez cette méthode pour indiquer que les commandes de rendu et de manipulation des ressources suivantes ne sont pas réellement exécutées si les données de prédicat résultantes sont égales à l'opération spécifiée.

Contrairement à Direct3D 11, dans Direct3D 12, l'état de prédication n'est pas hérité par les listes de commandes directes, et la prédication est toujours respectée (il n'existe pas d'indications de prédication).
Toutes les listes de commandes directes commencent avec la prédication désactivée.
Les bundles héritent de l'état de prédication.
Il est autorisé de lier plusieurs fois le même prédicat.

Les appels d'API non autorisés entraînent le renvoi d'une erreur par [Close](/fr/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_close_public),
ou l'abandon de la liste de commandes et la suppression de l'appareil par [ID3D12CommandQueue::ExecuteCommandLists](/fr/reference/graphics/d3d12_x/interfaces/id3d12commandqueue/methods/id3d12commandqueue_executecommandlists).

La couche de débogage émet des erreurs chaque fois que la validation du runtime échoue.

Pour plus d'informations, reportez-vous à [Prédication](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/predication).

#### Exemples

L'exemple [D3D12PredicationQueries](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/working-samples) utilise **ID3D12GraphicsCommandList::SetPredication** comme suit :

```cpp theme={null}
// Fill the command list with all the render commands and dependent state.
void D3D12PredicationQueries::PopulateCommandList()
{
// Command list allocators can only be reset when the associated
// command lists have finished execution on the GPU; apps should use
// fences to determine GPU execution progress.
ThrowIfFailed(m_commandAllocators[m_frameIndex]->Reset());

// However, when ExecuteCommandList() is called on a particular command
// list, that command list can then be reset at any time and must be before
// re-recording.
ThrowIfFailed(m_commandList->Reset(m_commandAllocators[m_frameIndex].Get(), m_pipelineState.Get()));

// Set necessary state.
m_commandList->SetGraphicsRootSignature(m_rootSignature.Get());

ID3D12DescriptorHeap* ppHeaps[] = { m_cbvHeap.Get() };
m_commandList->SetDescriptorHeaps(_countof(ppHeaps), ppHeaps);

m_commandList->RSSetViewports(1, &m_viewport);
m_commandList->RSSetScissorRects(1, &m_scissorRect);

// Indicate that the back buffer will be used as a render target.
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET));

CD3DX12_CPU_DESCRIPTOR_HANDLE rtvHandle(m_rtvHeap->GetCPUDescriptorHandleForHeapStart(), m_frameIndex, m_rtvDescriptorSize);
CD3DX12_CPU_DESCRIPTOR_HANDLE dsvHandle(m_dsvHeap->GetCPUDescriptorHandleForHeapStart());
m_commandList->OMSetRenderTargets(1, &rtvHandle, FALSE, &dsvHandle);

// Record commands.
const float clearColor[] = { 0.0f, 0.2f, 0.4f, 1.0f };
m_commandList->ClearRenderTargetView(rtvHandle, clearColor, 0, nullptr);
m_commandList->ClearDepthStencilView(dsvHandle, D3D12_CLEAR_FLAG_DEPTH, 1.0f, 0, 0, nullptr);

// Draw the quads and perform the occlusion query.
{
CD3DX12_GPU_DESCRIPTOR_HANDLE cbvFarQuad(m_cbvHeap->GetGPUDescriptorHandleForHeapStart(), m_frameIndex * CbvCountPerFrame, m_cbvSrvDescriptorSize);
CD3DX12_GPU_DESCRIPTOR_HANDLE cbvNearQuad(cbvFarQuad, m_cbvSrvDescriptorSize);

m_commandList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
m_commandList->IASetVertexBuffers(0, 1, &m_vertexBufferView);

// Draw the far quad conditionally based on the result of the occlusion query
// from the previous frame.
m_commandList->SetGraphicsRootDescriptorTable(0, cbvFarQuad);
m_commandList->SetPredication(m_queryResult.Get(), 0, D3D12_PREDICATION_OP_EQUAL_ZERO);
m_commandList->DrawInstanced(4, 1, 0, 0);

// Disable predication and always draw the near quad.
m_commandList->SetPredication(nullptr, 0, D3D12_PREDICATION_OP_EQUAL_ZERO);
m_commandList->SetGraphicsRootDescriptorTable(0, cbvNearQuad);
m_commandList->DrawInstanced(4, 1, 4, 0);

// Run the occlusion query with the bounding box quad.
m_commandList->SetGraphicsRootDescriptorTable(0, cbvFarQuad);
m_commandList->SetPipelineState(m_queryState.Get());
m_commandList->BeginQuery(m_queryHeap.Get(), D3D12_QUERY_TYPE_BINARY_OCCLUSION, 0);
m_commandList->DrawInstanced(4, 1, 8, 0);
m_commandList->EndQuery(m_queryHeap.Get(), D3D12_QUERY_TYPE_BINARY_OCCLUSION, 0);

// Resolve the occlusion query and store the results in the query result buffer
// to be used on the subsequent frame.
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_queryResult.Get(), D3D12_RESOURCE_STATE_PREDICATION, D3D12_RESOURCE_STATE_COPY_DEST));
m_commandList->ResolveQueryData(m_queryHeap.Get(), D3D12_QUERY_TYPE_BINARY_OCCLUSION, 0, 1, m_queryResult.Get(), 0);
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_queryResult.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PREDICATION));
}

// Indicate that the back buffer will now be used to present.
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT));

ThrowIfFailed(m_commandList->Close());
}

```

Consultez [Exemple de code dans la référence D3D12](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/notes-on-example-code).

<div class="code" />

## Configuration requise

**En-tête :** d3d12\_xs.h ou d3d12\_x.h\
**Bibliothèque :** d3d12\_xs.lib ou d3d12\_x.lib\
**Plateformes prises en charge** : consoles XBOX Series et famille XBOX One

## Voir aussi

[ID3D12GraphicsCommandList](/fr/reference/graphics/d3d12_xs/interfaces/ID3D12GraphicsCommandList/id3d12graphicscommandlist_xs)

[Procédure pas à pas des requêtes de prédication](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/predication-queries)


## Related topics

- [D3D12_PREDICATION_OP](/fr/reference/graphics/d3d12/enums/d3d12_predication_op_public.md)
- [BeginQuery](/fr/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_beginquery_public.md)
- [EndQuery](/fr/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_endquery_public.md)
- [ID3D12QueryHeap](/fr/reference/graphics/d3d12/interfaces/id3d12queryheap/id3d12queryheap_public.md)
- [CreateQueryHeap](/fr/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_createqueryheap_public.md)
